diff --git a/Build.ps1 b/Build.ps1 index e29729b..4258fa6 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -30,7 +30,7 @@ Set-Location $PSScriptRoot # EXAMPLE: "/p:SourceRevisionId=g$(Git-Latest-Commit)" #------------------------------------------------------------------------------- $properties = @('/p:Configuration=Release', "/p:Platform=$Platform", - '/p:Version=16.2.1-beta') + "/p:SourceRevisionId=g$(Git-Latest-Commit)") $sln = '"{0}"' -f "$PSScriptRoot\src\MyJournal.Notebook.sln" diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a2a459..2ced1f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## [16.3.0] - 2021-12-05 + +### Added + +- Feature request: configure the notebook used • Issue \#[3] • released from beta + +### Changed + +- Upgraded OneNote XML schema from 2010 to 2013 version + +### Removed + +- OneNote 2010 is no longer supported + ## [16.2.1-beta] - 2021-04-07 ### Added @@ -35,3 +49,4 @@ This project adheres to [Semantic Versioning](https://semver.org/). [16.1.0]:https://github.com/atrenton/MyJournal.Notebook/releases/tag/v16.1.0 [16.2.0]:https://github.com/atrenton/MyJournal.Notebook/releases/tag/v16.2.0 [16.2.1-beta]:https://github.com/atrenton/MyJournal.Notebook/releases/tag/v16.2.1-beta +[16.3.0]:https://github.com/atrenton/MyJournal.Notebook/releases/tag/v16.3.0 diff --git a/README.md b/README.md index b78c8aa..511b83b 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,13 @@ ![screenshot](docs/README-screenshot.png) -[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/atrenton/MyJournal.Notebook?logo=github)](https://github.com/atrenton/MyJournal.Notebook/releases/latest)  [![Gitter chat](https://img.shields.io/gitter/room/atrenton/MyJournalNotebook?logo=gitter)](https://gitter.im/MyJournal-Notebook/community)  [![Keybase chat](https://img.shields.io/static/v1.svg?label=chat&message=on%20keybase&logo=keybase)](https://keybase.io/atrenton/chat)  [![GitHub issues](https://img.shields.io/github/issues/atrenton/MyJournal.Notebook?logo=github)](https://github.com/atrenton/MyJournal.Notebook/issues)  [![Tweets](https://img.shields.io/twitter/url?label=tweets&logo=twitter&style=plastic&url=https%3A%2F%2Ftwitter.com%2FArtTrenton)](https://twitter.com/ArtTrenton) +[![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/atrenton/MyJournal.Notebook?color=blue&include_prereleases&logo=github)](https://github.com/atrenton/MyJournal.Notebook/releases)  [![GitHub Discussions](https://img.shields.io/github/discussions/atrenton/MyJournal.Notebook?color=green&logo=github)](https://github.com/atrenton/MyJournal.Notebook/discussions)  [![GitHub issues](https://img.shields.io/github/issues/atrenton/MyJournal.Notebook?logo=github)](https://github.com/atrenton/MyJournal.Notebook/issues)  [![Keybase chat](https://img.shields.io/static/v1.svg?label=chat&message=on%20keybase&logo=keybase)](https://keybase.io/atrenton/chat)  [![Tweets](https://img.shields.io/twitter/url?label=tweets&logo=twitter&style=plastic&url=https%3A%2F%2Ftwitter.com%2FArtTrenton)](https://twitter.com/ArtTrenton) ## About -Record your daily interactions, ideas and inspirations with this add-in for Microsoft® OneNote® 2010 / 2013 / 2016 Windows desktop versions. +Record your daily interactions, ideas and inspirations with this add-in for Microsoft® OneNote® Windows desktop software. +
@@ -26,7 +27,7 @@ Record your daily interactions, ideas and inspirations with this add-in for Micr
Settings
    -
  • OneDrive storage account (beta)
  • +
  • OneDrive storage account (NEW)
  • Page color
  • Page title date format
  • Page rule lines
  • @@ -58,24 +59,27 @@ Record your daily interactions, ideas and inspirations with this add-in for Micr
Microsoft and OneNote are registered trademarks of Microsoft Corporation.
+
For additional information, check out the [**Wiki**](https://github.com/atrenton/MyJournal.Notebook/wiki). -## Requirements +## Prerequisites - Microsoft Windows 7 OS or later
- Microsoft .NET Framework 4.6.2 or later
-- Microsoft OneNote 2010 / 2013 / 2016 Windows desktop software (32-bit or 64-bit)
+- Microsoft [OneNote for Windows] desktop application software (32-bit or 64-bit)
- Microsoft Visual Studio 2017 version 15.9 or later (developers only)
## Installation -- To use this add-in, you must have a full Windows desktop version of OneNote 2010 / 2013 / 2016 that supports the creation of a local notebook. Both 32- and 64-bit versions of OneNote are supported as of [release 16.2.0]. +- To use this add-in, you must have a Windows desktop version of OneNote installed as part of Office or [Microsoft 365](https://www.microsoft.com/en-us/microsoft-365). You can also download OneNote as a free standalone Windows desktop app with limited features (OneDrive notebook storage only). See the **Where to get it** section of the following document: + - [What's the difference between the OneNote versions?](https://support.microsoft.com/en-us/office/what-s-the-difference-between-the-onenote-versions-a624e692-b78b-4c09-b07f-46181958118f) - Unsupported versions of OneNote: - - OneNote for Windows 10 + - [OneNote for Windows 10] + - [OneNote 2010](https://docs.microsoft.com/en-us/lifecycle/products/microsoft-onenote-2010 "Microsoft Lifecycle Extended End Date: 10/13/2020") — if you are still using it, install [release 16.2.0]. @@ -89,6 +93,9 @@ For additional information, check out the [**Wiki**](https://github.com/atrenton - [Select journal page color](docs/HowTo-Select-Page-Color.md) - [Select journal page title date format](docs/HowTo-Select-Page-Title.md) - [Select journal page rule lines format](docs/HowTo-Select-Rule-Lines.md) +- [Select OneDrive storage account](docs/HowTo-Select-OneDrive-Storage-Account.md) (NEW) -[latest release]:https://github.com/atrenton/MyJournal.Notebook/releases/latest +[latest release]:https://github.com/atrenton/MyJournal.Notebook/releases "latest by date including pre-releases" [release 16.2.0]:https://github.com/atrenton/MyJournal.Notebook/releases/tag/v16.2.0 +[OneNote for Windows]:https://support.microsoft.com/en-us/office/what-s-the-difference-between-the-onenote-versions-a624e692-b78b-4c09-b07f-46181958118f#windows "What's the difference between the OneNote versions?" +[OneNote for Windows 10]:https://support.microsoft.com/en-us/office/what-s-the-difference-between-the-onenote-versions-a624e692-b78b-4c09-b07f-46181958118f#windows "What's the difference between the OneNote versions?" diff --git a/docs/HowTo-Select-OneDrive-Storage-Account.md b/docs/HowTo-Select-OneDrive-Storage-Account.md new file mode 100644 index 0000000..e9df707 --- /dev/null +++ b/docs/HowTo-Select-OneDrive-Storage-Account.md @@ -0,0 +1,25 @@ +# *MyJournal.Notebook* + +--- + +## Usage + +### :star: How-to: Select OneDrive Storage Account + +![screenshot](usage/select-storage-account.png) + +- The default add-in configuration saves your ***My Journal*** notebook on `local` storage. + +- To save your notebook on your `OneDrive - Personal` cloud storage, you can select your Microsoft account in the **My Journal Notebook Options** dialog ```Save``` tab. + +- To configure OneDrive access in OneNote 2016 and 2013: + Go to **File** » **Account** » **Connected Services** » select **Add a Service** then **Storage** and choose OneDrive. See [How to add OneDrive as a service](https://support.microsoft.com/en-us/office/how-to-add-onedrive-as-a-service-3ae78a39-c0de-4c86-8abc-ad519b6de44e) if you need more help. + +- To move an existing local notebook to OneDrive, see [Move a OneNote notebook to OneDrive](https://support.microsoft.com/en-us/office/move-a-onenote-notebook-to-onedrive-0af0a141-0bdf-49ab-9e50-45dbcca44082 "OneNote 2016, OneNote 2013, Office for business"). + +**PLEASE NOTE:** Microsoft® OneNote® – not this add-in – handles all the syncing of your notes between your computer and OneDrive. Your internet speed is a factor. For more information, see [Best practices for syncing notes in OneNote](https://support.microsoft.com/en-us/office/best-practices-for-syncing-notes-in-onenote-9c6e8fcc-3307-419c-ba77-58cadfe651d7). + +

+ :arrow_left: README – Usage
+ :arrow_left: Wiki Configuration – Quick Start Videos +

diff --git a/docs/HowTo-Select-Rule-Lines.md b/docs/HowTo-Select-Rule-Lines.md index 48c46d9..4067c06 100644 --- a/docs/HowTo-Select-Rule-Lines.md +++ b/docs/HowTo-Select-Rule-Lines.md @@ -8,6 +8,8 @@ ![screenshot](usage/select-page-rule-lines-format.gif) +If rule lines are not working, check [Known Issues](./known-issues.md#rule-lines) for additional information. +

:arrow_left: README – Usage
:arrow_left: Wiki Configuration – Quick Start Videos diff --git a/docs/debugging/README.md b/docs/debugging/README.md index a453e80..42bcce7 100644 --- a/docs/debugging/README.md +++ b/docs/debugging/README.md @@ -1,6 +1,6 @@ -# About the DebugView-Filters.ini file +# About the DebugView-Filter.ini file -The **`DebugView-Filters.ini`** file is a [Sysinternals DebugView](https://docs.microsoft.com/en-us/sysinternals/downloads/debugview) filters file for debugging the **MyJournal.Notebook** add-in. +The **`DebugView-Filter.ini`** file is a [Windows Sysinternals DebugView](https://docs.microsoft.com/en-us/sysinternals/downloads/debugview) filters file for debugging the **MyJournal.Notebook** add-in. ## DebugView Menu Settings @@ -20,11 +20,11 @@ The **`DebugView-Filters.ini`** file is a [Sysinternals DebugView](https://docs. - Computer - Select Connect Local -## How to load the **`DebugView-Filters.ini`** file +## How to load the **`DebugView-Filter.ini`** file 1. From the DebugView menu, select Edit > Filter/Highlight... (Ctrl + L) 1. Click the Load button -1. Navigate to the repo `docs\debugging` subdirectory and select the `DebugView-Filters.ini` file +1. Navigate to the repo `docs\debugging` subdirectory and select the `DebugView-Filter.ini` file 1. Click the Open button 1. Click the OK button 1. Save the filters configuration by closing and reopening DebugView diff --git a/docs/known-issues.md b/docs/known-issues.md index ccbb480..fce00dc 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -1,10 +1,15 @@ # Known Issues -This document describes known issues with the My Journal Add-In for Microsoft OneNote. +Last Updated December 4, 2021 + +The following is the list of Known Issues for the **My Journal Add-In for Microsoft OneNote**: + +- [Paper Size](./known-issues.md#paper-size) +- [Rule Lines](./known-issues.md#rule-lines) ## Paper Size -### Background: +### Background This feature was added in release 16.1.0 to support a user's paper size preference when printing a journal page. It defaults to the OneNote Auto (automatic) paper size. @@ -17,7 +22,7 @@ Setting the paper size to any value other than Automatic will result in a fixed height page size. Content exceeding this height overflows the background page color. -### Workaround: +### Workaround - Leave the My Journal Notebook paper size option set to Automatic. - Use **File \> Print \> Print Preview** to see where your page breaks are. @@ -27,3 +32,32 @@ color. > And because OneNote is designed to capture your notes, not print out traditional > pages, you won't find a page break option in OneNote. Go to **File \> Print \>** > **Print Preview** to see how your pages will look when printed. + +
+ +## Rule Lines + +### Background + +The Add-In can be configured to create notebook pages with 4 different rule line +styles or none at all. + +### Issue: Rule lines do not display in OneNote 2016 or later + +Rule lines are not displayed in journal pages created by the Add-In with OneNote +2016 or later; works fine in earlier versions of OneNote. + +### Workaround + +- In OneNote, select **File \> Options \> Display** to change how OneNote looks. + +- Check the following **Display** option: + :white_check_mark: Create all new pages with rule lines + +- If you have set the **Rule Lines** style to `None` in the Add-In's **Page Settings**, +you can still set rule lines for the current page via the OneNote **View \> +Rule Lines** menu option. + +- Also take note that the browser-based **OneNote for the web** (formerly OneNote +Web App) cannot display rule lines and page color. See [Differences between using +a notebook in the browser and in OneNote](https://support.microsoft.com/en-us/office/differences-between-using-a-notebook-in-the-browser-and-in-onenote-a3d1fc13-ac74-456b-b391-b633a62aa83f). diff --git a/docs/troubleshooting/OneNote-Library.ps1 b/docs/troubleshooting/OneNote-Library.ps1 index 9709af0..4d3400c 100644 --- a/docs/troubleshooting/OneNote-Library.ps1 +++ b/docs/troubleshooting/OneNote-Library.ps1 @@ -127,8 +127,8 @@ Function Get-RegAsm-x86-ChildPath { Function Press-Any-Key { - if ($Host.Name -notmatch 'ISE') { - Write-Host 'Press any key to continue. . .' -NoNewline + if (($Host.Name -eq 'ConsoleHost') -and (-not $env:WT_SESSION)) { + Write-Host "`nPress any key to continue. . ." -NoNewline $Host.UI.RawUI.ReadKey('NoEcho, IncludeKeyDown') | Out-Null } } diff --git a/docs/usage/select-storage-account.png b/docs/usage/select-storage-account.png new file mode 100644 index 0000000..895aaff Binary files /dev/null and b/docs/usage/select-storage-account.png differ diff --git a/scripts/Common-Library.ps1 b/scripts/Common-Library.ps1 index f451405..df79010 100644 --- a/scripts/Common-Library.ps1 +++ b/scripts/Common-Library.ps1 @@ -185,8 +185,8 @@ Function Handle-NativeCommandError { Function Press-Any-Key { - if ($Host.Name -notmatch 'ISE') { - Write-Host 'Press any key to continue. . .' -NoNewline + if (($Host.Name -eq 'ConsoleHost') -and (-not $env:WT_SESSION)) { + Write-Host "`nPress any key to continue. . ." -NoNewline $Host.UI.RawUI.ReadKey('NoEcho, IncludeKeyDown') | Out-Null } } diff --git a/scripts/Get-OneNote-Desktop-Info.ps1 b/scripts/Get-OneNote-Desktop-Info.ps1 new file mode 100644 index 0000000..2715a9b --- /dev/null +++ b/scripts/Get-OneNote-Desktop-Info.ps1 @@ -0,0 +1,377 @@ +#Get-OneNote-Desktop-Info.ps1 + +#requires -version 5.1 + +# REF: https://github.com/PowerShell/PowerShell/issues/8076 +Function exist { + param($path) + return ( [string]::Empty -ne $path -and ( Test-Path $path )) +} + +Function Get-OneNote-AppPath +{ + $ErrorActionPreference = 'Stop' + $appPaths = 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths' + $program = 'OneNote.exe' + $key = $null + try + { + $key = Get-ItemProperty -Path "HKLM:\$appPaths\$program" + } + catch [System.Management.Automation.ItemNotFoundException] + { + Write-Warning "App Paths registry key is missing for $program" + Press-Any-Key + Exit + } + return $key.'(default)' +} + +Function Get-OneNote-Bitness +{ + param ($ExeFilePath = $(Get-OneNote-AppPath)) + + if (exist $ExeFilePath) { + # The following code was inspired by: + # https://github.com/guyrleech/Microsoft/blob/master/Get%20file%20bitness.ps1 + [int]$MACHINE_OFFSET = 4 + [int]$PE_POINTER_OFFSET = 60 + + [hashtable]$bitness = @{ + 0x014c = '32-bit' + 0x8664 = '64-bit' + } + $data = New-Object System.Byte[] 4096 + $stream = New-Object System.IO.FileStream -ArgumentList $ExeFilePath,Open,Read + $stream.Read($data, 0, $data.Count) | Out-Null + $stream.Close() + + [int]$PE_HEADER_ADDR = [System.BitConverter]::ToInt32($data, $PE_POINTER_OFFSET) + [int]$typeOffset = $PE_HEADER_ADDR + $MACHINE_OFFSET + [uint16]$machineType = [System.BitConverter]::ToUInt16($data, $typeOffset) + + return $bitness[[int]$machineType] + } else { + throw 'ONENOTE.EXE not found' + } +} + +Function Get-OneNote-ProductName +{ + param( + [ValidateScript({ + if( $_ -match 'Office\d\d' ) { + $true + } else { + throw "Invalid value: $_" + } + })][string] $OfficeVersion + ) + + [hashtable]$productName = @{ + 12 = '2007' + 14 = '2010' + 15 = '2013' + 16 = '2016' + } + + $len = $OfficeVersion.Length + [int]$i = $OfficeVersion.Substring($len - 2) + return $productName[$i] +} + +#REF: https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/reading-installed-software-from-registry +Function Get-Software +{ + param([string]$DisplayName='*') + + $keys = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', + 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + + Get-ItemProperty -Path $keys | + Where-Object { $_.DisplayName } | + Select-Object -Property DisplayName, DisplayVersion | + Where-Object { $_.DisplayName -match $DisplayName } +} + +Function Get-Office-Properties +{ + param([string]$PropertiesToMatch='*') + + $Esc = $([char]27) + $key = 'HKLM:\SOFTWARE\Microsoft\Office\' + $useANSI = $Host.Name -notmatch 'ISE' + +# REF: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#cursor-visibility + if ($useANSI) { + Write-Host "Searching . . . $Esc[?25l" -NoNewline + } + $registry = Get-ChildItem -Path $key -Recurse + + $activity = "Searching $key" + $count = 0 + $obj = New-Object PSObject + $progress = [Math]::Round($registry.Count * 0.1) + + foreach ($item in $registry) { + $item.Property | Where-Object { $_ -match $PropertiesToMatch } | + ForEach-Object { + $property = @{ + MemberType = 'NoteProperty' + Name = "$_" + Value = "$($item.GetValue($_))" + } + $obj | Add-Member @property -Force + } + $pct = ((($count++) / $registry.Count) * 100) + if ($count % $progress -eq 0) { + $status = "$([Math]::Round($pct))% Complete" + Write-Progress -Activity $activity -Status $status -PercentComplete $pct + } + } + + Write-Progress -Completed -Activity [string]::Empty + if ($useANSI) { + Write-Host "`r$Esc[?25h" -NoNewline + } + return $obj +} + +Function Press-Any-Key +{ + if (($Host.Name -eq 'ConsoleHost') -and (-not $env:WT_SESSION)) { + Write-Host "`nPress any key to continue. . ." -NoNewline + $Host.UI.RawUI.ReadKey('NoEcho, IncludeKeyDown') | Out-Null + } +} + +try +{ + Clear-Host + echo 'OneNote Desktop Software Information' + echo '------------------------------------' + + $appPath = Get-OneNote-AppPath + $bitness = Get-OneNote-Bitness $appPath + $productName = Get-OneNote-ProductName ($appPath -split '\\')[-2] + + echo "App Path : $appPath" + echo "Bitness : $bitness" + echo "`nOneNote $productName is installed." + + echo "`nOffice Software Information" + echo '---------------------------' + (Get-Software -DisplayName '^Microsoft (365|Office|OneNote)+\s' | + Format-List | Out-String).Trim() + + echo "`nOffice Deployment Properties" + echo '----------------------------' + (Get-Office-Properties -PropertiesToMatch '^(ProductReleaseIds|Platform)$' | + Format-List | Out-String).Trim() +} +catch +{ + Write-Host -ForegroundColor Red $_.Exception.Message +} +Press-Any-Key + +# SIG # Begin signature block +# MIIlGwYJKoZIhvcNAQcCoIIlDDCCJQgCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCg8MeRXW8Mjq4U +# fMu5KQazh7OjCezi0wkqYuULzpSMrKCCHt0wggVgMIIESKADAgECAhEA6JzdWUZA +# uzxpjz0C2ZP+JDANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJHQjEbMBkGA1UE +# CBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQK +# Ew9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3RpZ28gUlNBIENvZGUgU2ln +# bmluZyBDQTAeFw0yMDA4MjYwMDAwMDBaFw0yMzExMjUyMzU5NTlaMIGPMQswCQYD +# VQQGEwJVUzEOMAwGA1UEEQwFNDQwNjAxDTALBgNVBAgMBE9oaW8xDzANBgNVBAcM +# Bk1lbnRvcjEeMBwGA1UECQwVNzc5NiBIaWRkZW4gSG9sbG93IERyMRcwFQYDVQQK +# DA5BcnRodXIgVHJlbnRvbjEXMBUGA1UEAwwOQXJ0aHVyIFRyZW50b24wggEiMA0G +# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3oQNrBAhdwheKdemNPV7JDkfD27Mv +# e3MhGCuelZrYmG/CFVKC3ikRRwOQdYZT9pETEfCkn5gHCcpYE8bk09O5bNmaew/2 +# gdMtdKNSGihp3jLy/xOLpHqbsDirCFVapEdmNmq4HJEsnsWorVco+dVs1wFOROO5 +# f/pDc/KGJPupb/gl/Aj0ck0NVsZsf2E5WkUZ3RmxOgQmlIGksqqtyKzNkoBh7ntA +# v/Du9g9ZMqMdGpKd6+wFzEF3QKXbHxIXJ/qXQoK/ZBv20Dh2IDG0A49lMlvBOP4d +# x9pjLYVXu+zcRPWMVJ4KYeeO3jI34fH9Ili437ReTepat4y8lLQdfxllAgMBAAGj +# ggHHMIIBwzAfBgNVHSMEGDAWgBQO4TqoUzox1Yq+wbutZxoDha00DjAdBgNVHQ4E +# FgQUskFrIBdn9M2Ez2ZsWp2+YVbmVgIwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB +# /wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQMEoG +# A1UdIARDMEEwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# c2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEATBDBgNVHR8EPDA6MDigNqA0hjJodHRw +# Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNybDBz +# BggrBgEFBQcBAQRnMGUwPgYIKwYBBQUHMAKGMmh0dHA6Ly9jcnQuc2VjdGlnby5j +# b20vU2VjdGlnb1JTQUNvZGVTaWduaW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRw +# Oi8vb2NzcC5zZWN0aWdvLmNvbTA1BgNVHREELjAsgSo0ODA2NDE4MSthdHJlbnRv +# bkB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20wDQYJKoZIhvcNAQELBQADggEBAAHy +# cT7H0dyT69FCbmyEMD+WisJwFriQ23QmrHukwyIEgN1figdnGbkL9dTTVoRI0ORE +# mbFIP5yw2SwufZmMxdRvQ6s2rIW1GMppUYUttMhgIgHaT8CHerglYdomuKOLhrDH +# aKdeWDGaFQjVfYNT+Q9t3esvQ/76VJDcB9SoMiOgrrnvpRUzeX2ZavCt4Ve5Ei2s +# 7cO/3lzdJlAHUem04xrTidoI1t5/M21tpY6Y/JmLaQm3QAyFqHIDQNCm+ZcT33xp +# Xr+j2dUT20l4JqmIYD4rh2+YWzc1JKrQiO3mzUGxYRGNTJvnz5GuZ+0baIzeG7Kq +# cwFf97QETZeC0CBkFjgwggWBMIIEaaADAgECAhA5ckQ6+SK3UdfTbBDdMTWVMA0G +# CSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +# bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBM +# aW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXMwHhcNMTkw +# MzEyMDAwMDAwWhcNMjgxMjMxMjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +# BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +# aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +# 3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +# tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +# Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +# VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +# 79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +# c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +# Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +# c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +# UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +# Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo4HyMIHv +# MB8GA1UdIwQYMBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBRTeb9a +# qitKz1SA4dibwJ3ysgNmyzAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +# /zARBgNVHSAECjAIMAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2Ny +# bC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYB +# BQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20w +# DQYJKoZIhvcNAQEMBQADggEBABiHUdx0IT2ciuAntzPQLszs8ObLXhHeIm+bdY6e +# cv7k1v6qH5yWLe8DSn6u9I1vcjxDO8A/67jfXKqpxq7y/Njuo3tD9oY2fBTgzfT3 +# P/7euLSK8JGW/v1DZH79zNIBoX19+BkZyUIrE79Yi7qkomYEdoiRTgyJFM6iTcky +# s7roFBq8cfFb8EELmAAKIgMQ5Qyx+c2SNxntO/HkOrb5RRMmda+7qu8/e3c70sQC +# kT0ZANMXXDnbP3sYDUXNk4WWL13fWRZPP1G91UUYP+1KjugGYXQjFrUNUHMnREd/ +# EF2JKmuFMRTE6KlqTIC8anjPuH+OdnKZDJ3+15EIFqGjX5UwggX1MIID3aADAgEC +# AhAdokgwb5smGNCC4JZ9M9NqMA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJV +# UzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAc +# BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0 +# IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xODExMDIwMDAwMDBaFw0z +# MDEyMzEyMzU5NTlaMHwxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h +# bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGlt +# aXRlZDEkMCIGA1UEAxMbU2VjdGlnbyBSU0EgQ29kZSBTaWduaW5nIENBMIIBIjAN +# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhiKNMoV6GJ9J8JYvYwgeLdx8nxTP +# 4ya2JWYpQIZURnQxYsUQ7bKHJ6aZy5UwwFb1pHXGqQ5QYqVRkRBq4Etirv3w+Bis +# p//uLjMg+gwZiahse60Aw2Gh3GllbR9uJ5bXl1GGpvQn5Xxqi5UeW2DVftcWkpwA +# L2j3l+1qcr44O2Pej79uTEFdEiAIWeg5zY/S1s8GtFcFtk6hPldrH5i8xGLWGwuN +# x2YbSp+dgcRyQLXiX+8LRf+jzhemLVWwt7C8VGqdvI1WU8bwunlQSSz3A7n+L2U1 +# 8iLqLAevRtn5RhzcjHxxKPP+p8YU3VWRbooRDd8GJJV9D6ehfDrahjVh0wIDAQAB +# o4IBZDCCAWAwHwYDVR0jBBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0O +# BBYEFA7hOqhTOjHVir7Bu61nGgOFrTQOMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMB +# Af8ECDAGAQH/AgEAMB0GA1UdJQQWMBQGCCsGAQUFBwMDBggrBgEFBQcDCDARBgNV +# HSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2Vy +# dHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3Js +# MHYGCCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1 +# c3QuY29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlo +# dHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQBNY1Dt +# RzRKYaTb3moqjJvxAAAeHWJ7Otcywvaz4GOz+2EAiJobbRAHBE++uOqJeCLrD0bs +# 80ZeQEaJEvQLd1qcKkE6/Nb06+f3FZUzw6GDKLfeL+SU94Uzgy1KQEi/msJPSrGP +# JPSzgTfTt2SwpiNqWWhSQl//BOvhdGV5CPWpk95rcUCZlrp48bnI4sMIFrGrY1rI +# FYBtdF5KdX6luMNstc/fSnmHXMdATWM19jDTz7UKDgsEf6BLrrujpdCEAJM+U100 +# pQA1aWy+nyAlEA0Z+1CQYb45j3qOTfafDh7+B1ESZoMmGUiVzkrJwX/zOgWb+W/f +# iH/AI57SHkN6RTHBnE2p8FmyWRnoao0pBAJ3fEtLzXC+OrJVWng+vLtvAxAldxU0 +# ivk2zEOS5LpP8WKTKCVXKftRGcehJUBqhFfGsp2xvBwK2nxnfn0u6ShMGH7EezFB +# cZpLKewLPVdQ0srd/Z4FUeVEeN0B3rF1mA1UJP3wTuPi+IO9crrLPTru8F4Xkmht +# yGH5pvEqCgulufSe7pgyBYWe6/mDKdPGLH29OncuizdCoGqC7TtKqpQQpOEN+BfF +# tlp5MxiS47V1+KHpjgolHuQe8Z9ahyP/n6RRnvs5gBHN27XEp6iAb+VT1ODjosLS +# Wxr6MiYtaldwHDykWC6j81tLB9wyWfOHpxptWDCCBuwwggTUoAMCAQICEDAPb6zd +# Zph0fKlGNqd4LbkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMV +# VGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENl +# cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE5MDUwMjAwMDAwMFoXDTM4MDExODIz +# NTk1OVowfTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3Rl +# cjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSUw +# IwYDVQQDExxTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIENBMIICIjANBgkqhkiG +# 9w0BAQEFAAOCAg8AMIICCgKCAgEAyBsBr9ksfoiZfQGYPyCQvZyAIVSTuc+gPlPv +# s1rAdtYaBKXOR4O168TMSTTL80VlufmnZBYmCfvVMlJ5LsljwhObtoY/AQWSZm8h +# q9VxEHmH9EYqzcRaydvXXUlNclYP3MnjU5g6Kh78zlhJ07/zObu5pCNCrNAVw3+e +# olzXOPEWsnDTo8Tfs8VyrC4Kd/wNlFK3/B+VcyQ9ASi8Dw1Ps5EBjm6dJ3VV0Rc7 +# NCF7lwGUr3+Az9ERCleEyX9W4L1GnIK+lJ2/tCCwYH64TfUNP9vQ6oWMilZx0S2U +# TMiMPNMUopy9Jv/TUyDHYGmbWApU9AXn/TGs+ciFF8e4KRmkKS9G493bkV+fPzY+ +# DjBnK0a3Na+WvtpMYMyou58NFNQYxDCYdIIhz2JWtSFzEh79qsoIWId3pBXrGVX/ +# 0DlULSbuRRo6b83XhPDX8CjFT2SDAtT74t7xvAIo9G3aJ4oG0paH3uhrDvBbfel2 +# aZMgHEqXLHcZK5OVmJyXnuuOwXhWxkQl3wYSmgYtnwNe/YOiU2fKsfqNoWTJiJJZ +# y6hGwMnypv99V9sSdvqKQSTUG/xypRSi1K1DHKRJi0E5FAMeKfobpSKupcNNgtCN +# 2mu32/cYQFdz8HGj+0p9RTbB942C+rnJDVOAffq2OVgy728YUInXT50zvRq1naHe +# lUF6p4MCAwEAAaOCAVowggFWMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKy +# A2bLMB0GA1UdDgQWBBQaofhhGSAPw0F3RSiO0TVfBhIEVTAOBgNVHQ8BAf8EBAMC +# AYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNVHSUEDDAKBggrBgEFBQcDCDARBgNV +# HSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2Vy +# dHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3Js +# MHYGCCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1 +# c3QuY29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlo +# dHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQBtVIGl +# M10W4bVTgZF13wN6MgstJYQRsrDbKn0qBfW8Oyf0WqC5SVmQKWxhy7VQ2+J9+Z8A +# 70DDrdPi5Fb5WEHP8ULlEH3/sHQfj8ZcCfkzXuqgHCZYXPO0EQ/V1cPivNVYeL9I +# duFEZ22PsEMQD43k+ThivxMBxYWjTMXMslMwlaTW9JZWCLjNXH8Blr5yUmo7Qjd8 +# Fng5k5OUm7Hcsm1BbWfNyW+QPX9FcsEbI9bCVYRm5LPFZgb289ZLXq2jK0KKIZL+ +# qG9aJXBigXNjXqC72NzXStM9r4MGOBIdJIct5PwC1j53BLwENrXnd8ucLo0jGLmj +# wkcd8F3WoXNXBWiap8k3ZR2+6rzYQoNDBaWLpgn/0aGUpk6qPQn1BWy30mRa2Coi +# wkud8TleTN5IPZs0lpoJX47997FSkc4/ifYcobWpdR9xv1tDXWU9UIFuq/DQ0/yy +# sx+2mZYm9Dx5i1xkzM3uJ5rloMAMcofBbk1a0x7q8ETmMm8c6xdOlMN4ZSA7D0Gq +# H+mhQZ3+sbigZSo04N6o+TzmwTC7wKBjLPxcFgCo0MR/6hGdHgbGpm0yXbQ4CStJ +# B6r97DDa8acvz7f9+tCjhNknnvsBZne5VhDhIG7GrrH5trrINV0zdo7xfCAMKneu +# taIChrop7rRaALGMq+P5CslUXdS5anSevUiumDCCBwcwggTvoAMCAQICEQCMd6AA +# j/TRsMY9nzpIg41rMA0GCSqGSIb3DQEBDAUAMH0xCzAJBgNVBAYTAkdCMRswGQYD +# VQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNV +# BAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBT +# dGFtcGluZyBDQTAeFw0yMDEwMjMwMDAwMDBaFw0zMjAxMjIyMzU5NTlaMIGEMQsw +# CQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQH +# EwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxLDAqBgNVBAMMI1Nl +# Y3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgU2lnbmVyICMyMIICIjANBgkqhkiG9w0B +# AQEFAAOCAg8AMIICCgKCAgEAkYdLLIvB8R6gntMHxgHKUrC+eXldCWYGLS81fbvA +# +yfaQmpZGyVM6u9A1pp+MshqgX20XD5WEIE1OiI2jPv4ICmHrHTQG2K8P2SHAl/v +# xYDvBhzcXk6Th7ia3kwHToXMcMUNe+zD2eOX6csZ21ZFbO5LIGzJPmz98JvxKPiR +# mar8WsGagiA6t+/n1rglScI5G4eBOcvDtzrNn1AEHxqZpIACTR0FqFXTbVKAg+Zu +# SKVfwYlYYIrv8azNh2MYjnTLhIdBaWOBvPYfqnzXwUHOrat2iyCA1C2VB43H9QsX +# Hprl1plpUcdOpp0pb+d5kw0yY1OuzMYpiiDBYMbyAizE+cgi3/kngqGDUcK8yYIa +# IYSyl7zUr0QcloIilSqFVK7x/T5JdHT8jq4/pXL0w1oBqlCli3aVG2br79rflC7Z +# GutMJ31MBff4I13EV8gmBXr8gSNfVAk4KmLVqsrf7c9Tqx/2RJzVmVnFVmRb945S +# D2b8mD9EBhNkbunhFWBQpbHsz7joyQu+xYT33Qqd2rwpbD1W7b94Z7ZbyF4UHLmv +# hC13ovc5lTdvTn8cxjwE1jHFfu896FF+ca0kdBss3Pl8qu/CdkloYtWL9QPfvn2O +# DzZ1RluTdsSD7oK+LK43EvG8VsPkrUPDt2aWXpQy+qD2q4lQ+s6g8wiBGtFEp8z3 +# uDECAwEAAaOCAXgwggF0MB8GA1UdIwQYMBaAFBqh+GEZIA/DQXdFKI7RNV8GEgRV +# MB0GA1UdDgQWBBRpdTd7u501Qk6/V9Oa258B0a7e0DAOBgNVHQ8BAf8EBAMCBsAw +# DAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBABgNVHSAEOTA3 +# MDUGDCsGAQQBsjEBAgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28u +# Y29tL0NQUzBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3JsLnNlY3RpZ28uY29t +# L1NlY3RpZ29SU0FUaW1lU3RhbXBpbmdDQS5jcmwwdAYIKwYBBQUHAQEEaDBmMD8G +# CCsGAQUFBzAChjNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29SU0FUaW1l +# U3RhbXBpbmdDQS5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28u +# Y29tMA0GCSqGSIb3DQEBDAUAA4ICAQBKA3iQQjPsexqDCTYzmFW7nUAGMGtFavGU +# DhlQ/1slXjvhOcRbuumVkDc3vd/7ZOzlgreVzFdVcEtO9KiH3SKFple7uCEn1KAq +# MZSKByGeir2nGvUCFctEUJmM7D66A3emggKQwi6Tqb4hNHVjueAtD88BN8uNovq4 +# WpquoXqeE5MZVY8JkC7f6ogXFutp1uElvUUIl4DXVCAoT8p7s7Ol0gCwYDRlxOPF +# w6XkuoWqemnbdaQ+eWiaNotDrjbUYXI8DoViDaBecNtkLwHHwaHHJJSjsjxusl6i +# 0Pqo0bglHBbmwNV/aBrEZSk1Ki2IvOqudNaC58CIuOFPePBcysBAXMKf1TIcLNo8 +# rDb3BlKao0AwF7ApFpnJqreISffoCyUztT9tr59fClbfErHD7s6Rd+ggE+lcJMfq +# RAtK5hOEHE3rDbW4hqAwp4uhn7QszMAWI8mR5UIDS4DO5E3mKgE+wF6FoCShF0DV +# 29vnmBCk8eoZG4BU+keJ6JiBqXXADt/QaJR5oaCejra3QmbL2dlrL03Y3j4yHiDk +# 7JxNQo2dxzOZgjdE1CYpJkCOeC+57vov8fGP/lC4eN0Ult4cDnCwKoVqsWxo6Srk +# ECtuIf3TfJ035CoG1sPx12jjTwd5gQgT/rJkXumxPObQeCOyCSziJmK/O6mXUczH +# RDKBsq/P3zGCBZQwggWQAgEBMIGRMHwxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJH +# cmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1Nl +# Y3RpZ28gTGltaXRlZDEkMCIGA1UEAxMbU2VjdGlnbyBSU0EgQ29kZSBTaWduaW5n +# IENBAhEA6JzdWUZAuzxpjz0C2ZP+JDANBglghkgBZQMEAgEFAKCBhDAYBgorBgEE +# AYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwG +# CisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCY6Vqv +# qv5JPwwTJAh+7ax91WeyAulPafWE2z3NmKqbDDANBgkqhkiG9w0BAQEFAASCAQBT +# W97E4+IEEVtV79vKm2VaPVJnfnWXZueU1lt00ajrrpG83DaRlqCKi6SAcPLLtRjw +# yZk6/9O9DJbXCM7L8dShY5FETKumdpTVQJH3/CxE856zN12L8OClbvqhbtAeKTPh +# vzIucy7J4/OSrhoAr1O+QVFZaRsJ9ASZL2yvWNpdGdhzZsVpld5cRMnw850QdtVI +# rhiSSJ+gxVsPcswDpJwwPtybJlPb1dSJJd7U37DW5biig1QSpOkKBpkgX40i4dyh +# 9xP4ZQKD4fMFMsLYyASLOQdEE21Dx6DOHZliVokM9PGYKIE/XNgQeccrvSYVNx75 +# XF6JXb03kKcQBTYugVDooYIDTDCCA0gGCSqGSIb3DQEJBjGCAzkwggM1AgEBMIGS +# MH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO +# BgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UE +# AxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQQIRAIx3oACP9NGwxj2fOkiD +# jWswDQYJYIZIAWUDBAICBQCgeTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG +# CSqGSIb3DQEJBTEPFw0yMTEwMjkxNzMwMzVaMD8GCSqGSIb3DQEJBDEyBDCC2RIX +# hxcsc+gZmczTR1rC2Gm8a1Qy7PF5QtwJ7TT/K8ydVbBGFpuNY0FjI2HbKLowDQYJ +# KoZIhvcNAQEBBQAEggIAUH6SR9Y3+9ISPOThhDjpza2ODfWqhAWioVNx1KjFZo3y +# 2kjzxh7frhHwr2Q924u84SczY8F67cjJ3K1A0Bsch0dJ/Jc9fx8sgz01OnWIH1Vi +# OoR4CMWigXLnBTjz8cOE8byVta0DadeyATO2cLbOUOCwfJpWjUkIl6PgI6cI5doq +# nlWeWEt376+bwa4lij3jOLinO6zRI48QTo2nLLyuoJW+m2hFfQVL3YwacA6NXzbB +# vdIP2dy+53ENrT5E8IF7dIKypcirI4YQUmLFohktQ0nKflGWC4S3/Dtorx3TKQIK +# xy29WvQYQzRBuvWBpbHAy54d7NLQrFtxhJzyxmD5xpcEmSURncmQbpUHzH460wJL +# /lO5WPfXWGhgXETW9rPWT5BeVOYqTyfYzNJBzA+Js0DvfF1lRhpptxAhYb0mnDlF +# qC48fNKIGj6y7PGA2WqFCmeqBN0YrclQUhHgF5VnKmeA9c15Kpd/UK4rw8nf24zW +# apt12jPs8QCLM2bMu8dnYxW2cozkhVMpwEzJYgSgOShAmiYUsd/08HgcgsaxNAcf +# cHBo9BjDf8KJPpVpV03Znnizr9GHVkl0Iho7C4OCYlPJlpxJQziAJazLDaZ4TytM +# mBjFK+pIroaLIunjHqgYp9bAC5Rr9CmPRmTGlrziOIWUiVdVUqSeQ92VvjP2usY= +# SIG # End signature block diff --git a/src/NuGet.config b/src/NuGet.config new file mode 100644 index 0000000..2bfba13 --- /dev/null +++ b/src/NuGet.config @@ -0,0 +1,7 @@ + + + + + + diff --git a/src/add-in/API/ApplicationExtensions.cs b/src/add-in/API/ApplicationExtensions.cs index 1a53167..6458a1c 100644 --- a/src/add-in/API/ApplicationExtensions.cs +++ b/src/add-in/API/ApplicationExtensions.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text.RegularExpressions; -using System.Threading; using System.Xml.Linq; using Microsoft.Win32; using MyJournal.Notebook.Diagnostics; @@ -15,7 +14,7 @@ namespace MyJournal.Notebook.API { ///

- /// Extends the OneNote 2010 Application Interface. + /// Extends the OneNote Application Interface. /// static class ApplicationExtensions { @@ -35,7 +34,7 @@ const OneNote.HierarchyScope OneNote.SpecialLocation.slDefaultNotebookFolder; const OneNote.XMLSchema ONE_XML_SCHEMA = - OneNote.XMLSchema.xs2010; + OneNote.XMLSchema.xs2013; private static Dictionary s_errorCodeTable; diff --git a/src/add-in/Add-In.csproj b/src/add-in/Add-In.csproj index 9a051dd..95c5950 100644 --- a/src/add-in/Add-In.csproj +++ b/src/add-in/Add-In.csproj @@ -6,6 +6,7 @@ MyJournal.Notebook MyJournal.Notebook net462 + flow-analysis;strict x86;x64 true App.snk @@ -14,10 +15,11 @@ Copyright © 2012-2021 Art Trenton MyJournal.Notebook en-US - 16.2.* - 16.2.1.0 - 16.2.1 - beta + 16.3.* + 16.3.0.0 + 16.3.0 + + App.ico false true @@ -27,12 +29,12 @@ true - + $(DefineConstants);WIN32 My Journal Add-In for Microsoft OneNote (32-bit) - + $(DefineConstants);WIN64 My Journal Add-In for Microsoft OneNote (64-bit) @@ -79,7 +81,7 @@ all runtime; build; native; contentfiles; analyzers - + all runtime; build; native; contentfiles; analyzers diff --git a/src/add-in/Templates/Outline.cs b/src/add-in/Templates/Outline.cs index 637e619..0dac0d9 100644 --- a/src/add-in/Templates/Outline.cs +++ b/src/add-in/Templates/Outline.cs @@ -81,13 +81,13 @@ internal static void SetPosition(XElement outline) { case PageSize.Automatic: xPosition = "36.0"; - yPosition = "68.4000015258789"; + yPosition = "68.11085510253906"; break; case PageSize.Letter: case PageSize.Legal: case PageSize.A4: xPosition = "72.0"; - yPosition = "90.0"; + yPosition = "89.71085357666015"; break; default: throw new NotSupportedException( diff --git a/src/add-in/UI/OptionsForm.Designer.cs b/src/add-in/UI/OptionsForm.Designer.cs index e2f932f..ff75b17 100644 --- a/src/add-in/UI/OptionsForm.Designer.cs +++ b/src/add-in/UI/OptionsForm.Designer.cs @@ -29,143 +29,142 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.cboStorageAccount = new System.Windows.Forms.ComboBox(); this.tabPage1 = new System.Windows.Forms.TabPage(); this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.cboPageTemplates = new System.Windows.Forms.ComboBox(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.cboPageSize = new System.Windows.Forms.ComboBox(); + this.StorageAccount = new System.Windows.Forms.ComboBox(); this.tabPage2 = new System.Windows.Forms.TabPage(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.PageTemplates = new System.Windows.Forms.ComboBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.PageSize = new System.Windows.Forms.ComboBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); this.textBox1 = new System.Windows.Forms.TextBox(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.tabControl1.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.groupBox3.SuspendLayout(); this.tabPage1.SuspendLayout(); this.groupBox1.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.groupBox2.SuspendLayout(); this.tabPage2.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.tabPage4.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // // tabControl1 // - this.tabControl1.Controls.Add(this.tabPage4); this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage3); this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Location = new System.Drawing.Point(8, 8); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(284, 111); + this.tabControl1.Size = new System.Drawing.Size(290, 108); this.tabControl1.TabIndex = 0; // - // tabPage4 - // - this.tabPage4.Controls.Add(this.groupBox3); - this.tabPage4.Location = new System.Drawing.Point(4, 22); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Padding = new System.Windows.Forms.Padding(3); - this.tabPage4.Size = new System.Drawing.Size(276, 85); - this.tabPage4.TabIndex = 1; - this.tabPage4.Text = "Save"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // groupBox3 - // - this.groupBox3.Controls.Add(this.cboStorageAccount); - this.groupBox3.Location = new System.Drawing.Point(8, 10); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(260, 68); - this.groupBox3.TabIndex = 0; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "Select storage account"; - // - // cboStorageAccount - // - this.cboStorageAccount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboStorageAccount.FormattingEnabled = true; - this.cboStorageAccount.Location = new System.Drawing.Point(22, 30); - this.cboStorageAccount.Name = "cboStorageAccount"; - this.cboStorageAccount.Size = new System.Drawing.Size(216, 21); - this.cboStorageAccount.TabIndex = 0; - // // tabPage1 // this.tabPage1.Controls.Add(this.groupBox1); this.tabPage1.Location = new System.Drawing.Point(4, 22); this.tabPage1.Name = "tabPage1"; this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(276, 85); + this.tabPage1.Size = new System.Drawing.Size(282, 82); this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Template"; + this.tabPage1.Text = "Save"; this.tabPage1.UseVisualStyleBackColor = true; // // groupBox1 // - this.groupBox1.Controls.Add(this.cboPageTemplates); + this.groupBox1.Controls.Add(this.StorageAccount); this.groupBox1.Location = new System.Drawing.Point(8, 10); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(260, 68); + this.groupBox1.Size = new System.Drawing.Size(265, 65); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; - this.groupBox1.Text = "Select page template"; + this.groupBox1.Text = "Select storage account"; + // + // StorageAccount + // + this.StorageAccount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.StorageAccount.FormattingEnabled = true; + this.StorageAccount.Location = new System.Drawing.Point(18, 28); + this.StorageAccount.Name = "StorageAccount"; + this.StorageAccount.Size = new System.Drawing.Size(230, 21); + this.StorageAccount.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.groupBox2); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(282, 82); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Template"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // groupBox2 // - // cboPageTemplates + this.groupBox2.Controls.Add(this.PageTemplates); + this.groupBox2.Location = new System.Drawing.Point(8, 10); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(265, 65); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Select page template"; // - this.cboPageTemplates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboPageTemplates.FormattingEnabled = true; - this.cboPageTemplates.Location = new System.Drawing.Point(22, 30); - this.cboPageTemplates.Name = "cboPageTemplates"; - this.cboPageTemplates.Size = new System.Drawing.Size(216, 21); - this.cboPageTemplates.TabIndex = 0; + // PageTemplates + // + this.PageTemplates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.PageTemplates.FormattingEnabled = true; + this.PageTemplates.Location = new System.Drawing.Point(18, 28); + this.PageTemplates.Name = "PageTemplates"; + this.PageTemplates.Size = new System.Drawing.Size(230, 21); + this.PageTemplates.TabIndex = 0; // // tabPage3 // - this.tabPage3.Controls.Add(this.groupBox2); + this.tabPage3.Controls.Add(this.groupBox3); this.tabPage3.Location = new System.Drawing.Point(4, 22); this.tabPage3.Name = "tabPage3"; this.tabPage3.Padding = new System.Windows.Forms.Padding(3); - this.tabPage3.Size = new System.Drawing.Size(276, 85); - this.tabPage3.TabIndex = 0; + this.tabPage3.Size = new System.Drawing.Size(282, 82); + this.tabPage3.TabIndex = 2; this.tabPage3.Text = "Size"; this.tabPage3.UseVisualStyleBackColor = true; // - // groupBox2 + // groupBox3 // - this.groupBox2.Controls.Add(this.cboPageSize); - this.groupBox2.Location = new System.Drawing.Point(8, 10); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(260, 68); - this.groupBox2.TabIndex = 0; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Select paper size"; + this.groupBox3.Controls.Add(this.PageSize); + this.groupBox3.Location = new System.Drawing.Point(8, 10); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(265, 65); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Select paper size"; // - // cboPageSize + // PageSize // - this.cboPageSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboPageSize.FormattingEnabled = true; - this.cboPageSize.Location = new System.Drawing.Point(22, 30); - this.cboPageSize.Name = "cboPageSize"; - this.cboPageSize.Size = new System.Drawing.Size(216, 21); - this.cboPageSize.TabIndex = 0; + this.PageSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.PageSize.FormattingEnabled = true; + this.PageSize.Location = new System.Drawing.Point(18, 28); + this.PageSize.Name = "PageSize"; + this.PageSize.Size = new System.Drawing.Size(230, 21); + this.PageSize.TabIndex = 0; // - // tabPage2 + // tabPage4 // - this.tabPage2.Controls.Add(this.textBox1); - this.tabPage2.Controls.Add(this.pictureBox1); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(276, 85); - this.tabPage2.TabIndex = 0; - this.tabPage2.Text = "About"; - this.tabPage2.UseVisualStyleBackColor = true; + this.tabPage4.Controls.Add(this.textBox1); + this.tabPage4.Controls.Add(this.pictureBox1); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Padding = new System.Windows.Forms.Padding(3); + this.tabPage4.Size = new System.Drawing.Size(282, 82); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "About"; + this.tabPage4.UseVisualStyleBackColor = true; // // textBox1 // @@ -178,6 +177,7 @@ private void InitializeComponent() this.textBox1.ReadOnly = true; this.textBox1.Size = new System.Drawing.Size(207, 48); this.textBox1.TabIndex = 1; + this.textBox1.TabStop = false; // // pictureBox1 // @@ -191,7 +191,7 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 111); + this.ClientSize = new System.Drawing.Size(304, 121); this.Controls.Add(this.tabControl1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.KeyPreview = true; @@ -204,14 +204,14 @@ private void InitializeComponent() this.Load += new System.EventHandler(this.Form_Load); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form_KeyDown); this.tabControl1.ResumeLayout(false); - this.tabPage4.ResumeLayout(false); - this.groupBox3.ResumeLayout(false); this.tabPage1.ResumeLayout(false); this.groupBox1.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); @@ -221,16 +221,16 @@ private void InitializeComponent() private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.ComboBox cboPageTemplates; - private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.ComboBox StorageAccount; private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.ComboBox cboPageSize; - private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.ComboBox PageTemplates; + private System.Windows.Forms.TabPage tabPage3; private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.ComboBox cboStorageAccount; + private System.Windows.Forms.ComboBox PageSize; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TabPage tabPage2; } -} +} \ No newline at end of file diff --git a/src/add-in/UI/OptionsForm.cs b/src/add-in/UI/OptionsForm.cs index 845c1c3..56e88cb 100644 --- a/src/add-in/UI/OptionsForm.cs +++ b/src/add-in/UI/OptionsForm.cs @@ -2,7 +2,6 @@ using System.Drawing; using System.Windows.Forms; using MyJournal.Notebook.Diagnostics; -using MyJournal.Notebook.Templates; namespace MyJournal.Notebook.UI { @@ -71,27 +70,27 @@ private void Form_Load(object sender, EventArgs e) _settingsChangedCount++; } - cboPageTemplates.Items.AddRange(TemplateFactory.Items); - cboPageTemplates.SelectedIndex = cboPageTemplates.Items.IndexOf( + PageTemplates.Items.AddRange(Templates.TemplateFactory.Items); + PageTemplates.SelectedIndex = PageTemplates.Items.IndexOf( Properties.Settings.Default.PageTemplate); - cboPageTemplates.SelectedIndexChanged += + PageTemplates.SelectedIndexChanged += PageTemplates_SelectedIndexChanged; - cboPageSize.Items.AddRange(PageSize.Items); - cboPageSize.SelectedIndex = cboPageSize.Items.IndexOf( + PageSize.Items.AddRange(Templates.PageSize.Items); + PageSize.SelectedIndex = PageSize.Items.IndexOf( Properties.Settings.Default.PaperSize); - cboPageSize.SelectedIndexChanged += PageSize_SelectedIndexChanged; + PageSize.SelectedIndexChanged += PageSize_SelectedIndexChanged; - cboStorageAccount.Items.AddRange(new Config.StorageAccount().Items); - cboStorageAccount.SelectedIndex = cboStorageAccount.Items.IndexOf( + StorageAccount.Items.AddRange(new Config.StorageAccount().Items); + StorageAccount.SelectedIndex = StorageAccount.Items.IndexOf( Properties.Settings.Default.StorageAccount); - cboStorageAccount.SelectedIndexChanged += StorageAccount_SelectedIndexChanged; + StorageAccount.SelectedIndexChanged += StorageAccount_SelectedIndexChanged; } private void PageSize_SelectedIndexChanged(object sender, EventArgs e) { Properties.Settings.Default.PaperSize = - cboPageSize.SelectedItem as string; + PageSize.SelectedItem as string; _settingsChangedCount++; Tracer.WriteTraceMethodLine("Paper Size = {0}", @@ -101,7 +100,7 @@ private void PageSize_SelectedIndexChanged(object sender, EventArgs e) private void PageTemplates_SelectedIndexChanged(object sender, EventArgs e) { Properties.Settings.Default.PageTemplate = - cboPageTemplates.SelectedItem as string; + PageTemplates.SelectedItem as string; _settingsChangedCount++; Tracer.WriteTraceMethodLine("PageTemplate = {0}", @@ -111,13 +110,13 @@ private void PageTemplates_SelectedIndexChanged(object sender, EventArgs e) private void StorageAccount_SelectedIndexChanged(object sender, EventArgs e) { Properties.Settings.Default.StorageAccount = - cboStorageAccount.SelectedItem as string; + StorageAccount.SelectedItem as string; _settingsChangedCount++; Tracer.WriteTraceMethodLine("StorageAccount = {0}", Properties.Settings.Default.StorageAccount); } - int _settingsChangedCount = 0; + private int _settingsChangedCount = 0; } }