diff --git a/SpravatoETL/Project.params b/SpravatoETL/Project.params
index 8caaee5..e96cf0b 100644
--- a/SpravatoETL/Project.params
+++ b/SpravatoETL/Project.params
@@ -63,4 +63,25 @@
SSIS:Name="DataType">18
+
+
+ {ba1993f5-586e-4726-8c8d-613c918be1c0}
+
+
+ 0
+ 0
+ 0
+ 2025
+ 9
+
+
\ No newline at end of file
diff --git a/SpravatoETL/SpravatoAuditImport.dtsx b/SpravatoETL/SpravatoAuditImport.dtsx
index 5060297..1dac16c 100644
--- a/SpravatoETL/SpravatoAuditImport.dtsx
+++ b/SpravatoETL/SpravatoAuditImport.dtsx
@@ -12,8 +12,8 @@
DTS:LocaleID="1033"
DTS:ObjectName="SpravatoAuditImport"
DTS:PackageType="5"
- DTS:VersionBuild="66"
- DTS:VersionGUID="{210EF0DC-4CA9-47F1-9622-033CF9A901AB}">
+ DTS:VersionBuild="87"
+ DTS:VersionGUID="{49DDC2F4-D6BC-46C0-909D-A5B0280868CB}">
8
@@ -40,7 +40,7 @@
AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAAIAAAARABUAFMAAAAQZgAAAAEAACAAAAAaXht5dLqn+z7ozOwacyZ7BmIb1G5RWYYItmattlyL7AAAAAAOgAAAAAIAACAAAAAJv8hz2eXum5xNI/bZPXyKVmwgBJWNvZlxs9ciQNte1kAAAADudeg19cOlvLiqLYGHuTbIp2wBAvARhpy8ILfWPSbnIBGkAqQzDCkFBtWqt8B8Us/fgoOhwEfGr4bSMZ5lBRFxQAAAAGnOcRTb0CB+E4eZMc16NRUIiSJN8Mk+oYkNUY5KxAb7Xi2oiBjurZSCC3ogsjKVakSYxReBGP8em9HaaCE1l3E
+ Encrypted="1">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAAIAAAARABUAFMAAAAQZgAAAAEAACAAAAAxyy0b1eA+OVyJWQd0iHtXcngSIsEnhtXn9lH+lr2TqQAAAAAOgAAAAAIAACAAAADUNU1/9VNrAzqjAeDdks4NnFweCw2VoUmRnhXPUb1Xd0AAAAA01lK1tqkT7WzdmW0X3BxyVpWIHdBqB6hGF4GSDl/YZhGz/ZO1SpVbXsKeWs1FUESZjfNOBIrTfmjkEIxkI0nQQAAAABhrp5gVSRXQMG6j95VGLYgG1JZulQoW69P/50jKZTgbxNG+5kPHkRzuPuMuuYbZiv2Mg4oSbYFtudQHfcpiJZk
@@ -65,7 +65,7 @@
DTS:ObjectName="FilePattern">
Admin vs Dispensed SMC*.xlsx
+ DTS:Name="ParameterValue">Admin Vs Dispensed SMC20260104-0110.xlsx
\\retreathealthcare.org\network\Data\PHRMCY\Pharmacy Metrics\2026 Metrics\2026 Spravato Audit
+ DTS:Name="ParameterValue">\\retreathealthcare.org\network\Data\PHRMCY\Pharmacy Metrics
@@ -163,6 +163,15 @@
DTS:DataType="8"
xml:space="preserve">
+
+ 0
+
0
+
+ 0
+
+ DTS:ThreadHint="1">
-
-
-
-
-
-
-
-
-
-
-
-
+ Folder="\\retreathealthcare.org\network\Data\PHRMCY\Pharmacy Metrics" />
+ FileSpec="Admin Vs Dispensed SMC20260104-0110.xlsx" />
+ Recurse="-1" />
@@ -418,23 +388,11 @@
-
-
@@ -479,6 +437,36 @@
VSTAMinorVersion="0"
Language="CSharp"
ReadWriteVariables="User::FilesProcessed">
+
@@ -598,35 +586,6 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
]]>
-
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Settings.get_Default():ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Sett" +
- "ings")]
-
-namespace ST_26e779e5f0794098bd25498a1ddbf8d9.Properties {
-
-
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- private static Settings defaultInstance = new Settings();
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}]]>
]]>
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
-//
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-//
-[assembly: AssemblyTitle("ST_26e779e5f0794098bd25498a1ddbf8d9")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("ST_26e779e5f0794098bd25498a1ddbf8d9")]
-[assembly: AssemblyCopyright("Copyright @ 2026")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-//
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Settings.get_Default():ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Sett" +
+ "ings")]
-[assembly: AssemblyVersion("1.0.*")]]]>
+namespace ST_26e779e5f0794098bd25498a1ddbf8d9.Properties {
+
+
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ private static Settings defaultInstance = new Settings();
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}]]>
@@ -3079,12 +3037,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]>
cachedLength="255"
cachedName="Total Dispensed"
lineageId="Package\ForEach Spravato File\Load Spravato Stage\Read Spravato Workbook.Outputs[Excel Source Output].Columns[Total Dispensed]" />
-
cachedLength="255"
cachedName="Quantity"
lineageId="Package\ForEach Spravato File\Load Spravato Stage\Read Spravato Workbook.Outputs[Excel Source Output].Columns[Quantity]" />
+
@@ -3194,7 +3152,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]>
dataType="wstr"
errorOrTruncationOperation="Conversion"
errorRowDisposition="FailComponent"
- length="50"
+ length="255"
lineageId="Package\ForEach Spravato File\Load Spravato Stage\Convert Spravato Fields.Outputs[Data Conversion Output].Columns[AdminDose_Text]"
name="AdminDose_Text"
truncationRowDisposition="FailComponent">
@@ -3203,7 +3161,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]>
containsID="true"
dataType="System.Int32"
description="Specifies the input column used as the source of data for the conversion."
- name="SourceInputColumnLineageID">#{Package\ForEach Spravato File\Load Spravato Stage\Read Spravato Workbook.Outputs[Excel Source Output].Columns[Admin Unit]}
+ name="SourceInputColumnLineageID">#{Package\ForEach Spravato File\Load Spravato Stage\Read Spravato Workbook.Outputs[Excel Source Output].Columns[Admin Dose]}
@@ -4699,38 +4657,8 @@ FROM [Spravato Audit$A3:AG1048576]
VSTAMajorVersion="17"
VSTAMinorVersion="0"
Language="CSharp"
- ReadOnlyVariables="User::CurrentFilePath"
- ReadWriteVariables="User::CurrentFileDateText,User::CurrentFileHash,User::CurrentFileModified,User::CurrentFileName,User::CurrentFileSize,User::CurrentFileSkipReason,User::FilesFound,User::LockedFilesSkipped,User::SkipCurrentFile">
-
+ ReadOnlyVariables="User::CurrentFilePath,$Project::MinimumSourceYear"
+ ReadWriteVariables="User::CurrentFileDateText,User::CurrentFileHash,User::CurrentFileModified,User::CurrentFileName,User::CurrentFileSize,User::CurrentFileSkipReason,User::CurrentSourceYear,User::FilesFound,User::LockedFilesSkipped,User::SkipCurrentFile">
@@ -4850,386 +4778,6 @@ using System.Runtime.CompilerServices;
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
]]>
-
- /// ScriptMain is the entry point class of the script. Do not change the name, attributes,
- /// or parent of this class.
- ///
- [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
- public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
- {
- #region Help: Using Integration Services variables and parameters in a script
- /* To use a variable in this script, first ensure that the variable has been added to
- * either the list contained in the ReadOnlyVariables property or the list contained in
- * the ReadWriteVariables property of this script task, according to whether or not your
- * code needs to write to the variable. To add the variable, save this script, close this instance of
- * Visual Studio, and update the ReadOnlyVariables and
- * ReadWriteVariables properties in the Script Transformation Editor window.
- * To use a parameter in this script, follow the same steps. Parameters are always read-only.
- *
- * Example of reading from a variable:
- * DateTime startTime = (DateTime) Dts.Variables["System::StartTime"].Value;
- *
- * Example of writing to a variable:
- * Dts.Variables["User::myStringVariable"].Value = "new value";
- *
- * Example of reading from a package parameter:
- * int batchId = (int) Dts.Variables["$Package::batchId"].Value;
- *
- * Example of reading from a project parameter:
- * int batchId = (int) Dts.Variables["$Project::batchId"].Value;
- *
- * Example of reading from a sensitive project parameter:
- * int batchId = (int) Dts.Variables["$Project::batchId"].GetSensitiveValue();
- * */
-
- #endregion
-
- #region Help: Firing Integration Services events from a script
- /* This script task can fire events for logging purposes.
- *
- * Example of firing an error event:
- * Dts.Events.FireError(18, "Process Values", "Bad value", "", 0);
- *
- * Example of firing an information event:
- * Dts.Events.FireInformation(3, "Process Values", "Processing has started", "", 0, ref fireAgain)
- *
- * Example of firing a warning event:
- * Dts.Events.FireWarning(14, "Process Values", "No values received for input", "", 0);
- * */
- #endregion
-
- #region Help: Using Integration Services connection managers in a script
- /* Some types of connection managers can be used in this script task. See the topic
- * "Working with Connection Managers Programatically" for details.
- *
- * Example of using an ADO.Net connection manager:
- * object rawConnection = Dts.Connections["Sales DB"].AcquireConnection(Dts.Transaction);
- * SqlConnection myADONETConnection = (SqlConnection)rawConnection;
- * //Use the connection in some code here, then release the connection
- * Dts.Connections["Sales DB"].ReleaseConnection(rawConnection);
- *
- * Example of using a File connection manager
- * object rawConnection = Dts.Connections["Prices.zip"].AcquireConnection(Dts.Transaction);
- * string filePath = (string)rawConnection;
- * //Use the connection in some code here, then release the connection
- * Dts.Connections["Prices.zip"].ReleaseConnection(rawConnection);
- * */
- #endregion
-
-
- ///
- /// This method is called when this script task executes in the control flow.
- /// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
- /// To open Help, press F1.
- ///
- public void Main()
- {
- string filePath =
- Dts.Variables["User::CurrentFilePath"].Value.ToString();
-
- // Reset per-file state.
- Dts.Variables["User::SkipCurrentFile"].Value = false;
- Dts.Variables["User::CurrentFileSkipReason"].Value = "";
-
- // The Foreach enumerator found the file, even if we later defer it.
- int filesFound =
- (int)Dts.Variables["User::FilesFound"].Value;
-
- Dts.Variables["User::FilesFound"].Value =
- filesFound + 1;
-
- try
- {
- System.IO.FileInfo fileInfo =
- new System.IO.FileInfo(filePath);
-
- Dts.Variables["User::CurrentFileName"].Value =
- fileInfo.Name;
-
- if (!fileInfo.Exists)
- {
- Dts.Variables["User::SkipCurrentFile"].Value = true;
-
- Dts.Variables["User::CurrentFileSkipReason"].Value =
- "File disappeared before processing.";
-
- bool fireAgainMissing = false;
-
- Dts.Events.FireWarning(
- 0,
- "Prepare Current File",
- "Skipping file because it no longer exists: " + filePath,
- "",
- 0
- );
-
- Dts.TaskResult = (int)ScriptResults.Success;
- return;
- }
-
- /*
- * Try several times to obtain a read handle.
- *
- * FileShare.Read is intentional. We do not want to read a workbook
- * while another process has it open for writing.
- */
- System.IO.FileStream stream = null;
- System.IO.IOException lastIOException = null;
-
- const int maxAttempts = 3;
- const int waitMilliseconds = 2000;
-
- for (int attempt = 1; attempt <= maxAttempts; attempt++)
- {
- try
- {
- stream = new System.IO.FileStream(
- filePath,
- System.IO.FileMode.Open,
- System.IO.FileAccess.Read,
- System.IO.FileShare.Read
- );
-
- break;
- }
- catch (System.IO.IOException ex)
- {
- lastIOException = ex;
-
- if (attempt < maxAttempts)
- {
- System.Threading.Thread.Sleep(waitMilliseconds);
- }
- }
- }
-
- /*
- * Still unavailable after retries:
- * defer this workbook instead of failing the package.
- */
- if (stream == null)
- {
- Dts.Variables["User::SkipCurrentFile"].Value = true;
-
- string reason =
- "File is locked/in use after " +
- maxAttempts.ToString() +
- " attempts. It will be retried on the next ETL run.";
-
- Dts.Variables["User::CurrentFileSkipReason"].Value =
- reason;
-
- int lockedFiles =
- (int)Dts.Variables["User::LockedFilesSkipped"].Value;
-
- Dts.Variables["User::LockedFilesSkipped"].Value =
- lockedFiles + 1;
-
- Dts.Events.FireWarning(
- 0,
- "Prepare Current File",
- reason + " File: " + filePath,
- "",
- 0
- );
-
- Dts.TaskResult = (int)ScriptResults.Success;
- return;
- }
-
- using (stream)
- {
- fileInfo.Refresh();
-
- Dts.Variables["User::CurrentFileSize"].Value =
- fileInfo.Length;
-
- Dts.Variables["User::CurrentFileModified"].Value =
- fileInfo.LastWriteTime;
-
- Dts.Variables["User::CurrentFileDateText"].Value =
- fileInfo.LastWriteTime.ToString("yyyy-MM-dd");
-
- using (
- System.Security.Cryptography.SHA256 sha256 =
- System.Security.Cryptography.SHA256.Create()
- )
- {
- byte[] hashBytes =
- sha256.ComputeHash(stream);
-
- string hash =
- BitConverter.ToString(hashBytes)
- .Replace("-", "")
- .ToUpperInvariant();
-
- Dts.Variables["User::CurrentFileHash"].Value =
- hash;
- }
- }
-
- bool fireAgain = false;
-
- Dts.Events.FireInformation(
- 0,
- "Prepare Current File",
- "Found: " +
- fileInfo.Name +
- " | Bytes: " +
- fileInfo.Length.ToString() +
- " | SHA256: " +
- Dts.Variables["User::CurrentFileHash"].Value.ToString(),
- "",
- 0,
- ref fireAgain
- );
-
- Dts.TaskResult =
- (int)ScriptResults.Success;
- }
- catch (Exception ex)
- {
- /*
- * Unexpected errors still fail the task.
- * Only known file-access/locking conditions are deferred.
- */
- Dts.Events.FireError(
- 0,
- "Prepare Current File",
- ex.ToString(),
- "",
- 0
- );
-
- Dts.TaskResult =
- (int)ScriptResults.Failure;
- }
- }
-
- #region ScriptResults declaration
- ///
- /// This enum provides a convenient shorthand within the scope of this class for setting the
- /// result of the script.
- ///
- /// This code was generated automatically.
- ///
- enum ScriptResults
- {
- Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
- Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
- };
- #endregion
-
- }
-}]]>
-
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources.get_ResourceManager():System.Resources.Resou" +
- "rceManager")]
-[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources.get_Culture():System.Globalization.CultureIn" +
- "fo")]
-[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources.set_Culture(System.Globalization.CultureInfo" +
- "):Void")]
-
-namespace ST_e1ef9c54be554a589a679829e6fb5458.Properties {
-
-
- ///
- /// 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.Diagnostics.DebuggerNonUserCodeAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if ((resourceMan == null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources", typeof(Resources).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(System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}]]>
-
-
-
- ST_e1ef9c54be554a589a679829e6fb5458
- msBuild
- ST_e1ef9c54be554a589a679829e6fb5458
- {55D8D7B5-1798-4076-8C4F-BBAB2218ACA3}
-
-
-
-
-
-
-
-
-
-
-]]>
-
-
-
-
-
-]]>
+ Name="ScriptMain.cs"
+ Encoding="UTF8">20\d{2}) Metrics\\" +
+ @"(?20\d{2}) Spravato Audit\\",
+ System.Text.RegularExpressions.RegexOptions.IgnoreCase
+ );
+
+ /*
+ * If the matching filename exists somewhere under Pharmacy
+ * Metrics but is not inside the expected Spravato folder
+ * structure, ignore it.
+ */
+ if (!pathMatch.Success)
+ {
+ string reason =
+ "File is not located in the expected " +
+ "'YYYY Metrics\\YYYY Spravato Audit' folder structure.";
+
+ Dts.Variables["User::SkipCurrentFile"].Value = true;
+
+ Dts.Variables["User::CurrentFileSkipReason"].Value =
+ reason;
+
+ bool fireAgainInvalidPath = false;
+
+ Dts.Events.FireInformation(
+ 0,
+ "Prepare Current File",
+ "Ignoring file: " +
+ filePath +
+ " | Reason: " +
+ reason,
+ "",
+ 0,
+ ref fireAgainInvalidPath
+ );
+
+ Dts.TaskResult =
+ (int)ScriptResults.Success;
+
+ return;
+ }
+
+
+ int metricsYear =
+ Convert.ToInt32(
+ pathMatch.Groups["metricsYear"].Value
+ );
+
+ int auditYear =
+ Convert.ToInt32(
+ pathMatch.Groups["auditYear"].Value
+ );
+
+
+ /*
+ * The two directory years should agree.
+ *
+ * Example:
+ * 2026 Metrics\2026 Spravato Audit = valid
+ *
+ * 2026 Metrics\2025 Spravato Audit = suspicious
+ */
+ if (metricsYear != auditYear)
+ {
+ string reason =
+ "Metrics folder year (" +
+ metricsYear.ToString() +
+ ") does not match Spravato Audit folder year (" +
+ auditYear.ToString() +
+ ").";
+
+ Dts.Variables["User::SkipCurrentFile"].Value = true;
+
+ Dts.Variables["User::CurrentFileSkipReason"].Value =
+ reason;
+
+ Dts.Events.FireWarning(
+ 0,
+ "Prepare Current File",
+ "Skipping file due to inconsistent folder years. " +
+ "File: " +
+ filePath +
+ " | " +
+ reason,
+ "",
+ 0
+ );
+
+ Dts.TaskResult =
+ (int)ScriptResults.Success;
+
+ return;
+ }
+
+
+ Dts.Variables["User::CurrentSourceYear"].Value =
+ auditYear;
+
+
+ /*
+ * ------------------------------------------------------------
+ * MINIMUM YEAR FILTER
+ * ------------------------------------------------------------
+ *
+ * With MinimumSourceYear = 2025:
+ *
+ * 2024 -> ignored
+ * 2025 -> processed
+ * 2026 -> processed
+ * 2027 -> processed automatically
+ * 2028 -> processed automatically
+ * ------------------------------------------------------------
+ */
+
+ if (auditYear < minimumSourceYear)
+ {
+ string reason =
+ "Source year " +
+ auditYear.ToString() +
+ " is earlier than MinimumSourceYear " +
+ minimumSourceYear.ToString() +
+ ".";
+
+ Dts.Variables["User::SkipCurrentFile"].Value = true;
+
+ Dts.Variables["User::CurrentFileSkipReason"].Value =
+ reason;
+
+ bool fireAgainOldYear = false;
+
+ Dts.Events.FireInformation(
+ 0,
+ "Prepare Current File",
+ "Ignoring historical file: " +
+ filePath +
+ " | " +
+ reason,
+ "",
+ 0,
+ ref fireAgainOldYear
+ );
+
+ Dts.TaskResult =
+ (int)ScriptResults.Success;
+
+ return;
+ }
+
+
+ /*
+ * ------------------------------------------------------------
+ * FILE IS AN ELIGIBLE SPRAVATO SOURCE FILE
+ *
+ * Increment FilesFound only after it passes the directory/year
+ * filters. Therefore a 2024 workbook does not inflate the
+ * Spravato FilesFound count.
+ * ------------------------------------------------------------
+ */
+
+ int filesFound =
+ (int)Dts.Variables["User::FilesFound"].Value;
+
+ Dts.Variables["User::FilesFound"].Value =
+ filesFound + 1;
+
+
+ /*
+ * ------------------------------------------------------------
+ * MAKE SURE THE FILE STILL EXISTS
+ * ------------------------------------------------------------
+ */
+
+ if (!fileInfo.Exists)
+ {
+ Dts.Variables["User::SkipCurrentFile"].Value = true;
+
+ Dts.Variables["User::CurrentFileSkipReason"].Value =
+ "File disappeared before processing.";
+
+ /*
+ * Treat this as deferred/unavailable so the warning email
+ * is generated.
+ */
+ int unavailableFiles =
+ (int)Dts.Variables[
+ "User::LockedFilesSkipped"
+ ].Value;
+
+ Dts.Variables["User::LockedFilesSkipped"].Value =
+ unavailableFiles + 1;
+
+ Dts.Events.FireWarning(
+ 0,
+ "Prepare Current File",
+ "Skipping file because it no longer exists: " +
+ filePath,
+ "",
+ 0
+ );
+
+ Dts.TaskResult =
+ (int)ScriptResults.Success;
+
+ return;
+ }
+
+
+ /*
+ * ------------------------------------------------------------
+ * FILE LOCK / AVAILABILITY CHECK
+ *
+ * Try several times to obtain a read handle.
+ *
+ * FileShare.Read is intentional. We do not want to read a
+ * workbook while another process has it open for writing.
+ * ------------------------------------------------------------
+ */
+
+ System.IO.FileStream stream = null;
+ System.IO.IOException lastIOException = null;
+
+ const int maxAttempts = 3;
+ const int waitMilliseconds = 2000;
+
+ for (
+ int attempt = 1;
+ attempt <= maxAttempts;
+ attempt++
+ )
+ {
+ try
+ {
+ stream =
+ new System.IO.FileStream(
+ filePath,
+ System.IO.FileMode.Open,
+ System.IO.FileAccess.Read,
+ System.IO.FileShare.Read
+ );
+
+ break;
+ }
+ catch (System.IO.IOException ex)
+ {
+ lastIOException = ex;
+
+ if (attempt < maxAttempts)
+ {
+ System.Threading.Thread.Sleep(
+ waitMilliseconds
+ );
+ }
+ }
+ }
+
+
+ /*
+ * ------------------------------------------------------------
+ * FILE IS STILL UNAVAILABLE AFTER RETRIES
+ *
+ * Defer it rather than failing the entire ETL package.
+ * ------------------------------------------------------------
+ */
+
+ if (stream == null)
+ {
+ Dts.Variables["User::SkipCurrentFile"].Value =
+ true;
+
+ string reason =
+ "File is locked/in use after " +
+ maxAttempts.ToString() +
+ " attempts. It will be retried on the next ETL run.";
+
+ Dts.Variables[
+ "User::CurrentFileSkipReason"
+ ].Value = reason;
+
+ int lockedFiles =
+ (int)Dts.Variables[
+ "User::LockedFilesSkipped"
+ ].Value;
+
+ Dts.Variables[
+ "User::LockedFilesSkipped"
+ ].Value = lockedFiles + 1;
+
+ Dts.Events.FireWarning(
+ 0,
+ "Prepare Current File",
+ reason +
+ " File: " +
+ filePath,
+ "",
+ 0
+ );
+
+ Dts.TaskResult =
+ (int)ScriptResults.Success;
+
+ return;
+ }
+
+
+ /*
+ * ------------------------------------------------------------
+ * FILE IS AVAILABLE - COLLECT METADATA AND HASH
+ * ------------------------------------------------------------
+ */
+
+ using (stream)
+ {
+ fileInfo.Refresh();
+
+ Dts.Variables["User::CurrentFileSize"].Value =
+ fileInfo.Length;
+
+ Dts.Variables[
+ "User::CurrentFileModified"
+ ].Value = fileInfo.LastWriteTime;
+
+ Dts.Variables[
+ "User::CurrentFileDateText"
+ ].Value =
+ fileInfo.LastWriteTime.ToString(
+ "yyyy-MM-dd"
+ );
+
+ using (
+ System.Security.Cryptography.SHA256 sha256 =
+ System.Security.Cryptography.SHA256.Create()
+ )
+ {
+ byte[] hashBytes =
+ sha256.ComputeHash(stream);
+
+ string hash =
+ BitConverter
+ .ToString(hashBytes)
+ .Replace("-", "")
+ .ToUpperInvariant();
+
+ Dts.Variables[
+ "User::CurrentFileHash"
+ ].Value = hash;
+ }
+ }
+
+
+ /*
+ * ------------------------------------------------------------
+ * LOG SUCCESSFUL FILE DISCOVERY
+ * ------------------------------------------------------------
+ */
+
+ bool fireAgain = false;
+
+ Dts.Events.FireInformation(
+ 0,
+ "Prepare Current File",
+ "Found: " +
+ fileInfo.Name +
+ " | Source Year: " +
+ auditYear.ToString() +
+ " | Bytes: " +
+ fileInfo.Length.ToString() +
+ " | SHA256: " +
+ Dts.Variables[
+ "User::CurrentFileHash"
+ ].Value.ToString(),
+ "",
+ 0,
+ ref fireAgain
+ );
+
+
+ Dts.TaskResult =
+ (int)ScriptResults.Success;
+ }
+ catch (Exception ex)
+ {
+ /*
+ * Unexpected errors still fail the task.
+ *
+ * Only known filtering / file availability conditions are
+ * intentionally skipped or deferred.
+ */
+
+ Dts.Events.FireError(
+ 0,
+ "Prepare Current File",
+ ex.ToString(),
+ "",
+ 0
+ );
+
+ Dts.TaskResult =
+ (int)ScriptResults.Failure;
+ }
+ }
+
+
+ #region ScriptResults declaration
+
+ enum ScriptResults
+ {
+ Success =
+ Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
+
+ Failure =
+ Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
+ };
+
+ #endregion
+ }
+}]]>
@@ -5354,160 +5368,323 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458.Properties {
]]>
+
+
+
+ ST_e1ef9c54be554a589a679829e6fb5458
+ msBuild
+ ST_e1ef9c54be554a589a679829e6fb5458
+ {D052E0D5-0F13-4AAC-B9D5-14758386F25F}
+
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+
+
+
+
+]]>
+
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources.get_ResourceManager():System.Resources.Resou" +
+ "rceManager")]
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources.get_Culture():System.Globalization.CultureIn" +
+ "fo")]
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources.set_Culture(System.Globalization.CultureInfo" +
+ "):Void")]
+
+namespace ST_e1ef9c54be554a589a679829e6fb5458.Properties {
+
+
+ ///
+ /// 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.Diagnostics.DebuggerNonUserCodeAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if ((resourceMan == null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ST_e1ef9c54be554a589a679829e6fb5458.Properties.Resources", typeof(Resources).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(System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}]]>
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
-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
-BCoAAEJTSkIBAAEAAAAAAAwAAAB2NC4wLjMwMzE5AAAAAAUAbAAAAMwEAAAjfgAAOAUAAPwGAAAj
-U3RyaW5ncwAAAAA0DAAAGAQAACNVUwBMEAAAEAAAACNHVUlEAAAAXBAAAPQBAAAjQmxvYgAAAAAA
-AAACAAABVx2iAQkDAAAA+gEzABYAAAEAAAAxAAAABQAAAAYAAAAJAAAAAQAAADQAAAACAAAAEAAA
-AAEAAAACAAAAAwAAAAQAAAABAAAABAAAAAEAAAABAAAAAAA5BAEAAAAAAAYAowKPBQYAMgOPBQYA
-7wF8BQ8AAwYAAAYAHALoBAYAhgLoBAYAZwLoBAYAGQPoBAYAwwLoBAYA3ALoBAYAMwLoBAYATgJ7
-AwoA9wLoAwoAXwHoAwYABgVBAAYAYQRBAAYA5QB1BAYADQDRBgYA/AR1BAYA+gRBAAYAigR1BAYA
-0gF8BQYAngZ1BAYANAWvBQYADwXTBA4AogEjBA4AAwIjBA4AewG+BAYAtwGPBQoAEQToAxIARQYA
-ARIAowAAAQYAmwR1BAYAAQB1BAYAGwVBAAoARAXoAwYAowN1BAYAmgBBAAYAWAZBAAYAJQFBAAYA
-ewBqAwYABwB1BAYAfATRBgYAZQRBAAYAWAV1BAYArAB1BAYAIAF1BAYAuAB1BAYA8gboBAAAAAA4
-AAAAAAABAAEAAQAQAKMEFAA5AAEAAQAAABAAtgUSBl0AAQADAAABEABPBhIGcQADAAcAAwEAAHMG
-AABVAAQACgARAI8E+AARAE8B/AARAIoAAAEGBmoABAFWgGMGBwFWgC8BBwFQIAAAAACGAKkEBgAB
-ALwkAAAAAIYYbwUGAAEAxCQAAAAAgxhvBQYAAQDMJAAAAACTCDAFCwEBAPgkAAAAAJMINwEQAQEA
-/yQAAAAAkwhDARUBAQAHJQAAAACWCKUGGwECAA4lAAAAAIYYbwUGAAIAFiUAAAAAkRh1BSABAgAA
-AAEAZAMJAG8FAQARAG8FBgAZAG8FCgApAG8FEAAxAG8FEAA5AG8FEABBAG8FEABJAG8FEABRAG8F
-EABZAG8FEABhAG8FEABpAG8FBgCxAG8FBgDZAG8FFQDpAG8FBgBxAGsGMwDxAEEGOAD5AGwEPQAB
-AVADRAC5AKEDSAABAVoDTAB5AG8FEAAZAdwASAAZAYwGUQDxAIEGVQApAZcGWwAhAZUDYQDxALEG
-AQCBAG8FagBJASoFeAARAaEDSAApAZcGfQAZAbYDBgB5AL4DhAAZAe4AiACJAKEDjQCRAJsBkgBZ
-AaoDlwBpAaEDnwApAYIApQApAcAGSABxAZMBBgBRAaEDSAApAZcGqwAhAa4EsQAhAWUFvABxAG8F
-BgC5AG8FBgB5AcoAxQB5Ae4GzgDBAG8F1ADhAG8FBgAIABQA7gAIABgA8wApAHMAWwEuAAsAMwEu
-ABMAPAEuABsAWwEuACMAZAEuACsAjQEuADMAjQEuADsAjQEuAEMAZAEuAEsAkwEuAFMAjQEuAFsA
-qgFDAGMA8wBJAHMAWwFhAHsA8wBjAGsA8wAbAAMAAQAEAAMAAAA0BSQBAABXASkBAACpBi4BAgAE
-AAMAAgAFAAUAAQAGAAUAAgAHAAcABIAAAAEAAAAZJmNKAAAAAAAAFAAAAAQAAAAAAAAAAAAAANwA
-cgAAAAAAEQAAAAAAAAAAAAAA5QDJAwAAAAAEAAAAAAAAAAAAAADcAHUEAAAAABEAAAAAAAAAAAAA
-AOUASwAAAAAAAAAAAAEAAADABQAABQACAAAAAAAASW50MzIASW50NjQAU0hBMjU2AFNUX2UxZWY5
-YzU0YmU1NTRhNTg5YTY3OTgyOWU2ZmI1NDU4ADxNb2R1bGU+AFN5c3RlbS5JTwBNaWNyb3NvZnQu
-U3FsU2VydmVyLk1hbmFnZWREVFMAdmFsdWVfXwBtc2NvcmxpYgBUaHJlYWQAUmVwbGFjZQBkZWZh
-dWx0SW5zdGFuY2UARmlsZU1vZGUAVmFyaWFibGUASURpc3Bvc2FibGUAUnVudGltZVR5cGVIYW5k
-bGUAR2V0VHlwZUZyb21IYW5kbGUAZ2V0X05hbWUARGF0ZVRpbWUAZ2V0X0xhc3RXcml0ZVRpbWUA
-TWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZQBUeXBlAEZpbGVTaGFyZQBGYWlsdXJlAGdl
-dF9DdWx0dXJlAHNldF9DdWx0dXJlAHJlc291cmNlQ3VsdHVyZQBWU1RBUlRTY3JpcHRPYmplY3RN
-b2RlbEJhc2UAQXBwbGljYXRpb25TZXR0aW5nc0Jhc2UARGlzcG9zZQBDcmVhdGUARWRpdG9yQnJv
-d3NhYmxlU3RhdGUAQ29tcGlsZXJHZW5lcmF0ZWRBdHRyaWJ1dGUARGVidWdnZXJOb25Vc2VyQ29k
-ZUF0dHJpYnV0ZQBEZWJ1Z2dhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBB
-c3NlbWJseVRpdGxlQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAFRhcmdldEZy
-YW1ld29ya0F0dHJpYnV0ZQBBc3NlbWJseUNvbmZpZ3VyYXRpb25BdHRyaWJ1dGUAQXNzZW1ibHlE
-ZXNjcmlwdGlvbkF0dHJpYnV0ZQBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAEFzc2Vt
-Ymx5UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBTU0lTU2NyaXB0
-VGFza0VudHJ5UG9pbnRBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAFJ1bnRpbWVD
-b21wYXRpYmlsaXR5QXR0cmlidXRlAGdldF9WYWx1ZQBzZXRfVmFsdWUAdmFsdWUAU3lzdGVtLlRo
-cmVhZGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9uaW5nAEZpcmVXYXJuaW5nAFRvU3RyaW5nAENv
-bXB1dGVIYXNoAFJlZnJlc2gAZ2V0X0xlbmd0aABNaWNyb3NvZnQuU3FsU2VydmVyLlNjcmlwdFRh
-c2sATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuVGFza3MuU2NyaXB0VGFzawBTY3JpcHRPYmplY3RN
-b2RlbABTeXN0ZW0uQ29tcG9uZW50TW9kZWwAU1RfZTFlZjljNTRiZTU1NGE1ODlhNjc5ODI5ZTZm
-YjU0NTguZGxsAEZpbGVTdHJlYW0AZ2V0X0l0ZW0AU3lzdGVtAEhhc2hBbGdvcml0aG0ARW51bQBy
-ZXNvdXJjZU1hbgBCb29sZWFuAFNjcmlwdE1haW4ARmlyZUluZm9ybWF0aW9uAFN5c3RlbS5Db25m
-aWd1cmF0aW9uAFN5c3RlbS5HbG9iYWxpemF0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAElPRXhjZXB0
-aW9uAEZpbGVJbmZvAEN1bHR1cmVJbmZvAEZpbGVTeXN0ZW1JbmZvAFNsZWVwAGdldF9SZXNvdXJj
-ZU1hbmFnZXIARXZlbnRzT2JqZWN0V3JhcHBlcgBCaXRDb252ZXJ0ZXIARmlyZUVycm9yAC5jdG9y
-AC5jY3RvcgBTeXN0ZW0uRGlhZ25vc3RpY3MAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNl
-cwBTeXN0ZW0uUmVzb3VyY2VzAFNUX2UxZWY5YzU0YmU1NTRhNTg5YTY3OTgyOWU2ZmI1NDU4LlBy
-b3BlcnRpZXMuUmVzb3VyY2VzLnJlc291cmNlcwBEZWJ1Z2dpbmdNb2RlcwBTVF9lMWVmOWM1NGJl
-NTU0YTU4OWE2Nzk4MjllNmZiNTQ1OC5Qcm9wZXJ0aWVzAGdldF9WYXJpYWJsZXMAU2V0dGluZ3MA
-RmlsZUFjY2VzcwBTdWNjZXNzAGdldF9EdHMAU2NyaXB0UmVzdWx0cwBnZXRfRXZlbnRzAGdldF9F
+ZGUuDQ0KJAAAAAAAAABQRQAATAEDAKSIqWoAAAAAAAAAAOAAIiALATAAACIAAAAIAAAAAAAAXkAA
+AAAgAAAAYAAAAAAAEAAgAAAAAgAABAAAAAAAAAAGAAAAAAAAAACgAAAAAgAAAAAAAAMAYIUAABAA
+ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAAxAAABPAAAAAGAAAHgEAAAAAAAAAAAAAAAAAAAA
+AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAZCAAAAAgAAAAIgAAAAIA
+AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAHgEAAAAYAAAAAYAAAAkAAAAAAAAAAAAAAAAAABAAABA
+LnJlbG9jAAAMAAAAAIAAAAACAAAAKgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABA
+QAAAAAAAAEgAAAACAAUAOCgAABwXAAABAAAAAAAAAFQ/AAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAABswCAAQBwAAAQAAEQIoEAAACm8RAAAKcgEAAHBvEgAACm8T
+AAAKbxQAAAoKAigQAAAKbxEAAApyLQAAcG8SAAAKbxMAAAqlIgAAAQsCKBAAAApvEQAACnJlAABw
+bxIAAAoWjCMAAAFvFQAACgIoEAAACm8RAAAKcpEAAHBvEgAACnLJAABwbxUAAAoCKBAAAApvEQAA
+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
+AOEAlQUVAPEAlQUGAHEAzAY+APkAZwZDAAEBfARJAAkBWgNQAMEAqwNUAAkBZANYAHkAlQUQACEB
+3gBUACkBtANdADkBwAZnAPkA4gZrAEkB+AZxAEEBvgR5APkAEgcBAIEAqgaEAFEBfASKAFkBWgNU
+AGEBAQCRABEBqwNUAEkB+AaWAEEBnwOcACEB7QZnAEkB+AalAIkAlQWrAIEBSgW5AEkB+Aa+ACEB
+xgMGAHkAzgPFACEB8ADJAJEAqwPOAJkApQHTAJEBugPYAKEBqwPgAEkBhADmAEkBIQdUAKkBnQEG
+AIkBqwNUAEEBiwXsAHEAlQUGAMEAlQUGALEBzAD1ALEBXQf+AMkAlQUEAekAlQUGAAgAFAAeAQgA
+GAAjASkAcwCLAS4ACwBjAS4AEwBsAS4AGwCLAS4AIwCUAS4AKwC9AS4AMwC9AS4AOwC9AS4AQwCU
+AS4ASwDDAS4AUwC9AS4AWwDaAUMAYwAjAUkAcwCLAWEAewAjAWMAawAjARsAAwABAAQAAwAAAFoF
+VAEAAFkBWQEAAAoHXgECAAQAAwACAAUABQABAAYABQACAAcABwAEgAAAAQAAABom8mIAAAAAAAAW
+AAAABAAAAAAAAAAAAAAADAF0AAAAAAARAAAAAAAAAAAAAAAVAdkDAAAAAAQAAAAAAAAAAAAAAAwB
+hQQAAAAAEQAAAAAAAAAAAAAAFQFNAAAAAAAAAAAAAQAAAOYFAAAFAAIAAAAAAABUb0ludDMyAElu
+dDY0AFNIQTI1NgBTVF9lMWVmOWM1NGJlNTU0YTU4OWE2Nzk4MjllNmZiNTQ1OAA8TW9kdWxlPgBT
+eXN0ZW0uSU8ATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAHZhbHVlX18AbXNjb3JsaWIA
+VGhyZWFkAFJlcGxhY2UAZGVmYXVsdEluc3RhbmNlAEZpbGVNb2RlAFZhcmlhYmxlAElEaXNwb3Nh
+YmxlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAGdldF9OYW1lAERhdGVUaW1l
+AGdldF9MYXN0V3JpdGVUaW1lAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUAVHlwZQBG
+aWxlU2hhcmUARmFpbHVyZQBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQByZXNvdXJjZUN1bHR1cmUA
+Q2FwdHVyZQBWU1RBUlRTY3JpcHRPYmplY3RNb2RlbEJhc2UAQXBwbGljYXRpb25TZXR0aW5nc0Jh
+c2UARGlzcG9zZQBDcmVhdGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAQ29tcGlsZXJHZW5lcmF0ZWRB
+dHRyaWJ1dGUARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZQBEZWJ1Z2dhYmxlQXR0cmlidXRl
+AEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAEFzc2VtYmx5
+VHJhZGVtYXJrQXR0cmlidXRlAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBBc3NlbWJseUNvbmZp
+Z3VyYXRpb25BdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBDb21waWxhdGlv
+blJlbGF4YXRpb25zQXR0cmlidXRlAEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNv
+cHlyaWdodEF0dHJpYnV0ZQBTU0lTU2NyaXB0VGFza0VudHJ5UG9pbnRBdHRyaWJ1dGUAQXNzZW1i
+bHlDb21wYW55QXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAGdldF9WYWx1
+ZQBzZXRfVmFsdWUAdmFsdWUAU3lzdGVtLlRocmVhZGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9u
+aW5nAEZpcmVXYXJuaW5nAFRvU3RyaW5nAE1hdGNoAENvbXB1dGVIYXNoAFJlZnJlc2gAZ2V0X0xl
+bmd0aABNaWNyb3NvZnQuU3FsU2VydmVyLlNjcmlwdFRhc2sATWljcm9zb2Z0LlNxbFNlcnZlci5E
+dHMuVGFza3MuU2NyaXB0VGFzawBTY3JpcHRPYmplY3RNb2RlbABTeXN0ZW0uQ29tcG9uZW50TW9k
+ZWwAU1RfZTFlZjljNTRiZTU1NGE1ODlhNjc5ODI5ZTZmYjU0NTguZGxsAEZpbGVTdHJlYW0AZ2V0
+X0l0ZW0AU3lzdGVtAEhhc2hBbGdvcml0aG0ARW51bQByZXNvdXJjZU1hbgBCb29sZWFuAFNjcmlw
+dE1haW4ARmlyZUluZm9ybWF0aW9uAFN5c3RlbS5Db25maWd1cmF0aW9uAFN5c3RlbS5HbG9iYWxp
+emF0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAEdyb3VwQ29sbGVjdGlvbgBJT0V4Y2VwdGlvbgBGaWxl
+SW5mbwBDdWx0dXJlSW5mbwBGaWxlU3lzdGVtSW5mbwBTbGVlcABHcm91cABnZXRfUmVzb3VyY2VN
+YW5hZ2VyAEV2ZW50c09iamVjdFdyYXBwZXIAQml0Q29udmVydGVyAEZpcmVFcnJvcgAuY3RvcgAu
+Y2N0b3IAU3lzdGVtLkRpYWdub3N0aWNzAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMA
+U3lzdGVtLlJlc291cmNlcwBTVF9lMWVmOWM1NGJlNTU0YTU4OWE2Nzk4MjllNmZiNTQ1OC5Qcm9w
+ZXJ0aWVzLlJlc291cmNlcy5yZXNvdXJjZXMARGVidWdnaW5nTW9kZXMAU1RfZTFlZjljNTRiZTU1
+NGE1ODlhNjc5ODI5ZTZmYjU0NTguUHJvcGVydGllcwBnZXRfVmFyaWFibGVzAFNldHRpbmdzAFN5
+c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucwBSZWdleE9wdGlvbnMAZ2V0X0dyb3VwcwBGaWxl
+QWNjZXNzAGdldF9TdWNjZXNzAGdldF9EdHMAU2NyaXB0UmVzdWx0cwBnZXRfRXZlbnRzAGdldF9F
eGlzdHMAQ29uY2F0AE9iamVjdABnZXRfRGVmYXVsdABzZXRfVGFza1Jlc3VsdABUb1VwcGVySW52
-YXJpYW50AFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkAZ2V0X0Fzc2VtYmx5AAAAK1UAcwBl
-AHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBQAGEAdABoAAArVQBzAGUAcgA6ADoAUwBrAGkA
-cABDAHUAcgByAGUAbgB0AEYAaQBsAGUAADdVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBs
-AGUAUwBrAGkAcABSAGUAYQBzAG8AbgAAAQAhVQBzAGUAcgA6ADoARgBpAGwAZQBzAEYAbwB1AG4A
-ZAAAK1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBOAGEAbQBlAABHRgBpAGwAZQAg
-AGQAaQBzAGEAcABwAGUAYQByAGUAZAAgAGIAZQBmAG8AcgBlACAAcAByAG8AYwBlAHMAcwBpAG4A
-ZwAuAAApUAByAGUAcABhAHIAZQAgAEMAdQByAHIAZQBuAHQAIABGAGkAbABlAABXUwBrAGkAcABw
-AGkAbgBnACAAZgBpAGwAZQAgAGIAZQBjAGEAdQBzAGUAIABpAHQAIABuAG8AIABsAG8AbgBnAGUA
-cgAgAGUAeABpAHMAdABzADoAIAAAOUYAaQBsAGUAIABpAHMAIABsAG8AYwBrAGUAZAAvAGkAbgAg
-AHUAcwBlACAAYQBmAHQAZQByACAAAGUgAGEAdAB0AGUAbQBwAHQAcwAuACAASQB0ACAAdwBpAGwA
-bAAgAGIAZQAgAHIAZQB0AHIAaQBlAGQAIABvAG4AIAB0AGgAZQAgAG4AZQB4AHQAIABFAFQATAAg
-AHIAdQBuAC4AADFVAHMAZQByADoAOgBMAG8AYwBrAGUAZABGAGkAbABlAHMAUwBrAGkAcABwAGUA
-ZAAADyAARgBpAGwAZQA6ACAAACtVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUAUwBp
-AHoAZQAAM1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBNAG8AZABpAGYAaQBlAGQA
-ADNVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUARABhAHQAZQBUAGUAeAB0AAAVeQB5
-AHkAeQAtAE0ATQAtAGQAZAABAy0AAStVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUA
-SABhAHMAaAAAD0YAbwB1AG4AZAA6ACAAABUgAHwAIABCAHkAdABlAHMAOgAgAAAXIAB8ACAAUwBI
-AEEAMgA1ADYAOgAgAABxUwBUAF8AZQAxAGUAZgA5AGMANQA0AGIAZQA1ADUANABhADUAOAA5AGEA
-NgA3ADkAOAAyADkAZQA2AGYAYgA1ADQANQA4AC4AUAByAG8AcABlAHIAdABpAGUAcwAuAFIAZQBz
-AG8AdQByAGMAZQBzAAAAxBoQ6hdPfkubj8w1TiQYrQAEIAEBCAMgAAEFIAEBEREEIAEBDgUgAQER
-aRcHDw4IEj0SQQIIDggIEkERRRJJDgoSTQQgABJ5BCAAEn0GIAESgIEcAyAAHAMgAA4EIAEBHAMg
-AAIFIAASgJEFAAIODg4IIAUBCA4ODggNIAQBDhGAmRGAnRGAoQQAAQEIBgADDg4ODgMgAAoEIAAR
-RQQgAQ4OBAAAEkkHIAEdBRKAsQUAAQ4dBQUgAg4ODgUAAQ4dDgogBgEIDg4OCBACCCAFAggODg4I
-CAABEoC9EYDBBSAAEoDFByACAQ4SgMUIt3pcVhk04IkIiYRdzYCAzJEEAAAAAAQBAAAAAwYSYQMG
-EmUDBhIQAgYIAwYRFAQAABJhBAAAEmUFAAEBEmUEAAASEAMAAAEECAASYQQIABJlBAgAEhAIAQAI
-AAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBCAEAAgAAAAAAKAEAI1NUX2UxZWY5
-YzU0YmU1NTRhNTg5YTY3OTgyOWU2ZmI1NDU4AAAFAQAAAAAWAQARQ29weXJpZ2h0IEAgIDIwMjYA
-AEkBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuNwEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUS
-Lk5FVCBGcmFtZXdvcmsgNC43tAAAAM7K774BAAAAkQAAAGxTeXN0ZW0uUmVzb3VyY2VzLlJlc291
-cmNlUmVhZGVyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1
-YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkjU3lzdGVtLlJlc291cmNlcy5SdW50aW1lUmVz
-b3VyY2VTZXQCAAAAAAAAAAAAAABQQURQQURQtAAAAFQ4AAAAAAAAAAAAAG44AAAAIAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAABgOAAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/
-JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+YXJpYW50AENvbnZlcnQAUmVnZXgAU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeQBnZXRfQXNz
+ZW1ibHkAAAAAK1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBQAGEAdABoAAA3JABQ
+AHIAbwBqAGUAYwB0ADoAOgBNAGkAbgBpAG0AdQBtAFMAbwB1AHIAYwBlAFkAZQBhAHIAACtVAHMA
+ZQByADoAOgBTAGsAaQBwAEMAdQByAHIAZQBuAHQARgBpAGwAZQAAN1UAcwBlAHIAOgA6AEMAdQBy
+AHIAZQBuAHQARgBpAGwAZQBTAGsAaQBwAFIAZQBhAHMAbwBuAAABAC9VAHMAZQByADoAOgBDAHUA
+cgByAGUAbgB0AFMAbwB1AHIAYwBlAFkAZQBhAHIAACtVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0
+AEYAaQBsAGUATgBhAG0AZQAAgJNcAFwAKAA/ADwAbQBlAHQAcgBpAGMAcwBZAGUAYQByAD4AMgAw
+AFwAZAB7ADIAfQApACAATQBlAHQAcgBpAGMAcwBcAFwAKAA/ADwAYQB1AGQAaQB0AFkAZQBhAHIA
+PgAyADAAXABkAHsAMgB9ACkAIABTAHAAcgBhAHYAYQB0AG8AIABBAHUAZABpAHQAXABcAACAsUYA
+aQBsAGUAIABpAHMAIABuAG8AdAAgAGwAbwBjAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAGUAeABw
+AGUAYwB0AGUAZAAgACcAWQBZAFkAWQAgAE0AZQB0AHIAaQBjAHMAXABZAFkAWQBZACAAUwBwAHIA
+YQB2AGEAdABvACAAQQB1AGQAaQB0ACcAIABmAG8AbABkAGUAcgAgAHMAdAByAHUAYwB0AHUAcgBl
+AC4AASlQAHIAZQBwAGEAcgBlACAAQwB1AHIAcgBlAG4AdAAgAEYAaQBsAGUAAB9JAGcAbgBvAHIA
+aQBuAGcAIABmAGkAbABlADoAIAAAFyAAfAAgAFIAZQBhAHMAbwBuADoAIAAAF20AZQB0AHIAaQBj
+AHMAWQBlAGEAcgAAE2EAdQBkAGkAdABZAGUAYQByAAArTQBlAHQAcgBpAGMAcwAgAGYAbwBsAGQA
+ZQByACAAeQBlAGEAcgAgACgAAFspACAAZABvAGUAcwAgAG4AbwB0ACAAbQBhAHQAYwBoACAAUwBw
+AHIAYQB2AGEAdABvACAAQQB1AGQAaQB0ACAAZgBvAGwAZABlAHIAIAB5AGUAYQByACAAKAAABSkA
+LgAAbVMAawBpAHAAcABpAG4AZwAgAGYAaQBsAGUAIABkAHUAZQAgAHQAbwAgAGkAbgBjAG8AbgBz
+AGkAcwB0AGUAbgB0ACAAZgBvAGwAZABlAHIAIAB5AGUAYQByAHMALgAgAEYAaQBsAGUAOgAgAAAH
+IAB8ACAAABlTAG8AdQByAGMAZQAgAHkAZQBhAHIAIAAARyAAaQBzACAAZQBhAHIAbABpAGUAcgAg
+AHQAaABhAG4AIABNAGkAbgBpAG0AdQBtAFMAbwB1AHIAYwBlAFkAZQBhAHIAIAAAAy4AADVJAGcA
+bgBvAHIAaQBuAGcAIABoAGkAcwB0AG8AcgBpAGMAYQBsACAAZgBpAGwAZQA6ACAAACFVAHMAZQBy
+ADoAOgBGAGkAbABlAHMARgBvAHUAbgBkAABHRgBpAGwAZQAgAGQAaQBzAGEAcABwAGUAYQByAGUA
+ZAAgAGIAZQBmAG8AcgBlACAAcAByAG8AYwBlAHMAcwBpAG4AZwAuAAAxVQBzAGUAcgA6ADoATABv
+AGMAawBlAGQARgBpAGwAZQBzAFMAawBpAHAAcABlAGQAAFdTAGsAaQBwAHAAaQBuAGcAIABmAGkA
+bABlACAAYgBlAGMAYQB1AHMAZQAgAGkAdAAgAG4AbwAgAGwAbwBuAGcAZQByACAAZQB4AGkAcwB0
+AHMAOgAgAAA5RgBpAGwAZQAgAGkAcwAgAGwAbwBjAGsAZQBkAC8AaQBuACAAdQBzAGUAIABhAGYA
+dABlAHIAIAAAZSAAYQB0AHQAZQBtAHAAdABzAC4AIABJAHQAIAB3AGkAbABsACAAYgBlACAAcgBl
+AHQAcgBpAGUAZAAgAG8AbgAgAHQAaABlACAAbgBlAHgAdAAgAEUAVABMACAAcgB1AG4ALgAADyAA
+RgBpAGwAZQA6ACAAACtVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUAUwBpAHoAZQAA
+M1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBNAG8AZABpAGYAaQBlAGQAADNVAHMA
+ZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUARABhAHQAZQBUAGUAeAB0AAAVeQB5AHkAeQAt
+AE0ATQAtAGQAZAABAy0AAStVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUASABhAHMA
+aAAAD0YAbwB1AG4AZAA6ACAAACEgAHwAIABTAG8AdQByAGMAZQAgAFkAZQBhAHIAOgAgAAAVIAB8
+ACAAQgB5AHQAZQBzADoAIAAAFyAAfAAgAFMASABBADIANQA2ADoAIAAAcVMAVABfAGUAMQBlAGYA
+OQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBmAGIANQA0ADUAOAAu
+AFAAcgBvAHAAZQByAHQAaQBlAHMALgBSAGUAcwBvAHUAcgBjAGUAcwAAAAAAlqIqI/RUBkykWESp
+VPaIDQAEIAEBCAMgAAEFIAEBEREEIAEBDgUgAQERbSIHGQ4IEj0SQQgICBJFAg4CDg4CCAgOCAgS
+RRFJEk0OChJRBCAAEn0FIAASgIEGIAESgIUcAyAAHAMgAA4EIAEBHAkAAxJBDg4RgJkDIAACBSAA
+EoChBwAEDg4ODg4KIAYBCA4ODggQAgUgABKAqQYgARKAnQ4EAAEIDgUAAQ4dDgggBQEIDg4OCAUA
+Ag4ODg0gBAEOEYC1EYC5EYC9BAABAQgGAAMODg4OAyAACgQgABFJBCABDg4EAAASTQcgAR0FEoDN
+BQABDh0FBSACDg4OCCAFAggODg4ICAABEoDZEYDdBSAAEoDhByACAQ4SgOEIt3pcVhk04IkIiYRd
+zYCAzJEEAAAAAAQBAAAAAwYSZQMGEmkDBhIQAgYIAwYRFAQAABJlBAAAEmkFAAEBEmkEAAASEAMA
+AAEECAASZQQIABJpBAgAEhAIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MB
+CAEAAgAAAAAAKAEAI1NUX2UxZWY5YzU0YmU1NTRhNTg5YTY3OTgyOWU2ZmI1NDU4AAAFAQAAAAAW
+AQARQ29weXJpZ2h0IEAgIDIwMjYAAEkBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuNwEAVA4U
+RnJhbWV3b3JrRGlzcGxheU5hbWUSLk5FVCBGcmFtZXdvcmsgNC43tAAAAM7K774BAAAAkQAAAGxT
+eXN0ZW0uUmVzb3VyY2VzLlJlc291cmNlUmVhZGVyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4w
+LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkjU3lzdGVt
+LlJlc291cmNlcy5SdW50aW1lUmVzb3VyY2VTZXQCAAAAAAAAAAAAAABQQURQQURQtAAAADRAAAAA
+AAAAAAAAAE5AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAF9Db3JEbGxN
+YWluAG1zY29yZWUuZGxsAAAAAAD/JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQAQAAAAGAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAASAAA
-AFhAAAAaBAAAAAAAAAAAAAAaBDQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAA
-vQTv/gAAAQAAAAEAY0oZJgAAAQBjShkmPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAAB
-AFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAA
-AAAAALAEegMAAAEAUwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAVgMAAAEAMAAwADAAMAAw
-ADQAYgAwAAAAGgABAAEAQwBvAG0AbQBlAG4AdABzAAAAAAAAACIAAQABAEMAbwBtAHAAYQBuAHkA
-TgBhAG0AZQAAAAAAAAAAAHAAJAABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABT
-AFQAXwBlADEAZQBmADkAYwA1ADQAYgBlADUANQA0AGEANQA4ADkAYQA2ADcAOQA4ADIAOQBlADYA
-ZgBiADUANAA1ADgAAAA+AA8AAQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAAADEALgAwAC4AOQA3
-ADUAMwAuADEAOQAwADQAMwAAAAAAcAAoAAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABTAFQA
-XwBlADEAZQBmADkAYwA1ADQAYgBlADUANQA0AGEANQA4ADkAYQA2ADcAOQA4ADIAOQBlADYAZgBi
-ADUANAA1ADgALgBkAGwAbAAAAEgAEgABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMA
-bwBwAHkAcgBpAGcAaAB0ACAAQAAgACAAMgAwADIANgAAACoAAQABAEwAZQBnAGEAbABUAHIAYQBk
-AGUAbQBhAHIAawBzAAAAAAAAAAAAeAAoAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0A
-ZQAAAFMAVABfAGUAMQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5
-AGUANgBmAGIANQA0ADUAOAAuAGQAbABsAAAAaAAkAAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAA
-AABTAFQAXwBlADEAZQBmADkAYwA1ADQAYgBlADUANQA0AGEANQA4ADkAYQA2ADcAOQA4ADIAOQBl
-ADYAZgBiADUANAA1ADgAAABCAA8AAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4A
-MAAuADkANwA1ADMALgAxADkAMAA0ADMAAAAAAEYADwABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQBy
-AHMAaQBvAG4AAAAxAC4AMAAuADkANwA1ADMALgAxADkAMAA0ADMAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAA
+AAAYAACAAAAAAAAAAAAAAAAAAAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWGAA
+ABoEAAAAAAAAAAAAABoENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+
+AAABAAAAAQDyYhomAAABAPJiGiY/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBh
+AHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAA
+sAR6AwAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAABWAwAAAQAwADAAMAAwADAANABi
+ADAAAAAaAAEAAQBDAG8AbQBtAGUAbgB0AHMAAAAAAAAAIgABAAEAQwBvAG0AcABhAG4AeQBOAGEA
+bQBlAAAAAAAAAAAAcAAkAAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAVABf
+AGUAMQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBmAGIA
+NQA0ADUAOAAAAD4ADwABAEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgA5ADcANQA0
+AC4AMgA1ADMAMwAwAAAAAABwACgAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMAVABfAGUA
+MQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBmAGIANQA0
+ADUAOAAuAGQAbABsAAAASAASAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBvAHAA
+eQByAGkAZwBoAHQAIABAACAAIAAyADAAMgA2AAAAKgABAAEATABlAGcAYQBsAFQAcgBhAGQAZQBt
+AGEAcgBrAHMAAAAAAAAAAAB4ACgAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAA
+UwBUAF8AZQAxAGUAZgA5AGMANQA0AGIAZQA1ADUANABhADUAOAA5AGEANgA3ADkAOAAyADkAZQA2
+AGYAYgA1ADQANQA4AC4AZABsAGwAAABoACQAAQBQAHIAbwBkAHUAYwB0AE4AYQBtAGUAAAAAAFMA
+VABfAGUAMQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBm
+AGIANQA0ADUAOAAAAEIADwABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4A
+OQA3ADUANAAuADIANQAzADMAMAAAAAAARgAPAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBp
+AG8AbgAAADEALgAwAC4AOQA3ADUANAAuADIANQAzADMAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAMAAAAgDgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAwAAABgMAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -5516,7 +5693,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
@@ -5602,6 +5779,24 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
DTS:LocaleID="-1"
DTS:ObjectName="Mark Package Failed"
DTS:TaskContact="Execute SQL Task; Microsoft Corporation; SQL Server 2025; © 2025 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1"
- DTS:ThreadHint="1">
+ DTS:ThreadHint="0">
+
+
+
+
+
+
+
+
+
+
+
+
DTS:LocaleID="-1"
DTS:ObjectName="Send Success Email"
DTS:TaskContact="Execute SQL Task; Microsoft Corporation; SQL Server 2025; © 2025 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1"
- DTS:ThreadHint="0">
+ DTS:ThreadHint="1">
DTS:From="Package\Mark Package Failed"
DTS:LogicalAnd="True"
DTS:ObjectName="Constraint 5"
- DTS:To="Package\Execute SQL Task" />
+ DTS:To="Package\Send Failure Email" />
+
Language="CSharp"
ReadOnlyVariables="System::ErrorDescription,System::SourceName"
ReadWriteVariables="User::ErrorMessage,User::ErrorTaskName">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+]]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-]]>
-
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_ccde3fbc55984542be29e65dd03de37b.Properties.Settings.get_Default():ST_ccde3fbc55984542be29e65dd03de37b.Properties.Sett" +
- "ings")]
-
-namespace ST_ccde3fbc55984542be29e65dd03de37b.Properties {
-
-
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- private static Settings defaultInstance = new Settings();
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
}]]>
]]>
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
-//
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-//
-[assembly: AssemblyTitle("ST_ccde3fbc55984542be29e65dd03de37b")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("ST_ccde3fbc55984542be29e65dd03de37b")]
-[assembly: AssemblyCopyright("Copyright @ 2026")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-//
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_ccde3fbc55984542be29e65dd03de37b.Properties.Settings.get_Default():ST_ccde3fbc55984542be29e65dd03de37b.Properties.Sett" +
+ "ings")]
-[assembly: AssemblyVersion("1.0.*")]]]>
+namespace ST_ccde3fbc55984542be29e65dd03de37b.Properties {
+
+
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ private static Settings defaultInstance = new Settings();
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}]]>
@@ -6583,10 +6870,26 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Size="187,42"
Id="Package\Complete Package Run"
TopLeft="845.805555555556,587.277777777778" />
+
+
+
+
Size="173,42"
Id="Package\ForEach Spravato File\Prepare Current File"
TopLeft="72,28" />
+
+
@@ -6669,10 +6980,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
@@ -6695,10 +7002,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
@@ -6721,14 +7024,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
-
@@ -6776,28 +7071,52 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ TopLeft="179.305555555556,168.777777777778" />
+
+
+
+ TopLeft="459.444444444445,111">
+ End="9.36111111111097,50.2777777777781">
+ End="0,24.888888888889" />
+
+
+
+
@@ -6808,30 +7127,30 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ TopLeft="758.305555555556,559.277777777778">
+ End="80,49">
+ End="39.75,0" />
+ Point1="39.75,0"
+ Point2="43.75,0"
+ Point3="43.75,4" />
+ End="43.75,45" />
+ Point1="43.75,45"
+ Point2="43.75,49"
+ Point3="47.75,49" />
+ End="80,49" />
@@ -6840,10 +7159,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
@@ -6868,10 +7183,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
RelativePosition="Any" />
-
@@ -6908,64 +7219,82 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
RelativePosition="Any" />
-
+ Id="Package.PrecedenceConstraints[Constraint 5]"
+ TopLeft="1125.93055555556,842.277777777778">
+ End="0,44.111111111111">
-
+ End="0,44.111111111111" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End="19.7503904364368,0" />
+ Point1="19.7503904364368,0"
+ Point2="23.7503904364368,0"
+ Point3="23.7503904364368,4" />
+ End="23.7503904364368,121.388888888889" />
+
+
-
+ Id="Package.PrecedenceConstraints[Constraint 6]"
+ TopLeft="995.5,817.388888888889">
+ End="42.1388888888891,0">
+ End="42.1388888888891,0" />
@@ -6977,11 +7306,84 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DataSourceViewID
+
+
+ TableInfoObjectType
+ Table
+
+
+
+
+
+
+ DataSourceViewID
+
+
+
+ Capacity="8" xmlns="clr-namespace:Microsoft.SqlServer.IntegrationServices.Designer.Model.Serialization;assembly=Microsoft.SqlServer.IntegrationServices.Graph" xmlns:mssgle="clr-namespace:Microsoft.SqlServer.Graph.LayoutEngine;assembly=Microsoft.SqlServer.Graph" xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mssgm="clr-namespace:Microsoft.SqlServer.Graph.Model;assembly=Microsoft.SqlServer.Graph">
Size="170,42"
Id="Package\ForEach Spravato File\Load Spravato Stage\Add Load Metadata"
TopLeft="513,120" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7017,7 +7443,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -7093,76 +7501,5 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DataSourceViewID
-
-
-
-
-
-
- DataSourceViewID
-
-
- TableInfoObjectType
- Table
-
-
-
-
-
-
-
-
-
-
]]>
\ No newline at end of file
diff --git a/SpravatoETL/SpravatoETL.dtproj b/SpravatoETL/SpravatoETL.dtproj
index 7452613..361c371 100644
--- a/SpravatoETL/SpravatoETL.dtproj
+++ b/SpravatoETL/SpravatoETL.dtproj
@@ -26,7 +26,7 @@
NB7014
- AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAACAAAAAAAQZgAAAAEAACAAAADXpt36v+b/G2k3GP+x5aSBNtsGI66t2XClrgVXV8G93gAAAAAOgAAAAAIAACAAAAAp6SAHJ2+eFa1lecFSHIJjT+tQySnEYLkSZx+eboTACpAAAABd/6SVjhO/Ls1ZUXLbz4ES6iLa/Gj2EDfnbNb2Ew5SfG0ejvQtCt/NFIMdLy8Nu5rtAimyrs11UHLB7JwqePRhf6rEL/9MqvIsjhAehu8OYkNy7+mE77/YjwGLyvb0HHR+QewWJG99eB4NYFYbg55TA5wEyUIkSOcIdTfZz2ftmjyB0Jw8OZkqjYlr014Ots1AAAAAi/9ZN4kcsrRzs/6OUL8yjLu/xl/9bpjWNFEGwTzHtw0/Q8X+3O1NiJmLCZdOHH26GSElgtn1aZFqegnwvWHBng==
+ AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAACAAAAAAAQZgAAAAEAACAAAAD2n8v162jS4usYQHHgTQpKiRrTte/8ME/zYYKLxZUsEwAAAAAOgAAAAAIAACAAAAAm/Yj5ab39arKSQVVLwUSWXzP1QJjuIi7+HwxO6ZU7fJAAAACMTeNcKPb6Gi/JogRDslqyaCkD66WFeN1Cq9E6QSeooteLQt2PJDDg1zmnVU/wkZCf1a/bqq4uyweFvmuSpRW8JpcqJDcFSG0BiKUNmY8zmp70tOczxLG/16T2tOgDglvdrwJLTJDXxXWCLcTi+q/7FtrMkzmRjs/6xUboH6CztpldpvXBqhvjnDHU4PC8PWZAAAAAgXV+v+NkuKyQDpDve2Kxhqu6jWbSNJ2JJZcGQ/MKekU4Iycgra4AFLzBzrrkqFSH2ylNtd4u2fbTGYcBhJ/wsg==
1
@@ -42,10 +42,10 @@
SpravatoAuditImport
1
0
- 66
+ 82
- {210EF0DC-4CA9-47F1-9622-033CF9A901AB}
+ {14915F2A-D0D6-419E-A990-87951680C062}
8
@@ -62,7 +62,7 @@
0
0
0
- Admin vs Dispensed SMC*.xlsx
+ Admin Vs Dispensed SMC20260104-0110.xlsx
18
@@ -90,7 +90,7 @@
0
0
0
- \\retreathealthcare.org\network\Data\PHRMCY\Pharmacy Metrics\2026 Metrics\2026 Spravato Audit
+ \\retreathealthcare.org\network\Data\PHRMCY\Pharmacy Metrics
18