diff --git a/clock/.vs/MWS1/v16/.suo b/clock/.vs/MWS1/v16/.suo
new file mode 100644
index 00000000..6faad716
Binary files /dev/null and b/clock/.vs/MWS1/v16/.suo differ
diff --git a/clock/.vsconfig b/clock/.vsconfig
new file mode 100644
index 00000000..1586a483
--- /dev/null
+++ b/clock/.vsconfig
@@ -0,0 +1,6 @@
+{
+ "version": "1.0",
+ "components": [
+ "Microsoft.VisualStudio.Workload.ManagedGame"
+ ]
+}
diff --git a/clock/Assembly-CSharp.csproj b/clock/Assembly-CSharp.csproj
new file mode 100644
index 00000000..fb41003a
--- /dev/null
+++ b/clock/Assembly-CSharp.csproj
@@ -0,0 +1,634 @@
+
+
+
+ latest
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+
+ {85A82546-F5BD-2A08-CD58-6429C0B1BEE9}
+ Library
+ Properties
+ Assembly-CSharp
+ v4.7.1
+ 512
+ .
+
+
+ true
+ full
+ false
+ Temp\bin\Debug\
+ DEBUG;TRACE;UNITY_2019_4_21;UNITY_2019_4;UNITY_2019;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;INCLUDE_DYNAMIC_GI;ENABLE_MONO_BDWGC;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;PLATFORM_STANDALONE;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_STANDARD_2_0;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_VSTU;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER
+ prompt
+ 4
+ 0169
+ False
+
+
+ pdbonly
+ true
+ Temp\bin\Release\
+ prompt
+ 4
+ 0169
+ False
+
+
+ true
+ true
+ false
+ false
+ false
+
+
+ {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Unity/VSTU
+ 4.9.1.0
+ Game:1
+ StandaloneWindows:5
+ 2019.4.21f1
+
+
+
+
+
+
+ C:\Program Files\Unity\Hub\Editor\2019.4.21f1\Editor\Data\Managed/UnityEngine/UnityEngine.dll
+
+
+ C:\Program Files\Unity\Hub\Editor\2019.4.21f1\Editor\Data\Managed/UnityEditor.dll
+
+
+
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.AndroidJNIModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.DSPGraphModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputLegacyModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.SubsystemsModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityTestProtocolModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.VFXModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/Managed/UnityEditor.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/ref/2.0.0/netstandard.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/Microsoft.Win32.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.AppContext.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.Concurrent.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.NonGeneric.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.Specialized.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.EventBasedAsync.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.TypeConverter.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Console.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Data.Common.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Contracts.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Debug.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.FileVersionInfo.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Process.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.StackTrace.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.TextWriterTraceListener.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Tools.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.TraceSource.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Tracing.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Drawing.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Dynamic.Runtime.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Globalization.Calendars.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Globalization.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Globalization.Extensions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.Compression.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.Compression.ZipFile.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.DriveInfo.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.Watcher.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.IsolatedStorage.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.MemoryMappedFiles.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.Pipes.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.UnmanagedMemoryStream.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.Expressions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.Parallel.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.Queryable.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Http.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.NameResolution.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.NetworkInformation.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Ping.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Requests.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Security.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Sockets.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.WebHeaderCollection.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.WebSockets.Client.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.WebSockets.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ObjectModel.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Reflection.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Reflection.Extensions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Reflection.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Resources.Reader.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Resources.ResourceManager.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Resources.Writer.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.CompilerServices.VisualC.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Extensions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Handles.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.InteropServices.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.InteropServices.RuntimeInformation.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Numerics.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Formatters.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Json.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Xml.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Claims.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Algorithms.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Csp.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Encoding.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Primitives.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.X509Certificates.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Principal.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.SecureString.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Text.Encoding.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Text.Encoding.Extensions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Text.RegularExpressions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Overlapped.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Tasks.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Tasks.Parallel.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Thread.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.ThreadPool.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Timer.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ValueTuple.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.ReaderWriter.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XDocument.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XmlDocument.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XmlSerializer.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XPath.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XPath.XDocument.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/Extensions/2.0.0/System.Numerics.Vectors.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/Extensions/2.0.0/System.Runtime.InteropServices.WindowsRuntime.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/mscorlib.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.ComponentModel.Composition.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Core.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Data.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Drawing.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.IO.Compression.FileSystem.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Net.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Numerics.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Runtime.Serialization.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.ServiceModel.Web.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Transactions.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Web.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Windows.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.Linq.dll
+
+
+ C:/Program Files/Unity/Hub/Editor/2019.4.21f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.Serialization.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.Timeline.Editor.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.VSCode.Editor.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/UnityEngine.UI.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.Timeline.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.Rider.Editor.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/Unity.TextMeshPro.dll
+
+
+ E:/Unity/MWS1/Library/ScriptAssemblies/UnityEditor.UI.dll
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clock/Assets/Grass-025.jpg b/clock/Assets/Grass-025.jpg
new file mode 100644
index 00000000..537a065d
Binary files /dev/null and b/clock/Assets/Grass-025.jpg differ
diff --git a/clock/Assets/Grass-025.jpg.meta b/clock/Assets/Grass-025.jpg.meta
new file mode 100644
index 00000000..321f1ebb
--- /dev/null
+++ b/clock/Assets/Grass-025.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 5eb4e2d293941bb41b5ae5a74267ce68
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG.meta b/clock/Assets/Gravel020_1K-JPG.meta
new file mode 100644
index 00000000..901d6612
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bfe5f31b84d982747adf4b14f5febd02
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..ad0097a0
Binary files /dev/null and b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..96465de0
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: e63d497dba60bb349bb36bce5c0de052
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Color.jpg b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Color.jpg
new file mode 100644
index 00000000..618b0892
Binary files /dev/null and b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Color.jpg differ
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Color.jpg.meta b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Color.jpg.meta
new file mode 100644
index 00000000..3b77d806
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 385410defe6a7884a9c362955051be5c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg
new file mode 100644
index 00000000..57f6fa7a
Binary files /dev/null and b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg differ
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg.meta b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..b1974e41
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 1382d98a997e2104cae031abf90c60dd
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg
new file mode 100644
index 00000000..e5ba8a14
Binary files /dev/null and b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg differ
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg.meta b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg.meta
new file mode 100644
index 00000000..a4e66c8f
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 8e03c6d0514d7fa47985c4004002fd38
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg
new file mode 100644
index 00000000..c8308577
Binary files /dev/null and b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg differ
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg.meta b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg.meta
new file mode 100644
index 00000000..8c9dd744
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 8348a0f81d4ebe84d973487c275905d7
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg
new file mode 100644
index 00000000..dcbaf573
Binary files /dev/null and b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg differ
diff --git a/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg.meta b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..d15749c6
--- /dev/null
+++ b/clock/Assets/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 5cd3b61135546454bbf599a70043f564
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground019_1K-JPG.meta b/clock/Assets/Ground019_1K-JPG.meta
new file mode 100644
index 00000000..2fdd8f81
--- /dev/null
+++ b/clock/Assets/Ground019_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 42fba0b084978d14a8f42aa26a251647
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg b/clock/Assets/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..b5bdadbb
Binary files /dev/null and b/clock/Assets/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..acb4f8ab
--- /dev/null
+++ b/clock/Assets/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: f6ffd4c93fd006342bb9319e28768ec0
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Color.jpg b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Color.jpg
new file mode 100644
index 00000000..a6ef317d
Binary files /dev/null and b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Color.jpg differ
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Color.jpg.meta b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Color.jpg.meta
new file mode 100644
index 00000000..0ca5dff0
--- /dev/null
+++ b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 0a6e5217152fd704d944f7b9f2c6136f
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Displacement.jpg b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Displacement.jpg
new file mode 100644
index 00000000..4f5c8bf5
Binary files /dev/null and b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Displacement.jpg differ
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Displacement.jpg.meta b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..c559d804
--- /dev/null
+++ b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: c4aa2f21f60369945b2cb2dfa5163341
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Normal.jpg b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Normal.jpg
new file mode 100644
index 00000000..9f3c872d
Binary files /dev/null and b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Normal.jpg differ
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Normal.jpg.meta b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Normal.jpg.meta
new file mode 100644
index 00000000..903f326b
--- /dev/null
+++ b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 79905d9fc4b1039459242aef73fa6ea1
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Roughness.jpg b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Roughness.jpg
new file mode 100644
index 00000000..b04b4f69
Binary files /dev/null and b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Roughness.jpg differ
diff --git a/clock/Assets/Ground019_1K-JPG/Ground019_1K_Roughness.jpg.meta b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..a80fae1e
--- /dev/null
+++ b/clock/Assets/Ground019_1K-JPG/Ground019_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: c627cf51ced11cf479037db89e1027e6
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground037_1K-JPG.meta b/clock/Assets/Ground037_1K-JPG.meta
new file mode 100644
index 00000000..4db79635
--- /dev/null
+++ b/clock/Assets/Ground037_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2e3d7e34fc78ff748882a64c510be0c3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg b/clock/Assets/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..9f36e2ea
Binary files /dev/null and b/clock/Assets/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..ce801b36
--- /dev/null
+++ b/clock/Assets/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 68596bee8dba9354c931f83598dc7505
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Color.jpg b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Color.jpg
new file mode 100644
index 00000000..b388450a
Binary files /dev/null and b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Color.jpg differ
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Color.jpg.meta b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Color.jpg.meta
new file mode 100644
index 00000000..4d9881aa
--- /dev/null
+++ b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: cb24306a45513d04685acfb4b7eca86c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Displacement.jpg b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Displacement.jpg
new file mode 100644
index 00000000..312346ac
Binary files /dev/null and b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Displacement.jpg differ
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Displacement.jpg.meta b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..ca09d723
--- /dev/null
+++ b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 44dae08f01549a8429588dbb118d661d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Normal.jpg b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Normal.jpg
new file mode 100644
index 00000000..7f694af6
Binary files /dev/null and b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Normal.jpg differ
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Normal.jpg.meta b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Normal.jpg.meta
new file mode 100644
index 00000000..12c981ea
--- /dev/null
+++ b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 7f99924108c57b840af3bdba354cf886
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Roughness.jpg b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Roughness.jpg
new file mode 100644
index 00000000..8f81c4b8
Binary files /dev/null and b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Roughness.jpg differ
diff --git a/clock/Assets/Ground037_1K-JPG/Ground037_1K_Roughness.jpg.meta b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..a93d6eba
--- /dev/null
+++ b/clock/Assets/Ground037_1K-JPG/Ground037_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 0cdb3e943fd003b48b52b01f27d83ead
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground042_1K-JPG.meta b/clock/Assets/Ground042_1K-JPG.meta
new file mode 100644
index 00000000..1eca934a
--- /dev/null
+++ b/clock/Assets/Ground042_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e4e4f291b90de7e4bb058d26d8eddafb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg b/clock/Assets/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..ea9b0d3f
Binary files /dev/null and b/clock/Assets/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..a3aee056
--- /dev/null
+++ b/clock/Assets/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: cb243723315bd9d4283ca5d7afaa511a
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Color.jpg b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Color.jpg
new file mode 100644
index 00000000..b2b2a4b1
Binary files /dev/null and b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Color.jpg differ
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Color.jpg.meta b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Color.jpg.meta
new file mode 100644
index 00000000..70ae9bc0
--- /dev/null
+++ b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 5788d3df9313fd0419fa1533977c2730
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Displacement.jpg b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Displacement.jpg
new file mode 100644
index 00000000..fe75d595
Binary files /dev/null and b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Displacement.jpg differ
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Displacement.jpg.meta b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..d378d220
--- /dev/null
+++ b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 3d49a7d3a0767ec46b68c7b678887640
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Normal.jpg b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Normal.jpg
new file mode 100644
index 00000000..52e616fb
Binary files /dev/null and b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Normal.jpg differ
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Normal.jpg.meta b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Normal.jpg.meta
new file mode 100644
index 00000000..5995d948
--- /dev/null
+++ b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 95e655b4bd2613f4388d81dfa5045e4b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Roughness.jpg b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Roughness.jpg
new file mode 100644
index 00000000..afdcd7ce
Binary files /dev/null and b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Roughness.jpg differ
diff --git a/clock/Assets/Ground042_1K-JPG/Ground042_1K_Roughness.jpg.meta b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..9b0675cc
--- /dev/null
+++ b/clock/Assets/Ground042_1K-JPG/Ground042_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: ba44ffebb004fee46a9c370ca7881d21
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Materiały.meta b/clock/Assets/Materiały.meta
new file mode 100644
index 00000000..f3bc5c30
--- /dev/null
+++ b/clock/Assets/Materiały.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 75962aae05bc9454cab97fd6c9c4f4e5
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Materiały/Clock.mat b/clock/Assets/Materiały/Clock.mat
new file mode 100644
index 00000000..7dc774e6
--- /dev/null
+++ b/clock/Assets/Materiały/Clock.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Clock
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHAPREMULTIPLY_ON
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 3ca5e46c6deb4fd4e8fb4c6750dd0707, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 10
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 3
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 0
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/clock/Assets/Materiały/Clock.mat.meta b/clock/Assets/Materiały/Clock.mat.meta
new file mode 100644
index 00000000..616de2df
--- /dev/null
+++ b/clock/Assets/Materiały/Clock.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8daa59306c7c2cf458f0a11f0cf47fe4
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Materiały/ClockHand.mat b/clock/Assets/Materiały/ClockHand.mat
new file mode 100644
index 00000000..85f88e7b
--- /dev/null
+++ b/clock/Assets/Materiały/ClockHand.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: ClockHand
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 1
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 0.71337444, b: 0.5707547, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/clock/Assets/Materiały/ClockHand.mat.meta b/clock/Assets/Materiały/ClockHand.mat.meta
new file mode 100644
index 00000000..6aed0d9d
--- /dev/null
+++ b/clock/Assets/Materiały/ClockHand.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 693fcfd2740164b418001f680fdae925
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Moss002_1K-JPG.meta b/clock/Assets/Moss002_1K-JPG.meta
new file mode 100644
index 00000000..1a765133
--- /dev/null
+++ b/clock/Assets/Moss002_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6e499639807cbed478107ac44f4a1d98
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg b/clock/Assets/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..6e5a5336
Binary files /dev/null and b/clock/Assets/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..aab20e02
--- /dev/null
+++ b/clock/Assets/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: de32b1f0e9e836f449ca51819fe4df02
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Color.jpg b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Color.jpg
new file mode 100644
index 00000000..b98da299
Binary files /dev/null and b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Color.jpg differ
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Color.jpg.meta b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Color.jpg.meta
new file mode 100644
index 00000000..711fd495
--- /dev/null
+++ b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 5583043a4464bed48af87c082561af13
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Displacement.jpg b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Displacement.jpg
new file mode 100644
index 00000000..1269fd10
Binary files /dev/null and b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Displacement.jpg differ
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Displacement.jpg.meta b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..d598a41a
--- /dev/null
+++ b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 2bf856cacd17539468cff3d08c3b4648
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Normal.jpg b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Normal.jpg
new file mode 100644
index 00000000..c3ac0262
Binary files /dev/null and b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Normal.jpg differ
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Normal.jpg.meta b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Normal.jpg.meta
new file mode 100644
index 00000000..b348c2c9
--- /dev/null
+++ b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: a3634f4e7a9490d4e8855d726f8da103
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Roughness.jpg b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Roughness.jpg
new file mode 100644
index 00000000..7b96e41f
Binary files /dev/null and b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Roughness.jpg differ
diff --git a/clock/Assets/Moss002_1K-JPG/Moss002_1K_Roughness.jpg.meta b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..29d5b602
--- /dev/null
+++ b/clock/Assets/Moss002_1K-JPG/Moss002_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 711002746a59a934c83ea34af32c52da
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Scenes.meta b/clock/Assets/Scenes.meta
new file mode 100644
index 00000000..8a18a7b9
--- /dev/null
+++ b/clock/Assets/Scenes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b9a6f28300d9008488a8af5bcc629379
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Scenes/SampleScene.unity b/clock/Assets/Scenes/SampleScene.unity
new file mode 100644
index 00000000..b906aeea
--- /dev/null
+++ b/clock/Assets/Scenes/SampleScene.unity
@@ -0,0 +1,500 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 705507994}
+ m_IndirectSpecularColor: {r: 0.446679, g: 0.49653035, b: 0.57487845, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 11
+ m_GIWorkflowMode: 1
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 0
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &697477823
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 697477828}
+ - component: {fileID: 697477827}
+ - component: {fileID: 697477826}
+ - component: {fileID: 697477825}
+ - component: {fileID: 697477824}
+ m_Layer: 0
+ m_Name: Clock
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!64 &697477824
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 697477823}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!114 &697477825
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 697477823}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 71b896f57bd042145adf17b244090e61, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ clockHand: {fileID: 1717400434}
+--- !u!23 &697477826
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 697477823}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8daa59306c7c2cf458f0a11f0cf47fe4, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &697477827
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 697477823}
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &697477828
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 697477823}
+ m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 5, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!1 &705507993
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 705507995}
+ - component: {fileID: 705507994}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &705507994
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 1
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &705507995
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_LocalRotation: {x: 0.4141571, y: -0.46792892, z: 0.13430667, w: 0.7690762}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 49.705, y: -70.203, z: -16.253}
+--- !u!1 &963194225
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 963194228}
+ - component: {fileID: 963194227}
+ - component: {fileID: 963194226}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &963194226
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+--- !u!20 &963194227
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &963194228
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: 0, y: 5, z: 10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!1 &1717400434
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1717400438}
+ - component: {fileID: 1717400437}
+ - component: {fileID: 1717400436}
+ - component: {fileID: 1717400435}
+ m_Layer: 0
+ m_Name: ClockHand
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!136 &1717400435
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1717400434}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!23 &1717400436
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1717400434}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 693fcfd2740164b418001f680fdae925, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1717400437
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1717400434}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1717400438
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1717400434}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -4.4597077, y: 3.3780527, z: 1.0700607}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/clock/Assets/Scenes/SampleScene.unity.meta b/clock/Assets/Scenes/SampleScene.unity.meta
new file mode 100644
index 00000000..952bd1e9
--- /dev/null
+++ b/clock/Assets/Scenes/SampleScene.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9fc0d4010bbf28b4594072e72b8655ab
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Skrypty.meta b/clock/Assets/Skrypty.meta
new file mode 100644
index 00000000..e7fe5859
--- /dev/null
+++ b/clock/Assets/Skrypty.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a433ee0249dfd9a4e992214bfab3e761
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Skrypty/Clock.cs b/clock/Assets/Skrypty/Clock.cs
new file mode 100644
index 00000000..fcf47ee9
--- /dev/null
+++ b/clock/Assets/Skrypty/Clock.cs
@@ -0,0 +1,51 @@
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+
+public class Clock : MonoBehaviour
+{
+ public GameObject clockHand;
+ void Start()
+ {
+
+ }
+
+ void Update()
+ {
+ var dateTimeNow = DateTime.Now;
+ //float swHour = 0.0f;
+ //float swMinute = 0.0f;
+ //float swSecond = 0.0f;
+ // Global Time:
+ float hour = dateTimeNow.Hour;
+ float minute = dateTimeNow.Minute;
+ float second = dateTimeNow.Second;
+ Debug.Log("asdd");
+ Debug.Log($"Time: {hour}:{minute}:{second}");
+ // Ustaw pozycje, rozmiar i obrót wskazówek zegara z wykorzystaniem przekształceń macierzowych:
+ // (Matrix4x4.Translate, Matrix4x4.Scale, Matrix4x4.Rotate) dwa pierwsze przyjmują Vector3, a obroty przyjmują Quaternion.Euler( X, Y, Z) (już bez new, bo to funkcja)
+
+ var transformationHsw = Matrix4x4.Translate(new Vector3(0, 0, hour));
+ var transformationMsw = Matrix4x4.Translate(new Vector3(0, 0, minute));
+ var transformationSsw = Matrix4x4.Translate(new Vector3(0, 0, second));
+
+ var transformationH = Matrix4x4.Translate(new Vector3(0, 5.0f, 0.0f)) * Matrix4x4.Rotate(Quaternion.Euler(0.0f, 0.0f, hour * 30.0f)) * Matrix4x4.Scale(new Vector3(0.4f, 1.5f, 0.4f)) * Matrix4x4.Translate(new Vector3(0, 1.0f, 0.0f));
+ var transformationM = Matrix4x4.Translate(new Vector3(0, 5.0f, 0.0f)) * Matrix4x4.Rotate(Quaternion.Euler(0.0f, 0.0f, minute * 6.0f)) * Matrix4x4.Scale(new Vector3(0.3f, 2.5f, 0.3f)) * Matrix4x4.Translate(new Vector3(0, 1.0f, 0.0f));
+ var transformationS = Matrix4x4.Translate(new Vector3(0, 5.0f, 0.0f)) * Matrix4x4.Rotate(Quaternion.Euler(0.0f, 0.0f, second * 6.0f)) * Matrix4x4.Scale(new Vector3(0.1f, 3.0f, 0.1f)) * Matrix4x4.Translate(new Vector3(0, 1.0f, 0.0f));
+
+ // Create game objects instances
+
+ Graphics.DrawMeshInstanced(
+ clockHand.GetComponent().mesh,
+ 0,
+ clockHand.GetComponent().material,
+ new Matrix4x4[3]
+ {
+ transformationH,
+ transformationM,
+ transformationS
+ });
+
+ }
+}
diff --git a/clock/Assets/Skrypty/Clock.cs.meta b/clock/Assets/Skrypty/Clock.cs.meta
new file mode 100644
index 00000000..29f7254e
--- /dev/null
+++ b/clock/Assets/Skrypty/Clock.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71b896f57bd042145adf17b244090e61
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury.meta b/clock/Assets/Tekstury.meta
new file mode 100644
index 00000000..69b24050
--- /dev/null
+++ b/clock/Assets/Tekstury.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 774ea2af696570d42ae3e67088149d45
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Grass-025.jpg b/clock/Assets/Tekstury/Grass-025.jpg
new file mode 100644
index 00000000..537a065d
Binary files /dev/null and b/clock/Assets/Tekstury/Grass-025.jpg differ
diff --git a/clock/Assets/Tekstury/Grass-025.jpg.meta b/clock/Assets/Tekstury/Grass-025.jpg.meta
new file mode 100644
index 00000000..42ca2785
--- /dev/null
+++ b/clock/Assets/Tekstury/Grass-025.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 3bdcb2a7bb5849c43a17734c33b33d4b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG.meta
new file mode 100644
index 00000000..046cd597
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cdf649defa67e034d909c0f30521c7a3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..ad0097a0
Binary files /dev/null and b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..2c9af9c0
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: cc9128b588408c741a756068cea2238a
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Color.jpg b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Color.jpg
new file mode 100644
index 00000000..618b0892
Binary files /dev/null and b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Color.jpg differ
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Color.jpg.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Color.jpg.meta
new file mode 100644
index 00000000..5775bc86
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 836350eda01115148a8da8d814ca3755
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg
new file mode 100644
index 00000000..57f6fa7a
Binary files /dev/null and b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg differ
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..c6e30485
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: f05c62086f21245419832cacac798d71
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg
new file mode 100644
index 00000000..e5ba8a14
Binary files /dev/null and b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg differ
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg.meta
new file mode 100644
index 00000000..5d184860
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_IdMask.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 207a426e1d0a88847a478557f9dd3cf7
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg
new file mode 100644
index 00000000..c8308577
Binary files /dev/null and b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg differ
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg.meta
new file mode 100644
index 00000000..532781b5
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: a75db497ba5c9874bbbd9e016eabb144
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg
new file mode 100644
index 00000000..dcbaf573
Binary files /dev/null and b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg differ
diff --git a/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg.meta b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..cd257b13
--- /dev/null
+++ b/clock/Assets/Tekstury/Gravel020_1K-JPG/Gravel020_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 41e95b74628a5b040bd4a8414581e9b4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG.meta b/clock/Assets/Tekstury/Ground019_1K-JPG.meta
new file mode 100644
index 00000000..1bb35805
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground019_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7d241c346a9eb764394842b82f9d15f4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..b5bdadbb
Binary files /dev/null and b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..dd70c871
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 92e394b0c4b33034989a79edfd7ca84c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Color.jpg b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Color.jpg
new file mode 100644
index 00000000..a6ef317d
Binary files /dev/null and b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Color.jpg differ
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Color.jpg.meta b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Color.jpg.meta
new file mode 100644
index 00000000..9ca1b600
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: d4140fc1cfccb6d4fb1a79da36bffe9a
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Displacement.jpg b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Displacement.jpg
new file mode 100644
index 00000000..4f5c8bf5
Binary files /dev/null and b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Displacement.jpg differ
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Displacement.jpg.meta b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..a75c282c
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 3291a962c7df63f47a08db8c82e9aea8
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Normal.jpg b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Normal.jpg
new file mode 100644
index 00000000..9f3c872d
Binary files /dev/null and b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Normal.jpg differ
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Normal.jpg.meta b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Normal.jpg.meta
new file mode 100644
index 00000000..239c2bf7
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 197ab9d38bb2d8f4eab71f667cec3223
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Roughness.jpg b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Roughness.jpg
new file mode 100644
index 00000000..b04b4f69
Binary files /dev/null and b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Roughness.jpg differ
diff --git a/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Roughness.jpg.meta b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..e27d32b8
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground019_1K-JPG/Ground019_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 6ac73fda012d1cf4abf7ceb9f49e0a34
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG.meta b/clock/Assets/Tekstury/Ground037_1K-JPG.meta
new file mode 100644
index 00000000..cae97d5b
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground037_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3cd678bf032452545b9077ef87171d54
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..9f36e2ea
Binary files /dev/null and b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..868876b2
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: d83663a4217c1944fa6e819e3fcf82c8
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Color.jpg b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Color.jpg
new file mode 100644
index 00000000..b388450a
Binary files /dev/null and b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Color.jpg differ
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Color.jpg.meta b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Color.jpg.meta
new file mode 100644
index 00000000..d3d8eff1
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 879a32b21d6ccf04f8b246ab12fc6c39
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Displacement.jpg b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Displacement.jpg
new file mode 100644
index 00000000..312346ac
Binary files /dev/null and b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Displacement.jpg differ
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Displacement.jpg.meta b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..3ace6d84
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: c7f52bf668b9e7b42a47a5aae815751b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Normal.jpg b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Normal.jpg
new file mode 100644
index 00000000..7f694af6
Binary files /dev/null and b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Normal.jpg differ
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Normal.jpg.meta b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Normal.jpg.meta
new file mode 100644
index 00000000..65b7d906
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 920a9501314f3484c88352517e65b57f
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Roughness.jpg b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Roughness.jpg
new file mode 100644
index 00000000..8f81c4b8
Binary files /dev/null and b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Roughness.jpg differ
diff --git a/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Roughness.jpg.meta b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..74c8471b
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground037_1K-JPG/Ground037_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: a460e6a2b8241e64a8d88956f8e31983
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG.meta b/clock/Assets/Tekstury/Ground042_1K-JPG.meta
new file mode 100644
index 00000000..6e7828db
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground042_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8b447287ce51be94aac7ac4efe0a9395
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..ea9b0d3f
Binary files /dev/null and b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..88abf0f4
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 6dc941e43638e834981e83a09ad0dbf4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Color.jpg b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Color.jpg
new file mode 100644
index 00000000..b2b2a4b1
Binary files /dev/null and b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Color.jpg differ
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Color.jpg.meta b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Color.jpg.meta
new file mode 100644
index 00000000..5f5ce6e4
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 2458efccc711cf24bb51a7ac5569e5d5
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Displacement.jpg b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Displacement.jpg
new file mode 100644
index 00000000..fe75d595
Binary files /dev/null and b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Displacement.jpg differ
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Displacement.jpg.meta b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..82c4f066
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: bf4dcf59411721943b98c8dd952e7d74
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Normal.jpg b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Normal.jpg
new file mode 100644
index 00000000..52e616fb
Binary files /dev/null and b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Normal.jpg differ
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Normal.jpg.meta b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Normal.jpg.meta
new file mode 100644
index 00000000..fa5bc9c1
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: fb1769244d2159647abab30943ae635c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Roughness.jpg b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Roughness.jpg
new file mode 100644
index 00000000..afdcd7ce
Binary files /dev/null and b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Roughness.jpg differ
diff --git a/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Roughness.jpg.meta b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..a59fdcff
--- /dev/null
+++ b/clock/Assets/Tekstury/Ground042_1K-JPG/Ground042_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: ae8d12dbd0e3dc74f805cfd287a1e8f1
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG.meta b/clock/Assets/Tekstury/Moss002_1K-JPG.meta
new file mode 100644
index 00000000..3bfe3f6e
--- /dev/null
+++ b/clock/Assets/Tekstury/Moss002_1K-JPG.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 40298a9f1aa4646408d9bcc9ca0bd8be
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg
new file mode 100644
index 00000000..6e5a5336
Binary files /dev/null and b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg differ
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg.meta b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg.meta
new file mode 100644
index 00000000..70a5d046
--- /dev/null
+++ b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_AmbientOcclusion.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 1cf9f21c53021a9478dca56db0a08447
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Color.jpg b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Color.jpg
new file mode 100644
index 00000000..b98da299
Binary files /dev/null and b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Color.jpg differ
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Color.jpg.meta b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Color.jpg.meta
new file mode 100644
index 00000000..a67d74d3
--- /dev/null
+++ b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Color.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 78a39aedbbb90eb45bebd479e2d1cea8
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Displacement.jpg b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Displacement.jpg
new file mode 100644
index 00000000..1269fd10
Binary files /dev/null and b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Displacement.jpg differ
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Displacement.jpg.meta b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Displacement.jpg.meta
new file mode 100644
index 00000000..e5f30f1a
--- /dev/null
+++ b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Displacement.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: a48abd8fecfe78f498cc2fc0edc11fc8
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Normal.jpg b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Normal.jpg
new file mode 100644
index 00000000..c3ac0262
Binary files /dev/null and b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Normal.jpg differ
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Normal.jpg.meta b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Normal.jpg.meta
new file mode 100644
index 00000000..02e68006
--- /dev/null
+++ b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Normal.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: fe2e4f3623c7e97408221aade4885bd5
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Roughness.jpg b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Roughness.jpg
new file mode 100644
index 00000000..7b96e41f
Binary files /dev/null and b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Roughness.jpg differ
diff --git a/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Roughness.jpg.meta b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Roughness.jpg.meta
new file mode 100644
index 00000000..02e9f6b4
--- /dev/null
+++ b/clock/Assets/Tekstury/Moss002_1K-JPG/Moss002_1K_Roughness.jpg.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: e8ada7f2ace46384691394187c2a9683
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/Tekstury/clock.png b/clock/Assets/Tekstury/clock.png
new file mode 100644
index 00000000..a9924110
Binary files /dev/null and b/clock/Assets/Tekstury/clock.png differ
diff --git a/clock/Assets/Tekstury/clock.png.meta b/clock/Assets/Tekstury/clock.png.meta
new file mode 100644
index 00000000..99d37297
--- /dev/null
+++ b/clock/Assets/Tekstury/clock.png.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: f6b6e6f9599dcc34caa3a08641d0cac0
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Assets/clock.png b/clock/Assets/clock.png
new file mode 100644
index 00000000..a9924110
Binary files /dev/null and b/clock/Assets/clock.png differ
diff --git a/clock/Assets/clock.png.meta b/clock/Assets/clock.png.meta
new file mode 100644
index 00000000..6550d52a
--- /dev/null
+++ b/clock/Assets/clock.png.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 3ca5e46c6deb4fd4e8fb4c6750dd0707
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/APIUpdater/project-dependencies.graph b/clock/Library/APIUpdater/project-dependencies.graph
new file mode 100644
index 00000000..8620e66e
Binary files /dev/null and b/clock/Library/APIUpdater/project-dependencies.graph differ
diff --git a/clock/Library/AnnotationManager b/clock/Library/AnnotationManager
new file mode 100644
index 00000000..eab6d0eb
Binary files /dev/null and b/clock/Library/AnnotationManager differ
diff --git a/clock/Library/ArtifactDB b/clock/Library/ArtifactDB
new file mode 100644
index 00000000..2f0a0b1c
Binary files /dev/null and b/clock/Library/ArtifactDB differ
diff --git a/clock/Library/ArtifactDB-lock b/clock/Library/ArtifactDB-lock
new file mode 100644
index 00000000..b263fcf0
Binary files /dev/null and b/clock/Library/ArtifactDB-lock differ
diff --git a/clock/Library/Artifacts/00/002429faa25f6e0ae8a037940872cbcc b/clock/Library/Artifacts/00/002429faa25f6e0ae8a037940872cbcc
new file mode 100644
index 00000000..b7e9b4c1
Binary files /dev/null and b/clock/Library/Artifacts/00/002429faa25f6e0ae8a037940872cbcc differ
diff --git a/clock/Library/Artifacts/00/0046427ee63fec95886e68c0482b3a00 b/clock/Library/Artifacts/00/0046427ee63fec95886e68c0482b3a00
new file mode 100644
index 00000000..35988e4d
Binary files /dev/null and b/clock/Library/Artifacts/00/0046427ee63fec95886e68c0482b3a00 differ
diff --git a/clock/Library/Artifacts/00/0048f492f69247d0500f121b97358a9b b/clock/Library/Artifacts/00/0048f492f69247d0500f121b97358a9b
new file mode 100644
index 00000000..8b9f706e
Binary files /dev/null and b/clock/Library/Artifacts/00/0048f492f69247d0500f121b97358a9b differ
diff --git a/clock/Library/Artifacts/01/01022bdd6e696f35ada9fb1f4eace85a b/clock/Library/Artifacts/01/01022bdd6e696f35ada9fb1f4eace85a
new file mode 100644
index 00000000..166ead4f
Binary files /dev/null and b/clock/Library/Artifacts/01/01022bdd6e696f35ada9fb1f4eace85a differ
diff --git a/clock/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f b/clock/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f
new file mode 100644
index 00000000..b659762f
Binary files /dev/null and b/clock/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f differ
diff --git a/clock/Library/Artifacts/01/01473cd7b08f7dc2a1d7e792f6df9da4 b/clock/Library/Artifacts/01/01473cd7b08f7dc2a1d7e792f6df9da4
new file mode 100644
index 00000000..056e31b8
Binary files /dev/null and b/clock/Library/Artifacts/01/01473cd7b08f7dc2a1d7e792f6df9da4 differ
diff --git a/clock/Library/Artifacts/01/014d35e93dbde4cbe827deb2534e43b9 b/clock/Library/Artifacts/01/014d35e93dbde4cbe827deb2534e43b9
new file mode 100644
index 00000000..5d9ea858
Binary files /dev/null and b/clock/Library/Artifacts/01/014d35e93dbde4cbe827deb2534e43b9 differ
diff --git a/clock/Library/Artifacts/01/0159ca1aebf7cfaa97fb7639eb91bf70 b/clock/Library/Artifacts/01/0159ca1aebf7cfaa97fb7639eb91bf70
new file mode 100644
index 00000000..507e444c
Binary files /dev/null and b/clock/Library/Artifacts/01/0159ca1aebf7cfaa97fb7639eb91bf70 differ
diff --git a/clock/Library/Artifacts/01/0165d44086991c21eae4e74a9c9d93f0 b/clock/Library/Artifacts/01/0165d44086991c21eae4e74a9c9d93f0
new file mode 100644
index 00000000..749ca806
Binary files /dev/null and b/clock/Library/Artifacts/01/0165d44086991c21eae4e74a9c9d93f0 differ
diff --git a/clock/Library/Artifacts/01/01a5495ec9dee8e235585a52d05a4b9f b/clock/Library/Artifacts/01/01a5495ec9dee8e235585a52d05a4b9f
new file mode 100644
index 00000000..0d4febbe
Binary files /dev/null and b/clock/Library/Artifacts/01/01a5495ec9dee8e235585a52d05a4b9f differ
diff --git a/clock/Library/Artifacts/01/01eab57cf2bef9ebced749e4cf729d05 b/clock/Library/Artifacts/01/01eab57cf2bef9ebced749e4cf729d05
new file mode 100644
index 00000000..9438bda6
Binary files /dev/null and b/clock/Library/Artifacts/01/01eab57cf2bef9ebced749e4cf729d05 differ
diff --git a/clock/Library/Artifacts/01/01f278ea03959c1866e6e6466cbf63e1 b/clock/Library/Artifacts/01/01f278ea03959c1866e6e6466cbf63e1
new file mode 100644
index 00000000..9a3abff3
Binary files /dev/null and b/clock/Library/Artifacts/01/01f278ea03959c1866e6e6466cbf63e1 differ
diff --git a/clock/Library/Artifacts/02/021297a356c9a3305121c69dca09284c b/clock/Library/Artifacts/02/021297a356c9a3305121c69dca09284c
new file mode 100644
index 00000000..2da93bd1
Binary files /dev/null and b/clock/Library/Artifacts/02/021297a356c9a3305121c69dca09284c differ
diff --git a/clock/Library/Artifacts/02/02244493cf957b1b9c6de3b7ba93d224 b/clock/Library/Artifacts/02/02244493cf957b1b9c6de3b7ba93d224
new file mode 100644
index 00000000..7d5af1f0
Binary files /dev/null and b/clock/Library/Artifacts/02/02244493cf957b1b9c6de3b7ba93d224 differ
diff --git a/clock/Library/Artifacts/02/023bf39df1fb02520d28082a7e7220ca b/clock/Library/Artifacts/02/023bf39df1fb02520d28082a7e7220ca
new file mode 100644
index 00000000..3874974d
Binary files /dev/null and b/clock/Library/Artifacts/02/023bf39df1fb02520d28082a7e7220ca differ
diff --git a/clock/Library/Artifacts/02/02477712b804de28c2cfba1db2d8491a b/clock/Library/Artifacts/02/02477712b804de28c2cfba1db2d8491a
new file mode 100644
index 00000000..5aa00407
Binary files /dev/null and b/clock/Library/Artifacts/02/02477712b804de28c2cfba1db2d8491a differ
diff --git a/clock/Library/Artifacts/02/02dac91d4a0bee27cf02402f8e6623e9 b/clock/Library/Artifacts/02/02dac91d4a0bee27cf02402f8e6623e9
new file mode 100644
index 00000000..bddc8963
Binary files /dev/null and b/clock/Library/Artifacts/02/02dac91d4a0bee27cf02402f8e6623e9 differ
diff --git a/clock/Library/Artifacts/02/02ed30ee9c09eb17d678a784bc4192b2 b/clock/Library/Artifacts/02/02ed30ee9c09eb17d678a784bc4192b2
new file mode 100644
index 00000000..0b3f57f6
Binary files /dev/null and b/clock/Library/Artifacts/02/02ed30ee9c09eb17d678a784bc4192b2 differ
diff --git a/clock/Library/Artifacts/02/02ee8ba800e0e47d8fb98ddc253d7eb1 b/clock/Library/Artifacts/02/02ee8ba800e0e47d8fb98ddc253d7eb1
new file mode 100644
index 00000000..3013f677
Binary files /dev/null and b/clock/Library/Artifacts/02/02ee8ba800e0e47d8fb98ddc253d7eb1 differ
diff --git a/clock/Library/Artifacts/03/0307aee9090f67285022d496f5669e26 b/clock/Library/Artifacts/03/0307aee9090f67285022d496f5669e26
new file mode 100644
index 00000000..4c7447c8
Binary files /dev/null and b/clock/Library/Artifacts/03/0307aee9090f67285022d496f5669e26 differ
diff --git a/clock/Library/Artifacts/03/0312611ac7d817d672f772c86abc2bf1 b/clock/Library/Artifacts/03/0312611ac7d817d672f772c86abc2bf1
new file mode 100644
index 00000000..8151c611
Binary files /dev/null and b/clock/Library/Artifacts/03/0312611ac7d817d672f772c86abc2bf1 differ
diff --git a/clock/Library/Artifacts/03/031a9f2444e9e144972b584ed34e6ce8 b/clock/Library/Artifacts/03/031a9f2444e9e144972b584ed34e6ce8
new file mode 100644
index 00000000..6862ac66
Binary files /dev/null and b/clock/Library/Artifacts/03/031a9f2444e9e144972b584ed34e6ce8 differ
diff --git a/clock/Library/Artifacts/03/035a15502159d881d3f9b50d8fa6ef44 b/clock/Library/Artifacts/03/035a15502159d881d3f9b50d8fa6ef44
new file mode 100644
index 00000000..d6d64b2e
Binary files /dev/null and b/clock/Library/Artifacts/03/035a15502159d881d3f9b50d8fa6ef44 differ
diff --git a/clock/Library/Artifacts/03/03bd960fa8c9db65d0fdf52a53b2a97c b/clock/Library/Artifacts/03/03bd960fa8c9db65d0fdf52a53b2a97c
new file mode 100644
index 00000000..e0dee90e
Binary files /dev/null and b/clock/Library/Artifacts/03/03bd960fa8c9db65d0fdf52a53b2a97c differ
diff --git a/clock/Library/Artifacts/04/04065bf5410f26c8c2fd35041a946c9d b/clock/Library/Artifacts/04/04065bf5410f26c8c2fd35041a946c9d
new file mode 100644
index 00000000..541b0b71
Binary files /dev/null and b/clock/Library/Artifacts/04/04065bf5410f26c8c2fd35041a946c9d differ
diff --git a/clock/Library/Artifacts/04/0409c57e36672222c2b5b60951040e55 b/clock/Library/Artifacts/04/0409c57e36672222c2b5b60951040e55
new file mode 100644
index 00000000..393eb048
Binary files /dev/null and b/clock/Library/Artifacts/04/0409c57e36672222c2b5b60951040e55 differ
diff --git a/clock/Library/Artifacts/04/040a51acc652e7cf81375ba7424bd3de b/clock/Library/Artifacts/04/040a51acc652e7cf81375ba7424bd3de
new file mode 100644
index 00000000..dd553984
Binary files /dev/null and b/clock/Library/Artifacts/04/040a51acc652e7cf81375ba7424bd3de differ
diff --git a/clock/Library/Artifacts/04/0431b002459387bdeb237c9db6d6f83a b/clock/Library/Artifacts/04/0431b002459387bdeb237c9db6d6f83a
new file mode 100644
index 00000000..a6ad8ff5
Binary files /dev/null and b/clock/Library/Artifacts/04/0431b002459387bdeb237c9db6d6f83a differ
diff --git a/clock/Library/Artifacts/04/0435a5e500af8b53b14ad74109726a44 b/clock/Library/Artifacts/04/0435a5e500af8b53b14ad74109726a44
new file mode 100644
index 00000000..f6e5e5af
Binary files /dev/null and b/clock/Library/Artifacts/04/0435a5e500af8b53b14ad74109726a44 differ
diff --git a/clock/Library/Artifacts/04/044f7eef35855f055537908bff7f86a8 b/clock/Library/Artifacts/04/044f7eef35855f055537908bff7f86a8
new file mode 100644
index 00000000..9c9834c4
Binary files /dev/null and b/clock/Library/Artifacts/04/044f7eef35855f055537908bff7f86a8 differ
diff --git a/clock/Library/Artifacts/04/046fe2fc1cf736bc6dd337f03a7b02ff b/clock/Library/Artifacts/04/046fe2fc1cf736bc6dd337f03a7b02ff
new file mode 100644
index 00000000..c996cae8
Binary files /dev/null and b/clock/Library/Artifacts/04/046fe2fc1cf736bc6dd337f03a7b02ff differ
diff --git a/clock/Library/Artifacts/04/0479f1ce38b8a384221064e161af95a6 b/clock/Library/Artifacts/04/0479f1ce38b8a384221064e161af95a6
new file mode 100644
index 00000000..3fb6350b
Binary files /dev/null and b/clock/Library/Artifacts/04/0479f1ce38b8a384221064e161af95a6 differ
diff --git a/clock/Library/Artifacts/04/04bcaf8a80cb7438e55e40eea69eca73 b/clock/Library/Artifacts/04/04bcaf8a80cb7438e55e40eea69eca73
new file mode 100644
index 00000000..9af801c9
Binary files /dev/null and b/clock/Library/Artifacts/04/04bcaf8a80cb7438e55e40eea69eca73 differ
diff --git a/clock/Library/Artifacts/04/04c131b91e3715d98e63517f94f15b66 b/clock/Library/Artifacts/04/04c131b91e3715d98e63517f94f15b66
new file mode 100644
index 00000000..a2bfe2ac
Binary files /dev/null and b/clock/Library/Artifacts/04/04c131b91e3715d98e63517f94f15b66 differ
diff --git a/clock/Library/Artifacts/04/04c77ed7ee399022ca87b785128e7b5b b/clock/Library/Artifacts/04/04c77ed7ee399022ca87b785128e7b5b
new file mode 100644
index 00000000..23b1b212
Binary files /dev/null and b/clock/Library/Artifacts/04/04c77ed7ee399022ca87b785128e7b5b differ
diff --git a/clock/Library/Artifacts/04/04f186880a25cf7e521ce639102be1ca b/clock/Library/Artifacts/04/04f186880a25cf7e521ce639102be1ca
new file mode 100644
index 00000000..851471ad
Binary files /dev/null and b/clock/Library/Artifacts/04/04f186880a25cf7e521ce639102be1ca differ
diff --git a/clock/Library/Artifacts/05/053c967881588f90bfb63f7f8b83885c b/clock/Library/Artifacts/05/053c967881588f90bfb63f7f8b83885c
new file mode 100644
index 00000000..29925fc3
Binary files /dev/null and b/clock/Library/Artifacts/05/053c967881588f90bfb63f7f8b83885c differ
diff --git a/clock/Library/Artifacts/05/054d80accd83879fb00b8df92f8dc849 b/clock/Library/Artifacts/05/054d80accd83879fb00b8df92f8dc849
new file mode 100644
index 00000000..3212646a
Binary files /dev/null and b/clock/Library/Artifacts/05/054d80accd83879fb00b8df92f8dc849 differ
diff --git a/clock/Library/Artifacts/05/0551961928f8fa8c2fd55dd65bbfbcad b/clock/Library/Artifacts/05/0551961928f8fa8c2fd55dd65bbfbcad
new file mode 100644
index 00000000..c49f2c71
Binary files /dev/null and b/clock/Library/Artifacts/05/0551961928f8fa8c2fd55dd65bbfbcad differ
diff --git a/clock/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 b/clock/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32
new file mode 100644
index 00000000..d1d41700
Binary files /dev/null and b/clock/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 differ
diff --git a/clock/Library/Artifacts/05/057b8db2651150085b70fac02891d722 b/clock/Library/Artifacts/05/057b8db2651150085b70fac02891d722
new file mode 100644
index 00000000..1ce146f4
Binary files /dev/null and b/clock/Library/Artifacts/05/057b8db2651150085b70fac02891d722 differ
diff --git a/clock/Library/Artifacts/06/06025a1d0aae9121284233e283cfe516 b/clock/Library/Artifacts/06/06025a1d0aae9121284233e283cfe516
new file mode 100644
index 00000000..6ae11894
Binary files /dev/null and b/clock/Library/Artifacts/06/06025a1d0aae9121284233e283cfe516 differ
diff --git a/clock/Library/Artifacts/06/062861e31e6f087e9997df13d69f827e b/clock/Library/Artifacts/06/062861e31e6f087e9997df13d69f827e
new file mode 100644
index 00000000..392db67e
Binary files /dev/null and b/clock/Library/Artifacts/06/062861e31e6f087e9997df13d69f827e differ
diff --git a/clock/Library/Artifacts/06/063e4b83740b3e888a1d4d7750b9151e b/clock/Library/Artifacts/06/063e4b83740b3e888a1d4d7750b9151e
new file mode 100644
index 00000000..dd07a951
Binary files /dev/null and b/clock/Library/Artifacts/06/063e4b83740b3e888a1d4d7750b9151e differ
diff --git a/clock/Library/Artifacts/06/06bd0e454544ec4c8b6a5d58894aeb82 b/clock/Library/Artifacts/06/06bd0e454544ec4c8b6a5d58894aeb82
new file mode 100644
index 00000000..b102ff74
Binary files /dev/null and b/clock/Library/Artifacts/06/06bd0e454544ec4c8b6a5d58894aeb82 differ
diff --git a/clock/Library/Artifacts/06/06e4132bdd6b554e6e477431b44a7f55 b/clock/Library/Artifacts/06/06e4132bdd6b554e6e477431b44a7f55
new file mode 100644
index 00000000..ad7832a0
Binary files /dev/null and b/clock/Library/Artifacts/06/06e4132bdd6b554e6e477431b44a7f55 differ
diff --git a/clock/Library/Artifacts/07/0703d9eae1663140192f2ad3bd13fbe6 b/clock/Library/Artifacts/07/0703d9eae1663140192f2ad3bd13fbe6
new file mode 100644
index 00000000..c5a60bb2
Binary files /dev/null and b/clock/Library/Artifacts/07/0703d9eae1663140192f2ad3bd13fbe6 differ
diff --git a/clock/Library/Artifacts/07/07411704abb770ce780209f3469b417d b/clock/Library/Artifacts/07/07411704abb770ce780209f3469b417d
new file mode 100644
index 00000000..55d019fc
Binary files /dev/null and b/clock/Library/Artifacts/07/07411704abb770ce780209f3469b417d differ
diff --git a/clock/Library/Artifacts/07/077490a3fcaeeb1d05c6bee5c3c26907 b/clock/Library/Artifacts/07/077490a3fcaeeb1d05c6bee5c3c26907
new file mode 100644
index 00000000..e4bbd9ce
Binary files /dev/null and b/clock/Library/Artifacts/07/077490a3fcaeeb1d05c6bee5c3c26907 differ
diff --git a/clock/Library/Artifacts/07/07bc3d6382e3f5d29d5918c5cdd5eca5 b/clock/Library/Artifacts/07/07bc3d6382e3f5d29d5918c5cdd5eca5
new file mode 100644
index 00000000..cafe706c
Binary files /dev/null and b/clock/Library/Artifacts/07/07bc3d6382e3f5d29d5918c5cdd5eca5 differ
diff --git a/clock/Library/Artifacts/07/07bdb91c953d81bfcecf524b813c45cc b/clock/Library/Artifacts/07/07bdb91c953d81bfcecf524b813c45cc
new file mode 100644
index 00000000..263a9a6d
Binary files /dev/null and b/clock/Library/Artifacts/07/07bdb91c953d81bfcecf524b813c45cc differ
diff --git a/clock/Library/Artifacts/07/07d750f8b28b3073fe4fcd0c028fd4d6 b/clock/Library/Artifacts/07/07d750f8b28b3073fe4fcd0c028fd4d6
new file mode 100644
index 00000000..2baae7f0
Binary files /dev/null and b/clock/Library/Artifacts/07/07d750f8b28b3073fe4fcd0c028fd4d6 differ
diff --git a/clock/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 b/clock/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42
new file mode 100644
index 00000000..d6a61835
Binary files /dev/null and b/clock/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 differ
diff --git a/clock/Library/Artifacts/07/07fdea8774eca38894060d220d02e4d0 b/clock/Library/Artifacts/07/07fdea8774eca38894060d220d02e4d0
new file mode 100644
index 00000000..5ceda151
Binary files /dev/null and b/clock/Library/Artifacts/07/07fdea8774eca38894060d220d02e4d0 differ
diff --git a/clock/Library/Artifacts/08/0809c87e370004cd801fc582f890c434 b/clock/Library/Artifacts/08/0809c87e370004cd801fc582f890c434
new file mode 100644
index 00000000..69428e9f
Binary files /dev/null and b/clock/Library/Artifacts/08/0809c87e370004cd801fc582f890c434 differ
diff --git a/clock/Library/Artifacts/08/0859db23d7f9b488baae37245e3a5b70 b/clock/Library/Artifacts/08/0859db23d7f9b488baae37245e3a5b70
new file mode 100644
index 00000000..4777dc2d
Binary files /dev/null and b/clock/Library/Artifacts/08/0859db23d7f9b488baae37245e3a5b70 differ
diff --git a/clock/Library/Artifacts/08/08617a080216cb26e5198a78944eab15 b/clock/Library/Artifacts/08/08617a080216cb26e5198a78944eab15
new file mode 100644
index 00000000..6c616fc6
Binary files /dev/null and b/clock/Library/Artifacts/08/08617a080216cb26e5198a78944eab15 differ
diff --git a/clock/Library/Artifacts/08/0874b5ff00b026194b3ab2ce721e35b6 b/clock/Library/Artifacts/08/0874b5ff00b026194b3ab2ce721e35b6
new file mode 100644
index 00000000..5ed27999
Binary files /dev/null and b/clock/Library/Artifacts/08/0874b5ff00b026194b3ab2ce721e35b6 differ
diff --git a/clock/Library/Artifacts/08/0896329762138c342c46bf13534baf19 b/clock/Library/Artifacts/08/0896329762138c342c46bf13534baf19
new file mode 100644
index 00000000..4e735421
Binary files /dev/null and b/clock/Library/Artifacts/08/0896329762138c342c46bf13534baf19 differ
diff --git a/clock/Library/Artifacts/08/08bbd194f584eef0b58d5230b56f19d6 b/clock/Library/Artifacts/08/08bbd194f584eef0b58d5230b56f19d6
new file mode 100644
index 00000000..4d3ae5dc
Binary files /dev/null and b/clock/Library/Artifacts/08/08bbd194f584eef0b58d5230b56f19d6 differ
diff --git a/clock/Library/Artifacts/08/08d2e70566b71280519bee30f1e74e31 b/clock/Library/Artifacts/08/08d2e70566b71280519bee30f1e74e31
new file mode 100644
index 00000000..1f2b26a7
Binary files /dev/null and b/clock/Library/Artifacts/08/08d2e70566b71280519bee30f1e74e31 differ
diff --git a/clock/Library/Artifacts/09/096a700794d26d711a27e9e6d2510254 b/clock/Library/Artifacts/09/096a700794d26d711a27e9e6d2510254
new file mode 100644
index 00000000..ba26a0fc
Binary files /dev/null and b/clock/Library/Artifacts/09/096a700794d26d711a27e9e6d2510254 differ
diff --git a/clock/Library/Artifacts/09/099e0148ba70d7c454f65c977d195d01 b/clock/Library/Artifacts/09/099e0148ba70d7c454f65c977d195d01
new file mode 100644
index 00000000..14b3b20d
Binary files /dev/null and b/clock/Library/Artifacts/09/099e0148ba70d7c454f65c977d195d01 differ
diff --git a/clock/Library/Artifacts/09/09b0674be3d8bc25ec59256f0ba140fc b/clock/Library/Artifacts/09/09b0674be3d8bc25ec59256f0ba140fc
new file mode 100644
index 00000000..3f74ef0d
Binary files /dev/null and b/clock/Library/Artifacts/09/09b0674be3d8bc25ec59256f0ba140fc differ
diff --git a/clock/Library/Artifacts/09/09e339514c8c7b700853cace5ebb3ac8 b/clock/Library/Artifacts/09/09e339514c8c7b700853cace5ebb3ac8
new file mode 100644
index 00000000..6b5be7f6
Binary files /dev/null and b/clock/Library/Artifacts/09/09e339514c8c7b700853cace5ebb3ac8 differ
diff --git a/clock/Library/Artifacts/0a/0a1a18c47f18133c20dd1dc96210f26c b/clock/Library/Artifacts/0a/0a1a18c47f18133c20dd1dc96210f26c
new file mode 100644
index 00000000..1c8ca517
Binary files /dev/null and b/clock/Library/Artifacts/0a/0a1a18c47f18133c20dd1dc96210f26c differ
diff --git a/clock/Library/Artifacts/0a/0a1bfeb2724f6d8e14ef5b59b47fd06f b/clock/Library/Artifacts/0a/0a1bfeb2724f6d8e14ef5b59b47fd06f
new file mode 100644
index 00000000..8f3eee3e
Binary files /dev/null and b/clock/Library/Artifacts/0a/0a1bfeb2724f6d8e14ef5b59b47fd06f differ
diff --git a/clock/Library/Artifacts/0a/0a660d462146d255508111ae69f369d0 b/clock/Library/Artifacts/0a/0a660d462146d255508111ae69f369d0
new file mode 100644
index 00000000..90f1d6f7
Binary files /dev/null and b/clock/Library/Artifacts/0a/0a660d462146d255508111ae69f369d0 differ
diff --git a/clock/Library/Artifacts/0a/0ad05fbced6a27614a064bf090f7f189 b/clock/Library/Artifacts/0a/0ad05fbced6a27614a064bf090f7f189
new file mode 100644
index 00000000..6dfe1697
Binary files /dev/null and b/clock/Library/Artifacts/0a/0ad05fbced6a27614a064bf090f7f189 differ
diff --git a/clock/Library/Artifacts/0a/0ad1246156042139f6eecc7f193f4ef4 b/clock/Library/Artifacts/0a/0ad1246156042139f6eecc7f193f4ef4
new file mode 100644
index 00000000..30d33f67
Binary files /dev/null and b/clock/Library/Artifacts/0a/0ad1246156042139f6eecc7f193f4ef4 differ
diff --git a/clock/Library/Artifacts/0b/0b30d88854738af1de5d2898f5fdd6d0 b/clock/Library/Artifacts/0b/0b30d88854738af1de5d2898f5fdd6d0
new file mode 100644
index 00000000..d50d651b
Binary files /dev/null and b/clock/Library/Artifacts/0b/0b30d88854738af1de5d2898f5fdd6d0 differ
diff --git a/clock/Library/Artifacts/0b/0b4927b6bcdd28477d1ed615632eec66 b/clock/Library/Artifacts/0b/0b4927b6bcdd28477d1ed615632eec66
new file mode 100644
index 00000000..ba985671
Binary files /dev/null and b/clock/Library/Artifacts/0b/0b4927b6bcdd28477d1ed615632eec66 differ
diff --git a/clock/Library/Artifacts/0b/0bc1c4b7723831baa4ff08f2d1b40239 b/clock/Library/Artifacts/0b/0bc1c4b7723831baa4ff08f2d1b40239
new file mode 100644
index 00000000..1eb22299
Binary files /dev/null and b/clock/Library/Artifacts/0b/0bc1c4b7723831baa4ff08f2d1b40239 differ
diff --git a/clock/Library/Artifacts/0b/0bdcfd9c0b0458a2f7804fd1e6178d07 b/clock/Library/Artifacts/0b/0bdcfd9c0b0458a2f7804fd1e6178d07
new file mode 100644
index 00000000..60fab339
Binary files /dev/null and b/clock/Library/Artifacts/0b/0bdcfd9c0b0458a2f7804fd1e6178d07 differ
diff --git a/clock/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 b/clock/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158
new file mode 100644
index 00000000..019e8765
Binary files /dev/null and b/clock/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 differ
diff --git a/clock/Library/Artifacts/0c/0c98bcc075631d40df4e9aa697de32e4 b/clock/Library/Artifacts/0c/0c98bcc075631d40df4e9aa697de32e4
new file mode 100644
index 00000000..2669cf97
Binary files /dev/null and b/clock/Library/Artifacts/0c/0c98bcc075631d40df4e9aa697de32e4 differ
diff --git a/clock/Library/Artifacts/0d/0d35174d644d6fea80eabbba74aebb2e b/clock/Library/Artifacts/0d/0d35174d644d6fea80eabbba74aebb2e
new file mode 100644
index 00000000..d5038a27
Binary files /dev/null and b/clock/Library/Artifacts/0d/0d35174d644d6fea80eabbba74aebb2e differ
diff --git a/clock/Library/Artifacts/0d/0d6d6ff4489b96e8f9980d5d0eb3f972 b/clock/Library/Artifacts/0d/0d6d6ff4489b96e8f9980d5d0eb3f972
new file mode 100644
index 00000000..899643f8
Binary files /dev/null and b/clock/Library/Artifacts/0d/0d6d6ff4489b96e8f9980d5d0eb3f972 differ
diff --git a/clock/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 b/clock/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62
new file mode 100644
index 00000000..3f933843
Binary files /dev/null and b/clock/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 differ
diff --git a/clock/Library/Artifacts/0d/0d82bfc8b78a948b7e9b1f659128f758 b/clock/Library/Artifacts/0d/0d82bfc8b78a948b7e9b1f659128f758
new file mode 100644
index 00000000..639bd1b9
Binary files /dev/null and b/clock/Library/Artifacts/0d/0d82bfc8b78a948b7e9b1f659128f758 differ
diff --git a/clock/Library/Artifacts/0d/0db1cadc43019bd329c19c0a1098fe5b b/clock/Library/Artifacts/0d/0db1cadc43019bd329c19c0a1098fe5b
new file mode 100644
index 00000000..d128a1c6
Binary files /dev/null and b/clock/Library/Artifacts/0d/0db1cadc43019bd329c19c0a1098fe5b differ
diff --git a/clock/Library/Artifacts/0d/0de261a4ed41f0edfb33ff8f7776e34b b/clock/Library/Artifacts/0d/0de261a4ed41f0edfb33ff8f7776e34b
new file mode 100644
index 00000000..6ea4f156
Binary files /dev/null and b/clock/Library/Artifacts/0d/0de261a4ed41f0edfb33ff8f7776e34b differ
diff --git a/clock/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 b/clock/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146
new file mode 100644
index 00000000..5d5f8679
Binary files /dev/null and b/clock/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 differ
diff --git a/clock/Library/Artifacts/0e/0e4815667c0642546444b33f7504f6e6 b/clock/Library/Artifacts/0e/0e4815667c0642546444b33f7504f6e6
new file mode 100644
index 00000000..69070676
Binary files /dev/null and b/clock/Library/Artifacts/0e/0e4815667c0642546444b33f7504f6e6 differ
diff --git a/clock/Library/Artifacts/0e/0e4a8bfc62db65eab723a69511f2978b b/clock/Library/Artifacts/0e/0e4a8bfc62db65eab723a69511f2978b
new file mode 100644
index 00000000..62598003
Binary files /dev/null and b/clock/Library/Artifacts/0e/0e4a8bfc62db65eab723a69511f2978b differ
diff --git a/clock/Library/Artifacts/0e/0e6edf9b12f01822a48839be8f1f1d9b b/clock/Library/Artifacts/0e/0e6edf9b12f01822a48839be8f1f1d9b
new file mode 100644
index 00000000..4557ac68
Binary files /dev/null and b/clock/Library/Artifacts/0e/0e6edf9b12f01822a48839be8f1f1d9b differ
diff --git a/clock/Library/Artifacts/0e/0eb66a419d546cdf2d22dcfa8018eba5 b/clock/Library/Artifacts/0e/0eb66a419d546cdf2d22dcfa8018eba5
new file mode 100644
index 00000000..7dc92d88
Binary files /dev/null and b/clock/Library/Artifacts/0e/0eb66a419d546cdf2d22dcfa8018eba5 differ
diff --git a/clock/Library/Artifacts/0e/0ebe799df0a1344dac039962b3f9e801 b/clock/Library/Artifacts/0e/0ebe799df0a1344dac039962b3f9e801
new file mode 100644
index 00000000..8b78806a
Binary files /dev/null and b/clock/Library/Artifacts/0e/0ebe799df0a1344dac039962b3f9e801 differ
diff --git a/clock/Library/Artifacts/0e/0ed718ee4c5fd96dd0421f9608bc3eff b/clock/Library/Artifacts/0e/0ed718ee4c5fd96dd0421f9608bc3eff
new file mode 100644
index 00000000..1b7992f3
Binary files /dev/null and b/clock/Library/Artifacts/0e/0ed718ee4c5fd96dd0421f9608bc3eff differ
diff --git a/clock/Library/Artifacts/0e/0ee258c55564939eb4a62c9c674dcacc b/clock/Library/Artifacts/0e/0ee258c55564939eb4a62c9c674dcacc
new file mode 100644
index 00000000..0b272a4f
Binary files /dev/null and b/clock/Library/Artifacts/0e/0ee258c55564939eb4a62c9c674dcacc differ
diff --git a/clock/Library/Artifacts/0f/0f60b0b2e358669afd123533a66b2a3c b/clock/Library/Artifacts/0f/0f60b0b2e358669afd123533a66b2a3c
new file mode 100644
index 00000000..d0593310
Binary files /dev/null and b/clock/Library/Artifacts/0f/0f60b0b2e358669afd123533a66b2a3c differ
diff --git a/clock/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e b/clock/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e
new file mode 100644
index 00000000..0a07fb70
Binary files /dev/null and b/clock/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e differ
diff --git a/clock/Library/Artifacts/0f/0fa21722241b2f506f1a5d704e020c22 b/clock/Library/Artifacts/0f/0fa21722241b2f506f1a5d704e020c22
new file mode 100644
index 00000000..cd8b2da3
Binary files /dev/null and b/clock/Library/Artifacts/0f/0fa21722241b2f506f1a5d704e020c22 differ
diff --git a/clock/Library/Artifacts/0f/0fb255a6b9ea358464dec4d278166305 b/clock/Library/Artifacts/0f/0fb255a6b9ea358464dec4d278166305
new file mode 100644
index 00000000..62a81ffb
Binary files /dev/null and b/clock/Library/Artifacts/0f/0fb255a6b9ea358464dec4d278166305 differ
diff --git a/clock/Library/Artifacts/0f/0fc176114e89434ce375636b527c2aa5 b/clock/Library/Artifacts/0f/0fc176114e89434ce375636b527c2aa5
new file mode 100644
index 00000000..6b1555fd
Binary files /dev/null and b/clock/Library/Artifacts/0f/0fc176114e89434ce375636b527c2aa5 differ
diff --git a/clock/Library/Artifacts/0f/0fc31b7ec89eca3c560668df50b4ba93 b/clock/Library/Artifacts/0f/0fc31b7ec89eca3c560668df50b4ba93
new file mode 100644
index 00000000..87b2c356
Binary files /dev/null and b/clock/Library/Artifacts/0f/0fc31b7ec89eca3c560668df50b4ba93 differ
diff --git a/clock/Library/Artifacts/0f/0fc977794367f9f4c9a20754f8487c37 b/clock/Library/Artifacts/0f/0fc977794367f9f4c9a20754f8487c37
new file mode 100644
index 00000000..160846a0
Binary files /dev/null and b/clock/Library/Artifacts/0f/0fc977794367f9f4c9a20754f8487c37 differ
diff --git a/clock/Library/Artifacts/0f/0ffc5e7239522ac78faca6c9dbc65262 b/clock/Library/Artifacts/0f/0ffc5e7239522ac78faca6c9dbc65262
new file mode 100644
index 00000000..f3854736
Binary files /dev/null and b/clock/Library/Artifacts/0f/0ffc5e7239522ac78faca6c9dbc65262 differ
diff --git a/clock/Library/Artifacts/10/100190709e779d32b956734967092c36 b/clock/Library/Artifacts/10/100190709e779d32b956734967092c36
new file mode 100644
index 00000000..a1deaabc
Binary files /dev/null and b/clock/Library/Artifacts/10/100190709e779d32b956734967092c36 differ
diff --git a/clock/Library/Artifacts/10/1007e3c152de5279346a5ba2846c50ec b/clock/Library/Artifacts/10/1007e3c152de5279346a5ba2846c50ec
new file mode 100644
index 00000000..b1f80b86
Binary files /dev/null and b/clock/Library/Artifacts/10/1007e3c152de5279346a5ba2846c50ec differ
diff --git a/clock/Library/Artifacts/10/105aace03497e86bb56b5789553d07ce b/clock/Library/Artifacts/10/105aace03497e86bb56b5789553d07ce
new file mode 100644
index 00000000..abfc68b8
Binary files /dev/null and b/clock/Library/Artifacts/10/105aace03497e86bb56b5789553d07ce differ
diff --git a/clock/Library/Artifacts/10/10bfea09ac2a28167f387215a7298fae b/clock/Library/Artifacts/10/10bfea09ac2a28167f387215a7298fae
new file mode 100644
index 00000000..b2c01fd7
Binary files /dev/null and b/clock/Library/Artifacts/10/10bfea09ac2a28167f387215a7298fae differ
diff --git a/clock/Library/Artifacts/10/10ec410da81125952552d773a8e20e75 b/clock/Library/Artifacts/10/10ec410da81125952552d773a8e20e75
new file mode 100644
index 00000000..1c6cf5bd
Binary files /dev/null and b/clock/Library/Artifacts/10/10ec410da81125952552d773a8e20e75 differ
diff --git a/clock/Library/Artifacts/10/10edce56f1e27b2091f840fad6489c2b b/clock/Library/Artifacts/10/10edce56f1e27b2091f840fad6489c2b
new file mode 100644
index 00000000..9f1f9fc2
Binary files /dev/null and b/clock/Library/Artifacts/10/10edce56f1e27b2091f840fad6489c2b differ
diff --git a/clock/Library/Artifacts/10/10f7367d424cebf33d9965761e2dbf8e b/clock/Library/Artifacts/10/10f7367d424cebf33d9965761e2dbf8e
new file mode 100644
index 00000000..795ead5d
Binary files /dev/null and b/clock/Library/Artifacts/10/10f7367d424cebf33d9965761e2dbf8e differ
diff --git a/clock/Library/Artifacts/10/10f986b5211572694a6ea6953dc0d9ca b/clock/Library/Artifacts/10/10f986b5211572694a6ea6953dc0d9ca
new file mode 100644
index 00000000..27e9fa16
Binary files /dev/null and b/clock/Library/Artifacts/10/10f986b5211572694a6ea6953dc0d9ca differ
diff --git a/clock/Library/Artifacts/11/1106972b3b6aa8d3e73f530291b13c75 b/clock/Library/Artifacts/11/1106972b3b6aa8d3e73f530291b13c75
new file mode 100644
index 00000000..264996dd
Binary files /dev/null and b/clock/Library/Artifacts/11/1106972b3b6aa8d3e73f530291b13c75 differ
diff --git a/clock/Library/Artifacts/11/11186e7ff25d88be810b804c96ac6d56 b/clock/Library/Artifacts/11/11186e7ff25d88be810b804c96ac6d56
new file mode 100644
index 00000000..8366ac87
Binary files /dev/null and b/clock/Library/Artifacts/11/11186e7ff25d88be810b804c96ac6d56 differ
diff --git a/clock/Library/Artifacts/11/1118cc67eb9a9b7169d4e44d82d670c5 b/clock/Library/Artifacts/11/1118cc67eb9a9b7169d4e44d82d670c5
new file mode 100644
index 00000000..81d56205
Binary files /dev/null and b/clock/Library/Artifacts/11/1118cc67eb9a9b7169d4e44d82d670c5 differ
diff --git a/clock/Library/Artifacts/11/113425f7841a53a657ea5de6ba3788ef b/clock/Library/Artifacts/11/113425f7841a53a657ea5de6ba3788ef
new file mode 100644
index 00000000..1ca8bf27
Binary files /dev/null and b/clock/Library/Artifacts/11/113425f7841a53a657ea5de6ba3788ef differ
diff --git a/clock/Library/Artifacts/11/115d0d7fb47c91517288a2817977bef2 b/clock/Library/Artifacts/11/115d0d7fb47c91517288a2817977bef2
new file mode 100644
index 00000000..7dae8c1f
Binary files /dev/null and b/clock/Library/Artifacts/11/115d0d7fb47c91517288a2817977bef2 differ
diff --git a/clock/Library/Artifacts/11/1170f858a318f2ec2684d9b9afd663ea b/clock/Library/Artifacts/11/1170f858a318f2ec2684d9b9afd663ea
new file mode 100644
index 00000000..b9a1a46d
Binary files /dev/null and b/clock/Library/Artifacts/11/1170f858a318f2ec2684d9b9afd663ea differ
diff --git a/clock/Library/Artifacts/11/117987f78d759edcfebef3d2ef1093fa b/clock/Library/Artifacts/11/117987f78d759edcfebef3d2ef1093fa
new file mode 100644
index 00000000..c6e64dd2
Binary files /dev/null and b/clock/Library/Artifacts/11/117987f78d759edcfebef3d2ef1093fa differ
diff --git a/clock/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 b/clock/Library/Artifacts/11/11893022c46645582cd6743e65cbae72
new file mode 100644
index 00000000..6d9b3134
Binary files /dev/null and b/clock/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 differ
diff --git a/clock/Library/Artifacts/11/118aeae9ba3046a6bd1fff0e70e6890e b/clock/Library/Artifacts/11/118aeae9ba3046a6bd1fff0e70e6890e
new file mode 100644
index 00000000..fef6d12b
Binary files /dev/null and b/clock/Library/Artifacts/11/118aeae9ba3046a6bd1fff0e70e6890e differ
diff --git a/clock/Library/Artifacts/11/11d9902b20047f9784ee8a1729902a6f b/clock/Library/Artifacts/11/11d9902b20047f9784ee8a1729902a6f
new file mode 100644
index 00000000..cda6a446
Binary files /dev/null and b/clock/Library/Artifacts/11/11d9902b20047f9784ee8a1729902a6f differ
diff --git a/clock/Library/Artifacts/11/11f5b1f4f1095d10a96abea84d7541be b/clock/Library/Artifacts/11/11f5b1f4f1095d10a96abea84d7541be
new file mode 100644
index 00000000..e5a64279
Binary files /dev/null and b/clock/Library/Artifacts/11/11f5b1f4f1095d10a96abea84d7541be differ
diff --git a/clock/Library/Artifacts/12/123a27978b92aa57fd5499fd6875be2e b/clock/Library/Artifacts/12/123a27978b92aa57fd5499fd6875be2e
new file mode 100644
index 00000000..2e001404
Binary files /dev/null and b/clock/Library/Artifacts/12/123a27978b92aa57fd5499fd6875be2e differ
diff --git a/clock/Library/Artifacts/12/125ed64720046ab2f85f5d178b6a47f5 b/clock/Library/Artifacts/12/125ed64720046ab2f85f5d178b6a47f5
new file mode 100644
index 00000000..9a0abe17
Binary files /dev/null and b/clock/Library/Artifacts/12/125ed64720046ab2f85f5d178b6a47f5 differ
diff --git a/clock/Library/Artifacts/12/127abf78d69313fe6f7c7d6fdadf799f b/clock/Library/Artifacts/12/127abf78d69313fe6f7c7d6fdadf799f
new file mode 100644
index 00000000..7b39e02b
Binary files /dev/null and b/clock/Library/Artifacts/12/127abf78d69313fe6f7c7d6fdadf799f differ
diff --git a/clock/Library/Artifacts/12/12ee2ff73c20402861749c4b5312fa82 b/clock/Library/Artifacts/12/12ee2ff73c20402861749c4b5312fa82
new file mode 100644
index 00000000..dcae0de7
Binary files /dev/null and b/clock/Library/Artifacts/12/12ee2ff73c20402861749c4b5312fa82 differ
diff --git a/clock/Library/Artifacts/13/131a9cedd905029a711e1898766ce373 b/clock/Library/Artifacts/13/131a9cedd905029a711e1898766ce373
new file mode 100644
index 00000000..e4a56437
Binary files /dev/null and b/clock/Library/Artifacts/13/131a9cedd905029a711e1898766ce373 differ
diff --git a/clock/Library/Artifacts/13/1337abcf3db06fcffe2805dfb1710c5c b/clock/Library/Artifacts/13/1337abcf3db06fcffe2805dfb1710c5c
new file mode 100644
index 00000000..8eb8694f
Binary files /dev/null and b/clock/Library/Artifacts/13/1337abcf3db06fcffe2805dfb1710c5c differ
diff --git a/clock/Library/Artifacts/13/1339fd99b741a2cf7f96bc0cb3956506 b/clock/Library/Artifacts/13/1339fd99b741a2cf7f96bc0cb3956506
new file mode 100644
index 00000000..ad156d90
Binary files /dev/null and b/clock/Library/Artifacts/13/1339fd99b741a2cf7f96bc0cb3956506 differ
diff --git a/clock/Library/Artifacts/13/13434b101b27ddfaa33e610207f6d2c2 b/clock/Library/Artifacts/13/13434b101b27ddfaa33e610207f6d2c2
new file mode 100644
index 00000000..c73f5099
Binary files /dev/null and b/clock/Library/Artifacts/13/13434b101b27ddfaa33e610207f6d2c2 differ
diff --git a/clock/Library/Artifacts/13/1372b8337709c63f55a3f03eb24338a0 b/clock/Library/Artifacts/13/1372b8337709c63f55a3f03eb24338a0
new file mode 100644
index 00000000..dc3caa02
Binary files /dev/null and b/clock/Library/Artifacts/13/1372b8337709c63f55a3f03eb24338a0 differ
diff --git a/clock/Library/Artifacts/13/13811f7535e4a4b54ec98d970857f470 b/clock/Library/Artifacts/13/13811f7535e4a4b54ec98d970857f470
new file mode 100644
index 00000000..f2e37db7
Binary files /dev/null and b/clock/Library/Artifacts/13/13811f7535e4a4b54ec98d970857f470 differ
diff --git a/clock/Library/Artifacts/13/1391b2b01e61f657f8248735e68aac7c b/clock/Library/Artifacts/13/1391b2b01e61f657f8248735e68aac7c
new file mode 100644
index 00000000..47e79a10
Binary files /dev/null and b/clock/Library/Artifacts/13/1391b2b01e61f657f8248735e68aac7c differ
diff --git a/clock/Library/Artifacts/13/13ce36920f2816bf028f698523677723 b/clock/Library/Artifacts/13/13ce36920f2816bf028f698523677723
new file mode 100644
index 00000000..e64b4464
Binary files /dev/null and b/clock/Library/Artifacts/13/13ce36920f2816bf028f698523677723 differ
diff --git a/clock/Library/Artifacts/14/141b63cea8afec9a8921acd41dccdc74 b/clock/Library/Artifacts/14/141b63cea8afec9a8921acd41dccdc74
new file mode 100644
index 00000000..06772358
Binary files /dev/null and b/clock/Library/Artifacts/14/141b63cea8afec9a8921acd41dccdc74 differ
diff --git a/clock/Library/Artifacts/14/144244843f4a3219ea70307be512ac50 b/clock/Library/Artifacts/14/144244843f4a3219ea70307be512ac50
new file mode 100644
index 00000000..6f8b448a
Binary files /dev/null and b/clock/Library/Artifacts/14/144244843f4a3219ea70307be512ac50 differ
diff --git a/clock/Library/Artifacts/14/1449c57ce65eac849b805b5a25e908e3 b/clock/Library/Artifacts/14/1449c57ce65eac849b805b5a25e908e3
new file mode 100644
index 00000000..067efd66
Binary files /dev/null and b/clock/Library/Artifacts/14/1449c57ce65eac849b805b5a25e908e3 differ
diff --git a/clock/Library/Artifacts/14/144a85d6716bc1d1a7a97917e188555b b/clock/Library/Artifacts/14/144a85d6716bc1d1a7a97917e188555b
new file mode 100644
index 00000000..388534a2
Binary files /dev/null and b/clock/Library/Artifacts/14/144a85d6716bc1d1a7a97917e188555b differ
diff --git a/clock/Library/Artifacts/14/147c10255e416545e090d8e80ad480ef b/clock/Library/Artifacts/14/147c10255e416545e090d8e80ad480ef
new file mode 100644
index 00000000..87e2f81c
Binary files /dev/null and b/clock/Library/Artifacts/14/147c10255e416545e090d8e80ad480ef differ
diff --git a/clock/Library/Artifacts/14/1485b2013ca8ea6bbabf1468a367e05a b/clock/Library/Artifacts/14/1485b2013ca8ea6bbabf1468a367e05a
new file mode 100644
index 00000000..adf30b1f
Binary files /dev/null and b/clock/Library/Artifacts/14/1485b2013ca8ea6bbabf1468a367e05a differ
diff --git a/clock/Library/Artifacts/14/149c64054f92eda81c55b9f20c354cb1 b/clock/Library/Artifacts/14/149c64054f92eda81c55b9f20c354cb1
new file mode 100644
index 00000000..e32ce396
Binary files /dev/null and b/clock/Library/Artifacts/14/149c64054f92eda81c55b9f20c354cb1 differ
diff --git a/clock/Library/Artifacts/14/14b01750bf7f5ca41f0e42154e4722d6 b/clock/Library/Artifacts/14/14b01750bf7f5ca41f0e42154e4722d6
new file mode 100644
index 00000000..5047ab22
Binary files /dev/null and b/clock/Library/Artifacts/14/14b01750bf7f5ca41f0e42154e4722d6 differ
diff --git a/clock/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 b/clock/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0
new file mode 100644
index 00000000..da35bffc
Binary files /dev/null and b/clock/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 differ
diff --git a/clock/Library/Artifacts/14/14ce0b0bfc741df662f5419335c97534 b/clock/Library/Artifacts/14/14ce0b0bfc741df662f5419335c97534
new file mode 100644
index 00000000..77664864
Binary files /dev/null and b/clock/Library/Artifacts/14/14ce0b0bfc741df662f5419335c97534 differ
diff --git a/clock/Library/Artifacts/15/15046145322c31616de45027495fb222 b/clock/Library/Artifacts/15/15046145322c31616de45027495fb222
new file mode 100644
index 00000000..2767e703
Binary files /dev/null and b/clock/Library/Artifacts/15/15046145322c31616de45027495fb222 differ
diff --git a/clock/Library/Artifacts/15/154dabff0c425606411d5874fb045ae3 b/clock/Library/Artifacts/15/154dabff0c425606411d5874fb045ae3
new file mode 100644
index 00000000..3b3f4d05
Binary files /dev/null and b/clock/Library/Artifacts/15/154dabff0c425606411d5874fb045ae3 differ
diff --git a/clock/Library/Artifacts/15/15e7b01f999424313c9d7bf9a6563ded b/clock/Library/Artifacts/15/15e7b01f999424313c9d7bf9a6563ded
new file mode 100644
index 00000000..ab073d8b
Binary files /dev/null and b/clock/Library/Artifacts/15/15e7b01f999424313c9d7bf9a6563ded differ
diff --git a/clock/Library/Artifacts/15/15fd7e90513c9c8ad488510f868d7634 b/clock/Library/Artifacts/15/15fd7e90513c9c8ad488510f868d7634
new file mode 100644
index 00000000..60b5aca8
Binary files /dev/null and b/clock/Library/Artifacts/15/15fd7e90513c9c8ad488510f868d7634 differ
diff --git a/clock/Library/Artifacts/16/16503dc028109165c36d2e07a0602794 b/clock/Library/Artifacts/16/16503dc028109165c36d2e07a0602794
new file mode 100644
index 00000000..7639f85b
Binary files /dev/null and b/clock/Library/Artifacts/16/16503dc028109165c36d2e07a0602794 differ
diff --git a/clock/Library/Artifacts/16/16543fd202137d90a35ac73e9b22f339 b/clock/Library/Artifacts/16/16543fd202137d90a35ac73e9b22f339
new file mode 100644
index 00000000..b25e2c3d
Binary files /dev/null and b/clock/Library/Artifacts/16/16543fd202137d90a35ac73e9b22f339 differ
diff --git a/clock/Library/Artifacts/16/167bf8004b4cf0b62faa0871f3dbcbf1 b/clock/Library/Artifacts/16/167bf8004b4cf0b62faa0871f3dbcbf1
new file mode 100644
index 00000000..7a577eda
Binary files /dev/null and b/clock/Library/Artifacts/16/167bf8004b4cf0b62faa0871f3dbcbf1 differ
diff --git a/clock/Library/Artifacts/16/168025eaf1517613a8722f1e99af787f b/clock/Library/Artifacts/16/168025eaf1517613a8722f1e99af787f
new file mode 100644
index 00000000..528a0824
Binary files /dev/null and b/clock/Library/Artifacts/16/168025eaf1517613a8722f1e99af787f differ
diff --git a/clock/Library/Artifacts/17/17061912827c86bd7155db965691e4f4 b/clock/Library/Artifacts/17/17061912827c86bd7155db965691e4f4
new file mode 100644
index 00000000..faf557d1
Binary files /dev/null and b/clock/Library/Artifacts/17/17061912827c86bd7155db965691e4f4 differ
diff --git a/clock/Library/Artifacts/17/172728e40b3a41ab09042214b00feb39 b/clock/Library/Artifacts/17/172728e40b3a41ab09042214b00feb39
new file mode 100644
index 00000000..cdb639fc
Binary files /dev/null and b/clock/Library/Artifacts/17/172728e40b3a41ab09042214b00feb39 differ
diff --git a/clock/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 b/clock/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793
new file mode 100644
index 00000000..26ed746e
Binary files /dev/null and b/clock/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 differ
diff --git a/clock/Library/Artifacts/17/175d6d12408c68656d2743051573e948 b/clock/Library/Artifacts/17/175d6d12408c68656d2743051573e948
new file mode 100644
index 00000000..0e7a730b
Binary files /dev/null and b/clock/Library/Artifacts/17/175d6d12408c68656d2743051573e948 differ
diff --git a/clock/Library/Artifacts/18/18086023567e5722324e120b82945614 b/clock/Library/Artifacts/18/18086023567e5722324e120b82945614
new file mode 100644
index 00000000..0d4b10c8
Binary files /dev/null and b/clock/Library/Artifacts/18/18086023567e5722324e120b82945614 differ
diff --git a/clock/Library/Artifacts/18/180b1ce71a95de104d975b097e1bc9b7 b/clock/Library/Artifacts/18/180b1ce71a95de104d975b097e1bc9b7
new file mode 100644
index 00000000..5426d7c0
Binary files /dev/null and b/clock/Library/Artifacts/18/180b1ce71a95de104d975b097e1bc9b7 differ
diff --git a/clock/Library/Artifacts/18/1817501b7446bdc33fb3330412edc53c b/clock/Library/Artifacts/18/1817501b7446bdc33fb3330412edc53c
new file mode 100644
index 00000000..120cc904
Binary files /dev/null and b/clock/Library/Artifacts/18/1817501b7446bdc33fb3330412edc53c differ
diff --git a/clock/Library/Artifacts/18/18294c0a55d51a0202468aa32ea7ed34 b/clock/Library/Artifacts/18/18294c0a55d51a0202468aa32ea7ed34
new file mode 100644
index 00000000..e67ef832
Binary files /dev/null and b/clock/Library/Artifacts/18/18294c0a55d51a0202468aa32ea7ed34 differ
diff --git a/clock/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 b/clock/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2
new file mode 100644
index 00000000..255a5293
Binary files /dev/null and b/clock/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 differ
diff --git a/clock/Library/Artifacts/18/185e21d4ef1d9299f2f565e0dcb37b10 b/clock/Library/Artifacts/18/185e21d4ef1d9299f2f565e0dcb37b10
new file mode 100644
index 00000000..2a0584ca
Binary files /dev/null and b/clock/Library/Artifacts/18/185e21d4ef1d9299f2f565e0dcb37b10 differ
diff --git a/clock/Library/Artifacts/18/187295a5a3015e8af0962362e489a8eb b/clock/Library/Artifacts/18/187295a5a3015e8af0962362e489a8eb
new file mode 100644
index 00000000..b84eac0c
Binary files /dev/null and b/clock/Library/Artifacts/18/187295a5a3015e8af0962362e489a8eb differ
diff --git a/clock/Library/Artifacts/18/18a1229885c7a0fd42b8b455ea08b172 b/clock/Library/Artifacts/18/18a1229885c7a0fd42b8b455ea08b172
new file mode 100644
index 00000000..d84d9c63
Binary files /dev/null and b/clock/Library/Artifacts/18/18a1229885c7a0fd42b8b455ea08b172 differ
diff --git a/clock/Library/Artifacts/18/18a2ddee3430ad8a2d7eb8065e9fd6fd b/clock/Library/Artifacts/18/18a2ddee3430ad8a2d7eb8065e9fd6fd
new file mode 100644
index 00000000..88f9892b
Binary files /dev/null and b/clock/Library/Artifacts/18/18a2ddee3430ad8a2d7eb8065e9fd6fd differ
diff --git a/clock/Library/Artifacts/18/18ec321032f52b82cfa79a83c65ebae9 b/clock/Library/Artifacts/18/18ec321032f52b82cfa79a83c65ebae9
new file mode 100644
index 00000000..869f3f63
Binary files /dev/null and b/clock/Library/Artifacts/18/18ec321032f52b82cfa79a83c65ebae9 differ
diff --git a/clock/Library/Artifacts/19/194472a1c25c40dd55d944fee1783f06 b/clock/Library/Artifacts/19/194472a1c25c40dd55d944fee1783f06
new file mode 100644
index 00000000..13e2b402
Binary files /dev/null and b/clock/Library/Artifacts/19/194472a1c25c40dd55d944fee1783f06 differ
diff --git a/clock/Library/Artifacts/19/198aead76583299617ca2ed0ad6437a9 b/clock/Library/Artifacts/19/198aead76583299617ca2ed0ad6437a9
new file mode 100644
index 00000000..c298b64d
Binary files /dev/null and b/clock/Library/Artifacts/19/198aead76583299617ca2ed0ad6437a9 differ
diff --git a/clock/Library/Artifacts/19/199ca0f3b16846f48cc39b34df827856 b/clock/Library/Artifacts/19/199ca0f3b16846f48cc39b34df827856
new file mode 100644
index 00000000..f9d5bc80
Binary files /dev/null and b/clock/Library/Artifacts/19/199ca0f3b16846f48cc39b34df827856 differ
diff --git a/clock/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 b/clock/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1
new file mode 100644
index 00000000..83a512b6
Binary files /dev/null and b/clock/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 differ
diff --git a/clock/Library/Artifacts/1a/1a0ba17d29566c23d48f519352f4b9cf b/clock/Library/Artifacts/1a/1a0ba17d29566c23d48f519352f4b9cf
new file mode 100644
index 00000000..0fb8ec6d
Binary files /dev/null and b/clock/Library/Artifacts/1a/1a0ba17d29566c23d48f519352f4b9cf differ
diff --git a/clock/Library/Artifacts/1a/1a0d71c48884600bed73df03ae90e45a b/clock/Library/Artifacts/1a/1a0d71c48884600bed73df03ae90e45a
new file mode 100644
index 00000000..e9b52a7d
Binary files /dev/null and b/clock/Library/Artifacts/1a/1a0d71c48884600bed73df03ae90e45a differ
diff --git a/clock/Library/Artifacts/1a/1aa46e17fadc0d5e182f8890520dbfef b/clock/Library/Artifacts/1a/1aa46e17fadc0d5e182f8890520dbfef
new file mode 100644
index 00000000..0b8e2d1f
Binary files /dev/null and b/clock/Library/Artifacts/1a/1aa46e17fadc0d5e182f8890520dbfef differ
diff --git a/clock/Library/Artifacts/1a/1ad44df04d071a94c2a9f003cf11bbdc b/clock/Library/Artifacts/1a/1ad44df04d071a94c2a9f003cf11bbdc
new file mode 100644
index 00000000..5816559e
Binary files /dev/null and b/clock/Library/Artifacts/1a/1ad44df04d071a94c2a9f003cf11bbdc differ
diff --git a/clock/Library/Artifacts/1a/1af0302089457f2023f9bd0b3b66ad51 b/clock/Library/Artifacts/1a/1af0302089457f2023f9bd0b3b66ad51
new file mode 100644
index 00000000..b628492c
Binary files /dev/null and b/clock/Library/Artifacts/1a/1af0302089457f2023f9bd0b3b66ad51 differ
diff --git a/clock/Library/Artifacts/1b/1b70534b77cde2a1ca8ab20b26a45d9a b/clock/Library/Artifacts/1b/1b70534b77cde2a1ca8ab20b26a45d9a
new file mode 100644
index 00000000..fee2d1c3
Binary files /dev/null and b/clock/Library/Artifacts/1b/1b70534b77cde2a1ca8ab20b26a45d9a differ
diff --git a/clock/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 b/clock/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366
new file mode 100644
index 00000000..b1bbc14b
Binary files /dev/null and b/clock/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 differ
diff --git a/clock/Library/Artifacts/1b/1bd1d69d94f1f82d0e7c9e297f46eb57 b/clock/Library/Artifacts/1b/1bd1d69d94f1f82d0e7c9e297f46eb57
new file mode 100644
index 00000000..bc171879
Binary files /dev/null and b/clock/Library/Artifacts/1b/1bd1d69d94f1f82d0e7c9e297f46eb57 differ
diff --git a/clock/Library/Artifacts/1b/1bdb4e6e1543e7075921a4bd20d68368 b/clock/Library/Artifacts/1b/1bdb4e6e1543e7075921a4bd20d68368
new file mode 100644
index 00000000..d6922cfe
Binary files /dev/null and b/clock/Library/Artifacts/1b/1bdb4e6e1543e7075921a4bd20d68368 differ
diff --git a/clock/Library/Artifacts/1c/1c28c1c3fbac55b9ff9d90dfb5ec5b3e b/clock/Library/Artifacts/1c/1c28c1c3fbac55b9ff9d90dfb5ec5b3e
new file mode 100644
index 00000000..bbcb7ab7
Binary files /dev/null and b/clock/Library/Artifacts/1c/1c28c1c3fbac55b9ff9d90dfb5ec5b3e differ
diff --git a/clock/Library/Artifacts/1c/1c7554b91d1a6ddd404f9a19e64fa97e b/clock/Library/Artifacts/1c/1c7554b91d1a6ddd404f9a19e64fa97e
new file mode 100644
index 00000000..dcd87d7a
Binary files /dev/null and b/clock/Library/Artifacts/1c/1c7554b91d1a6ddd404f9a19e64fa97e differ
diff --git a/clock/Library/Artifacts/1c/1c77ea757fb7b2655dcb2571a31404c8 b/clock/Library/Artifacts/1c/1c77ea757fb7b2655dcb2571a31404c8
new file mode 100644
index 00000000..4f867c6a
Binary files /dev/null and b/clock/Library/Artifacts/1c/1c77ea757fb7b2655dcb2571a31404c8 differ
diff --git a/clock/Library/Artifacts/1c/1c8074bcbb0985b1c2cda0f9fb53506c b/clock/Library/Artifacts/1c/1c8074bcbb0985b1c2cda0f9fb53506c
new file mode 100644
index 00000000..e4d50658
Binary files /dev/null and b/clock/Library/Artifacts/1c/1c8074bcbb0985b1c2cda0f9fb53506c differ
diff --git a/clock/Library/Artifacts/1c/1c89cf069b4a006f72fc1d49ebd63325 b/clock/Library/Artifacts/1c/1c89cf069b4a006f72fc1d49ebd63325
new file mode 100644
index 00000000..e34eb87e
Binary files /dev/null and b/clock/Library/Artifacts/1c/1c89cf069b4a006f72fc1d49ebd63325 differ
diff --git a/clock/Library/Artifacts/1c/1ca1d13fe0073aebdff05e013f3bb96a b/clock/Library/Artifacts/1c/1ca1d13fe0073aebdff05e013f3bb96a
new file mode 100644
index 00000000..02509d52
Binary files /dev/null and b/clock/Library/Artifacts/1c/1ca1d13fe0073aebdff05e013f3bb96a differ
diff --git a/clock/Library/Artifacts/1d/1d620927f522cac854f0e92ab61b32b9 b/clock/Library/Artifacts/1d/1d620927f522cac854f0e92ab61b32b9
new file mode 100644
index 00000000..f1bbce27
Binary files /dev/null and b/clock/Library/Artifacts/1d/1d620927f522cac854f0e92ab61b32b9 differ
diff --git a/clock/Library/Artifacts/1d/1d70809507b079ca1a60800121871978 b/clock/Library/Artifacts/1d/1d70809507b079ca1a60800121871978
new file mode 100644
index 00000000..376bf015
Binary files /dev/null and b/clock/Library/Artifacts/1d/1d70809507b079ca1a60800121871978 differ
diff --git a/clock/Library/Artifacts/1d/1d73fbcf57c566a079e68cde58292356 b/clock/Library/Artifacts/1d/1d73fbcf57c566a079e68cde58292356
new file mode 100644
index 00000000..89b71e9d
Binary files /dev/null and b/clock/Library/Artifacts/1d/1d73fbcf57c566a079e68cde58292356 differ
diff --git a/clock/Library/Artifacts/1d/1d7b4c73e12d84249cac4ee531e0b9fc b/clock/Library/Artifacts/1d/1d7b4c73e12d84249cac4ee531e0b9fc
new file mode 100644
index 00000000..39d82057
Binary files /dev/null and b/clock/Library/Artifacts/1d/1d7b4c73e12d84249cac4ee531e0b9fc differ
diff --git a/clock/Library/Artifacts/1d/1da38abac07cf301d69fbcd4ef897154 b/clock/Library/Artifacts/1d/1da38abac07cf301d69fbcd4ef897154
new file mode 100644
index 00000000..477987f8
Binary files /dev/null and b/clock/Library/Artifacts/1d/1da38abac07cf301d69fbcd4ef897154 differ
diff --git a/clock/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 b/clock/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812
new file mode 100644
index 00000000..b1ff76c4
Binary files /dev/null and b/clock/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 differ
diff --git a/clock/Library/Artifacts/1e/1e175f3d9858d39880fdc5c8ac882ffe b/clock/Library/Artifacts/1e/1e175f3d9858d39880fdc5c8ac882ffe
new file mode 100644
index 00000000..aab9ef38
Binary files /dev/null and b/clock/Library/Artifacts/1e/1e175f3d9858d39880fdc5c8ac882ffe differ
diff --git a/clock/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 b/clock/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6
new file mode 100644
index 00000000..c96d6711
Binary files /dev/null and b/clock/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 differ
diff --git a/clock/Library/Artifacts/1e/1e55671f27bd2b7596fca30c5c30c0ca b/clock/Library/Artifacts/1e/1e55671f27bd2b7596fca30c5c30c0ca
new file mode 100644
index 00000000..1339c75c
Binary files /dev/null and b/clock/Library/Artifacts/1e/1e55671f27bd2b7596fca30c5c30c0ca differ
diff --git a/clock/Library/Artifacts/1e/1e7da4dd85de648c06432f73a89d4b42 b/clock/Library/Artifacts/1e/1e7da4dd85de648c06432f73a89d4b42
new file mode 100644
index 00000000..dc515926
Binary files /dev/null and b/clock/Library/Artifacts/1e/1e7da4dd85de648c06432f73a89d4b42 differ
diff --git a/clock/Library/Artifacts/1e/1ee6bb140b80466f0cb435a773903fca b/clock/Library/Artifacts/1e/1ee6bb140b80466f0cb435a773903fca
new file mode 100644
index 00000000..6a8eb993
Binary files /dev/null and b/clock/Library/Artifacts/1e/1ee6bb140b80466f0cb435a773903fca differ
diff --git a/clock/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 b/clock/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42
new file mode 100644
index 00000000..058d5e0e
Binary files /dev/null and b/clock/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 differ
diff --git a/clock/Library/Artifacts/1f/1f4e718f61a6505c30f6048a62ce858d b/clock/Library/Artifacts/1f/1f4e718f61a6505c30f6048a62ce858d
new file mode 100644
index 00000000..f13fb7e9
Binary files /dev/null and b/clock/Library/Artifacts/1f/1f4e718f61a6505c30f6048a62ce858d differ
diff --git a/clock/Library/Artifacts/1f/1f528dae5e2d35400ed71457b28979d9 b/clock/Library/Artifacts/1f/1f528dae5e2d35400ed71457b28979d9
new file mode 100644
index 00000000..e04af5a8
Binary files /dev/null and b/clock/Library/Artifacts/1f/1f528dae5e2d35400ed71457b28979d9 differ
diff --git a/clock/Library/Artifacts/1f/1f8a70e90e29997cf6191a37efe2bf5e b/clock/Library/Artifacts/1f/1f8a70e90e29997cf6191a37efe2bf5e
new file mode 100644
index 00000000..c69ad12a
Binary files /dev/null and b/clock/Library/Artifacts/1f/1f8a70e90e29997cf6191a37efe2bf5e differ
diff --git a/clock/Library/Artifacts/1f/1fbc0c32e612c6970041c2661d50a9bf b/clock/Library/Artifacts/1f/1fbc0c32e612c6970041c2661d50a9bf
new file mode 100644
index 00000000..6ffb7938
Binary files /dev/null and b/clock/Library/Artifacts/1f/1fbc0c32e612c6970041c2661d50a9bf differ
diff --git a/clock/Library/Artifacts/1f/1fc9aaaab9e6128ac7e3460320ef5a11 b/clock/Library/Artifacts/1f/1fc9aaaab9e6128ac7e3460320ef5a11
new file mode 100644
index 00000000..7f887e3e
Binary files /dev/null and b/clock/Library/Artifacts/1f/1fc9aaaab9e6128ac7e3460320ef5a11 differ
diff --git a/clock/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 b/clock/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79
new file mode 100644
index 00000000..67ce8ddd
Binary files /dev/null and b/clock/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 differ
diff --git a/clock/Library/Artifacts/20/20099236645d99de443781caf2481591 b/clock/Library/Artifacts/20/20099236645d99de443781caf2481591
new file mode 100644
index 00000000..390a5923
Binary files /dev/null and b/clock/Library/Artifacts/20/20099236645d99de443781caf2481591 differ
diff --git a/clock/Library/Artifacts/20/2046205af6c0e70ee5994fa1980005e5 b/clock/Library/Artifacts/20/2046205af6c0e70ee5994fa1980005e5
new file mode 100644
index 00000000..fc43f58b
Binary files /dev/null and b/clock/Library/Artifacts/20/2046205af6c0e70ee5994fa1980005e5 differ
diff --git a/clock/Library/Artifacts/20/204cc197d17e7c7c6c338fa21ee90b95 b/clock/Library/Artifacts/20/204cc197d17e7c7c6c338fa21ee90b95
new file mode 100644
index 00000000..1bd2aca5
Binary files /dev/null and b/clock/Library/Artifacts/20/204cc197d17e7c7c6c338fa21ee90b95 differ
diff --git a/clock/Library/Artifacts/20/2058eeef467f34bd2d7100670f1e7380 b/clock/Library/Artifacts/20/2058eeef467f34bd2d7100670f1e7380
new file mode 100644
index 00000000..65b5cd97
Binary files /dev/null and b/clock/Library/Artifacts/20/2058eeef467f34bd2d7100670f1e7380 differ
diff --git a/clock/Library/Artifacts/20/205a10bf4c16faf67a75f1e219719058 b/clock/Library/Artifacts/20/205a10bf4c16faf67a75f1e219719058
new file mode 100644
index 00000000..8f4e4bd7
Binary files /dev/null and b/clock/Library/Artifacts/20/205a10bf4c16faf67a75f1e219719058 differ
diff --git a/clock/Library/Artifacts/20/208dd7968a526a24bc8daa6c9815d732 b/clock/Library/Artifacts/20/208dd7968a526a24bc8daa6c9815d732
new file mode 100644
index 00000000..e931ea7e
Binary files /dev/null and b/clock/Library/Artifacts/20/208dd7968a526a24bc8daa6c9815d732 differ
diff --git a/clock/Library/Artifacts/21/2144f09af23119a90f7b00b20de35c46 b/clock/Library/Artifacts/21/2144f09af23119a90f7b00b20de35c46
new file mode 100644
index 00000000..1a4ef671
Binary files /dev/null and b/clock/Library/Artifacts/21/2144f09af23119a90f7b00b20de35c46 differ
diff --git a/clock/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e b/clock/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e
new file mode 100644
index 00000000..131dd5ec
Binary files /dev/null and b/clock/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e differ
diff --git a/clock/Library/Artifacts/21/21902e1fcc4b470f4582a34fcfc01e5a b/clock/Library/Artifacts/21/21902e1fcc4b470f4582a34fcfc01e5a
new file mode 100644
index 00000000..16f678a2
Binary files /dev/null and b/clock/Library/Artifacts/21/21902e1fcc4b470f4582a34fcfc01e5a differ
diff --git a/clock/Library/Artifacts/21/21b6c3ea8ef6400a9aff3cae5a038c7a b/clock/Library/Artifacts/21/21b6c3ea8ef6400a9aff3cae5a038c7a
new file mode 100644
index 00000000..eb483e36
Binary files /dev/null and b/clock/Library/Artifacts/21/21b6c3ea8ef6400a9aff3cae5a038c7a differ
diff --git a/clock/Library/Artifacts/21/21b7810d6dd8607d976344eb42e0df51 b/clock/Library/Artifacts/21/21b7810d6dd8607d976344eb42e0df51
new file mode 100644
index 00000000..ef041664
Binary files /dev/null and b/clock/Library/Artifacts/21/21b7810d6dd8607d976344eb42e0df51 differ
diff --git a/clock/Library/Artifacts/21/21cd6a6d0a86f4f1cfcd95f65e8847dc b/clock/Library/Artifacts/21/21cd6a6d0a86f4f1cfcd95f65e8847dc
new file mode 100644
index 00000000..c837c294
Binary files /dev/null and b/clock/Library/Artifacts/21/21cd6a6d0a86f4f1cfcd95f65e8847dc differ
diff --git a/clock/Library/Artifacts/21/21d973059dd4e597fd765a9bf1fe8231 b/clock/Library/Artifacts/21/21d973059dd4e597fd765a9bf1fe8231
new file mode 100644
index 00000000..444700d9
Binary files /dev/null and b/clock/Library/Artifacts/21/21d973059dd4e597fd765a9bf1fe8231 differ
diff --git a/clock/Library/Artifacts/21/21ef2de56989fc0c4acc14d850c90a43 b/clock/Library/Artifacts/21/21ef2de56989fc0c4acc14d850c90a43
new file mode 100644
index 00000000..eeb67cab
Binary files /dev/null and b/clock/Library/Artifacts/21/21ef2de56989fc0c4acc14d850c90a43 differ
diff --git a/clock/Library/Artifacts/22/22398d5da1c8b80ceea13fc64161f9f4 b/clock/Library/Artifacts/22/22398d5da1c8b80ceea13fc64161f9f4
new file mode 100644
index 00000000..b5345ea9
Binary files /dev/null and b/clock/Library/Artifacts/22/22398d5da1c8b80ceea13fc64161f9f4 differ
diff --git a/clock/Library/Artifacts/22/2257e893ee1b5a32a1d9e53d1d3fad1b b/clock/Library/Artifacts/22/2257e893ee1b5a32a1d9e53d1d3fad1b
new file mode 100644
index 00000000..6fe3cd2e
Binary files /dev/null and b/clock/Library/Artifacts/22/2257e893ee1b5a32a1d9e53d1d3fad1b differ
diff --git a/clock/Library/Artifacts/22/22a49bd5f164c88920e3c573b76e3d1b b/clock/Library/Artifacts/22/22a49bd5f164c88920e3c573b76e3d1b
new file mode 100644
index 00000000..74ab2285
Binary files /dev/null and b/clock/Library/Artifacts/22/22a49bd5f164c88920e3c573b76e3d1b differ
diff --git a/clock/Library/Artifacts/22/22e5367043611e2acf85b1ef6fd3a05a b/clock/Library/Artifacts/22/22e5367043611e2acf85b1ef6fd3a05a
new file mode 100644
index 00000000..d191608a
Binary files /dev/null and b/clock/Library/Artifacts/22/22e5367043611e2acf85b1ef6fd3a05a differ
diff --git a/clock/Library/Artifacts/23/231874c0febd0ee262a57701ab31473b b/clock/Library/Artifacts/23/231874c0febd0ee262a57701ab31473b
new file mode 100644
index 00000000..3b916c8f
Binary files /dev/null and b/clock/Library/Artifacts/23/231874c0febd0ee262a57701ab31473b differ
diff --git a/clock/Library/Artifacts/23/2327f9353cd40a7cbd05420fc4a90bf3 b/clock/Library/Artifacts/23/2327f9353cd40a7cbd05420fc4a90bf3
new file mode 100644
index 00000000..81fd4109
Binary files /dev/null and b/clock/Library/Artifacts/23/2327f9353cd40a7cbd05420fc4a90bf3 differ
diff --git a/clock/Library/Artifacts/23/233fcbcbd1d45b45c2f45aa55339f038 b/clock/Library/Artifacts/23/233fcbcbd1d45b45c2f45aa55339f038
new file mode 100644
index 00000000..87083508
Binary files /dev/null and b/clock/Library/Artifacts/23/233fcbcbd1d45b45c2f45aa55339f038 differ
diff --git a/clock/Library/Artifacts/23/238567bd2aa8a6476db915795bada128 b/clock/Library/Artifacts/23/238567bd2aa8a6476db915795bada128
new file mode 100644
index 00000000..dd124e63
Binary files /dev/null and b/clock/Library/Artifacts/23/238567bd2aa8a6476db915795bada128 differ
diff --git a/clock/Library/Artifacts/23/2392602aba3da6506efcfd85739642e0 b/clock/Library/Artifacts/23/2392602aba3da6506efcfd85739642e0
new file mode 100644
index 00000000..2a47172c
Binary files /dev/null and b/clock/Library/Artifacts/23/2392602aba3da6506efcfd85739642e0 differ
diff --git a/clock/Library/Artifacts/23/239a01efe7d67b4354bec5cc4327d0e0 b/clock/Library/Artifacts/23/239a01efe7d67b4354bec5cc4327d0e0
new file mode 100644
index 00000000..5bab5fd2
Binary files /dev/null and b/clock/Library/Artifacts/23/239a01efe7d67b4354bec5cc4327d0e0 differ
diff --git a/clock/Library/Artifacts/23/23cc9309913cea53ec2c59896a808be1 b/clock/Library/Artifacts/23/23cc9309913cea53ec2c59896a808be1
new file mode 100644
index 00000000..b9c163c4
Binary files /dev/null and b/clock/Library/Artifacts/23/23cc9309913cea53ec2c59896a808be1 differ
diff --git a/clock/Library/Artifacts/23/23d75fd9c2bee2828427f0ce1eae246d b/clock/Library/Artifacts/23/23d75fd9c2bee2828427f0ce1eae246d
new file mode 100644
index 00000000..6ba4fde6
Binary files /dev/null and b/clock/Library/Artifacts/23/23d75fd9c2bee2828427f0ce1eae246d differ
diff --git a/clock/Library/Artifacts/24/2403f0d0d1a1b370abc990eb1418efa7 b/clock/Library/Artifacts/24/2403f0d0d1a1b370abc990eb1418efa7
new file mode 100644
index 00000000..2ad9c975
Binary files /dev/null and b/clock/Library/Artifacts/24/2403f0d0d1a1b370abc990eb1418efa7 differ
diff --git a/clock/Library/Artifacts/24/2405489ee7bd0c3c05ae039a8f3762ec b/clock/Library/Artifacts/24/2405489ee7bd0c3c05ae039a8f3762ec
new file mode 100644
index 00000000..4df266d6
Binary files /dev/null and b/clock/Library/Artifacts/24/2405489ee7bd0c3c05ae039a8f3762ec differ
diff --git a/clock/Library/Artifacts/24/24131a354367260c3b62e120effa1209 b/clock/Library/Artifacts/24/24131a354367260c3b62e120effa1209
new file mode 100644
index 00000000..e1a0ce7c
Binary files /dev/null and b/clock/Library/Artifacts/24/24131a354367260c3b62e120effa1209 differ
diff --git a/clock/Library/Artifacts/24/2430babd669e12f4e03460efcae83582 b/clock/Library/Artifacts/24/2430babd669e12f4e03460efcae83582
new file mode 100644
index 00000000..bae74093
Binary files /dev/null and b/clock/Library/Artifacts/24/2430babd669e12f4e03460efcae83582 differ
diff --git a/clock/Library/Artifacts/24/243d8d72e2b846590cf1ea87528ad36e b/clock/Library/Artifacts/24/243d8d72e2b846590cf1ea87528ad36e
new file mode 100644
index 00000000..802a68a1
Binary files /dev/null and b/clock/Library/Artifacts/24/243d8d72e2b846590cf1ea87528ad36e differ
diff --git a/clock/Library/Artifacts/24/243e442f6bcdd55694b27f37a846afa2 b/clock/Library/Artifacts/24/243e442f6bcdd55694b27f37a846afa2
new file mode 100644
index 00000000..82253770
Binary files /dev/null and b/clock/Library/Artifacts/24/243e442f6bcdd55694b27f37a846afa2 differ
diff --git a/clock/Library/Artifacts/24/24648ff130fbd05bfb840c5a99957ace b/clock/Library/Artifacts/24/24648ff130fbd05bfb840c5a99957ace
new file mode 100644
index 00000000..9f489fa2
Binary files /dev/null and b/clock/Library/Artifacts/24/24648ff130fbd05bfb840c5a99957ace differ
diff --git a/clock/Library/Artifacts/24/2476cd131fd2cdabe134a864a62ca1a1 b/clock/Library/Artifacts/24/2476cd131fd2cdabe134a864a62ca1a1
new file mode 100644
index 00000000..84f72669
Binary files /dev/null and b/clock/Library/Artifacts/24/2476cd131fd2cdabe134a864a62ca1a1 differ
diff --git a/clock/Library/Artifacts/24/2479c100cd690adeb2a9787f88a3feba b/clock/Library/Artifacts/24/2479c100cd690adeb2a9787f88a3feba
new file mode 100644
index 00000000..158a12ab
Binary files /dev/null and b/clock/Library/Artifacts/24/2479c100cd690adeb2a9787f88a3feba differ
diff --git a/clock/Library/Artifacts/24/24c39e75cefd8d9c29580b19a3d0125a b/clock/Library/Artifacts/24/24c39e75cefd8d9c29580b19a3d0125a
new file mode 100644
index 00000000..2287a117
Binary files /dev/null and b/clock/Library/Artifacts/24/24c39e75cefd8d9c29580b19a3d0125a differ
diff --git a/clock/Library/Artifacts/24/24e47df5cd5a2323d99db8299baa8135 b/clock/Library/Artifacts/24/24e47df5cd5a2323d99db8299baa8135
new file mode 100644
index 00000000..a66a85bc
Binary files /dev/null and b/clock/Library/Artifacts/24/24e47df5cd5a2323d99db8299baa8135 differ
diff --git a/clock/Library/Artifacts/25/2505c149a7d007406e5891f5c5f75789 b/clock/Library/Artifacts/25/2505c149a7d007406e5891f5c5f75789
new file mode 100644
index 00000000..d2f6fa07
Binary files /dev/null and b/clock/Library/Artifacts/25/2505c149a7d007406e5891f5c5f75789 differ
diff --git a/clock/Library/Artifacts/25/251d0e9e7a5615f04c2d357f34322eea b/clock/Library/Artifacts/25/251d0e9e7a5615f04c2d357f34322eea
new file mode 100644
index 00000000..b1013259
Binary files /dev/null and b/clock/Library/Artifacts/25/251d0e9e7a5615f04c2d357f34322eea differ
diff --git a/clock/Library/Artifacts/25/25263f9263224616e51bb7e4257b5d31 b/clock/Library/Artifacts/25/25263f9263224616e51bb7e4257b5d31
new file mode 100644
index 00000000..e45aa6b4
Binary files /dev/null and b/clock/Library/Artifacts/25/25263f9263224616e51bb7e4257b5d31 differ
diff --git a/clock/Library/Artifacts/25/253623650b36ff8d71ed3324171289a2 b/clock/Library/Artifacts/25/253623650b36ff8d71ed3324171289a2
new file mode 100644
index 00000000..2ea46f51
Binary files /dev/null and b/clock/Library/Artifacts/25/253623650b36ff8d71ed3324171289a2 differ
diff --git a/clock/Library/Artifacts/25/25c7754745f8a9ec364033c5dee21193 b/clock/Library/Artifacts/25/25c7754745f8a9ec364033c5dee21193
new file mode 100644
index 00000000..22da2455
Binary files /dev/null and b/clock/Library/Artifacts/25/25c7754745f8a9ec364033c5dee21193 differ
diff --git a/clock/Library/Artifacts/26/2602cd116610829e5353ac261741fc6e b/clock/Library/Artifacts/26/2602cd116610829e5353ac261741fc6e
new file mode 100644
index 00000000..f09da1b7
Binary files /dev/null and b/clock/Library/Artifacts/26/2602cd116610829e5353ac261741fc6e differ
diff --git a/clock/Library/Artifacts/26/261914f9621de6aaf151657e676b6f58 b/clock/Library/Artifacts/26/261914f9621de6aaf151657e676b6f58
new file mode 100644
index 00000000..2882ac66
Binary files /dev/null and b/clock/Library/Artifacts/26/261914f9621de6aaf151657e676b6f58 differ
diff --git a/clock/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 b/clock/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981
new file mode 100644
index 00000000..5c2fb6c6
Binary files /dev/null and b/clock/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 differ
diff --git a/clock/Library/Artifacts/26/263d3983c8148c2f31dfff27c7e188f9 b/clock/Library/Artifacts/26/263d3983c8148c2f31dfff27c7e188f9
new file mode 100644
index 00000000..09e1c7d7
Binary files /dev/null and b/clock/Library/Artifacts/26/263d3983c8148c2f31dfff27c7e188f9 differ
diff --git a/clock/Library/Artifacts/26/266c836e22819928c0eb8a629b61e946 b/clock/Library/Artifacts/26/266c836e22819928c0eb8a629b61e946
new file mode 100644
index 00000000..7a62ef3c
Binary files /dev/null and b/clock/Library/Artifacts/26/266c836e22819928c0eb8a629b61e946 differ
diff --git a/clock/Library/Artifacts/26/268328f517433959d1314b180697eb04 b/clock/Library/Artifacts/26/268328f517433959d1314b180697eb04
new file mode 100644
index 00000000..745910e9
Binary files /dev/null and b/clock/Library/Artifacts/26/268328f517433959d1314b180697eb04 differ
diff --git a/clock/Library/Artifacts/26/26b98171b08716b37841b4608bbf0639 b/clock/Library/Artifacts/26/26b98171b08716b37841b4608bbf0639
new file mode 100644
index 00000000..1b7a870f
Binary files /dev/null and b/clock/Library/Artifacts/26/26b98171b08716b37841b4608bbf0639 differ
diff --git a/clock/Library/Artifacts/26/26f2d420f1fb2c1d93d7f9f5d2e6252c b/clock/Library/Artifacts/26/26f2d420f1fb2c1d93d7f9f5d2e6252c
new file mode 100644
index 00000000..5a4d0049
Binary files /dev/null and b/clock/Library/Artifacts/26/26f2d420f1fb2c1d93d7f9f5d2e6252c differ
diff --git a/clock/Library/Artifacts/27/27453a25ed54b38154336812d3ab3e9d b/clock/Library/Artifacts/27/27453a25ed54b38154336812d3ab3e9d
new file mode 100644
index 00000000..292c9704
Binary files /dev/null and b/clock/Library/Artifacts/27/27453a25ed54b38154336812d3ab3e9d differ
diff --git a/clock/Library/Artifacts/27/274d349d86dec460404964fc672cc6cd b/clock/Library/Artifacts/27/274d349d86dec460404964fc672cc6cd
new file mode 100644
index 00000000..82ae5eed
Binary files /dev/null and b/clock/Library/Artifacts/27/274d349d86dec460404964fc672cc6cd differ
diff --git a/clock/Library/Artifacts/27/2754cca6cc4b80e84e0effe732e55527 b/clock/Library/Artifacts/27/2754cca6cc4b80e84e0effe732e55527
new file mode 100644
index 00000000..2e74ad28
Binary files /dev/null and b/clock/Library/Artifacts/27/2754cca6cc4b80e84e0effe732e55527 differ
diff --git a/clock/Library/Artifacts/27/275d94ec9e558c85b33943818c0e973d b/clock/Library/Artifacts/27/275d94ec9e558c85b33943818c0e973d
new file mode 100644
index 00000000..ab56be24
Binary files /dev/null and b/clock/Library/Artifacts/27/275d94ec9e558c85b33943818c0e973d differ
diff --git a/clock/Library/Artifacts/27/27a0187700e8837a4624dd4af68fd06e b/clock/Library/Artifacts/27/27a0187700e8837a4624dd4af68fd06e
new file mode 100644
index 00000000..8388eda6
Binary files /dev/null and b/clock/Library/Artifacts/27/27a0187700e8837a4624dd4af68fd06e differ
diff --git a/clock/Library/Artifacts/27/27e81783c16c0c1ac09e010bcdda548a b/clock/Library/Artifacts/27/27e81783c16c0c1ac09e010bcdda548a
new file mode 100644
index 00000000..df7f7c17
Binary files /dev/null and b/clock/Library/Artifacts/27/27e81783c16c0c1ac09e010bcdda548a differ
diff --git a/clock/Library/Artifacts/28/280fe8ba7c2018ff20d6a5adbd8c76b4 b/clock/Library/Artifacts/28/280fe8ba7c2018ff20d6a5adbd8c76b4
new file mode 100644
index 00000000..f6eb34d7
Binary files /dev/null and b/clock/Library/Artifacts/28/280fe8ba7c2018ff20d6a5adbd8c76b4 differ
diff --git a/clock/Library/Artifacts/28/283cc5f85fc2e6732dfd483e568aa402 b/clock/Library/Artifacts/28/283cc5f85fc2e6732dfd483e568aa402
new file mode 100644
index 00000000..3397b5f3
Binary files /dev/null and b/clock/Library/Artifacts/28/283cc5f85fc2e6732dfd483e568aa402 differ
diff --git a/clock/Library/Artifacts/28/2849c413ebc05ac06bfa064986877869 b/clock/Library/Artifacts/28/2849c413ebc05ac06bfa064986877869
new file mode 100644
index 00000000..bd8cbf8f
Binary files /dev/null and b/clock/Library/Artifacts/28/2849c413ebc05ac06bfa064986877869 differ
diff --git a/clock/Library/Artifacts/28/287421c7271089cf5faf5f0d120f2a3c b/clock/Library/Artifacts/28/287421c7271089cf5faf5f0d120f2a3c
new file mode 100644
index 00000000..4f4263c9
Binary files /dev/null and b/clock/Library/Artifacts/28/287421c7271089cf5faf5f0d120f2a3c differ
diff --git a/clock/Library/Artifacts/28/287b4a4aa3c43be25212c84b7ecd062b b/clock/Library/Artifacts/28/287b4a4aa3c43be25212c84b7ecd062b
new file mode 100644
index 00000000..9e146e4d
Binary files /dev/null and b/clock/Library/Artifacts/28/287b4a4aa3c43be25212c84b7ecd062b differ
diff --git a/clock/Library/Artifacts/28/287f4640b574949f13a945bc19d2ae37 b/clock/Library/Artifacts/28/287f4640b574949f13a945bc19d2ae37
new file mode 100644
index 00000000..6a7d991a
Binary files /dev/null and b/clock/Library/Artifacts/28/287f4640b574949f13a945bc19d2ae37 differ
diff --git a/clock/Library/Artifacts/28/28b61b169a7b3ac87314a34c151d8f28 b/clock/Library/Artifacts/28/28b61b169a7b3ac87314a34c151d8f28
new file mode 100644
index 00000000..4aaaa06a
Binary files /dev/null and b/clock/Library/Artifacts/28/28b61b169a7b3ac87314a34c151d8f28 differ
diff --git a/clock/Library/Artifacts/28/28bc4633d951de29c1456d14370f931f b/clock/Library/Artifacts/28/28bc4633d951de29c1456d14370f931f
new file mode 100644
index 00000000..18735c70
Binary files /dev/null and b/clock/Library/Artifacts/28/28bc4633d951de29c1456d14370f931f differ
diff --git a/clock/Library/Artifacts/28/28c6c161605f746c4ea420bfbd1f9c63 b/clock/Library/Artifacts/28/28c6c161605f746c4ea420bfbd1f9c63
new file mode 100644
index 00000000..62c6fc46
Binary files /dev/null and b/clock/Library/Artifacts/28/28c6c161605f746c4ea420bfbd1f9c63 differ
diff --git a/clock/Library/Artifacts/28/28f3f2590854b1e66d0937b2340e9467 b/clock/Library/Artifacts/28/28f3f2590854b1e66d0937b2340e9467
new file mode 100644
index 00000000..49bca760
Binary files /dev/null and b/clock/Library/Artifacts/28/28f3f2590854b1e66d0937b2340e9467 differ
diff --git a/clock/Library/Artifacts/28/28f76cfdb3519a60994e5f38aadb27ad b/clock/Library/Artifacts/28/28f76cfdb3519a60994e5f38aadb27ad
new file mode 100644
index 00000000..9586bf0e
Binary files /dev/null and b/clock/Library/Artifacts/28/28f76cfdb3519a60994e5f38aadb27ad differ
diff --git a/clock/Library/Artifacts/29/297441dafb39ca3c1c28910e6bc1e37d b/clock/Library/Artifacts/29/297441dafb39ca3c1c28910e6bc1e37d
new file mode 100644
index 00000000..c56dbcd1
Binary files /dev/null and b/clock/Library/Artifacts/29/297441dafb39ca3c1c28910e6bc1e37d differ
diff --git a/clock/Library/Artifacts/29/298174bbe26882c2742b3ef9bce4e3eb b/clock/Library/Artifacts/29/298174bbe26882c2742b3ef9bce4e3eb
new file mode 100644
index 00000000..6c5de40a
Binary files /dev/null and b/clock/Library/Artifacts/29/298174bbe26882c2742b3ef9bce4e3eb differ
diff --git a/clock/Library/Artifacts/29/29f60ccc8b07aeee34412745ada7b49c b/clock/Library/Artifacts/29/29f60ccc8b07aeee34412745ada7b49c
new file mode 100644
index 00000000..6517a960
Binary files /dev/null and b/clock/Library/Artifacts/29/29f60ccc8b07aeee34412745ada7b49c differ
diff --git a/clock/Library/Artifacts/29/29f9bd2bb801de28c243009b8d59e3e3 b/clock/Library/Artifacts/29/29f9bd2bb801de28c243009b8d59e3e3
new file mode 100644
index 00000000..83f74e92
Binary files /dev/null and b/clock/Library/Artifacts/29/29f9bd2bb801de28c243009b8d59e3e3 differ
diff --git a/clock/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 b/clock/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05
new file mode 100644
index 00000000..b70fff49
Binary files /dev/null and b/clock/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 differ
diff --git a/clock/Library/Artifacts/2a/2acc6ac66550b846f86493d32b4d46ec b/clock/Library/Artifacts/2a/2acc6ac66550b846f86493d32b4d46ec
new file mode 100644
index 00000000..0ed50252
Binary files /dev/null and b/clock/Library/Artifacts/2a/2acc6ac66550b846f86493d32b4d46ec differ
diff --git a/clock/Library/Artifacts/2b/2b188fda1a4bd1d5b1834eb7925d464a b/clock/Library/Artifacts/2b/2b188fda1a4bd1d5b1834eb7925d464a
new file mode 100644
index 00000000..3c49aab6
Binary files /dev/null and b/clock/Library/Artifacts/2b/2b188fda1a4bd1d5b1834eb7925d464a differ
diff --git a/clock/Library/Artifacts/2b/2bc85fd9f4243eeb03c9cb4746c6108f b/clock/Library/Artifacts/2b/2bc85fd9f4243eeb03c9cb4746c6108f
new file mode 100644
index 00000000..f637e46e
Binary files /dev/null and b/clock/Library/Artifacts/2b/2bc85fd9f4243eeb03c9cb4746c6108f differ
diff --git a/clock/Library/Artifacts/2c/2c16227aa1f646ba3dbb8e586f7b72c9 b/clock/Library/Artifacts/2c/2c16227aa1f646ba3dbb8e586f7b72c9
new file mode 100644
index 00000000..d1cfbcec
Binary files /dev/null and b/clock/Library/Artifacts/2c/2c16227aa1f646ba3dbb8e586f7b72c9 differ
diff --git a/clock/Library/Artifacts/2c/2c3d2c1a83ebe964ba3b963cf3005e75 b/clock/Library/Artifacts/2c/2c3d2c1a83ebe964ba3b963cf3005e75
new file mode 100644
index 00000000..44c966eb
Binary files /dev/null and b/clock/Library/Artifacts/2c/2c3d2c1a83ebe964ba3b963cf3005e75 differ
diff --git a/clock/Library/Artifacts/2c/2c8944d64332c3f0784f9fc57782476a b/clock/Library/Artifacts/2c/2c8944d64332c3f0784f9fc57782476a
new file mode 100644
index 00000000..059452c4
Binary files /dev/null and b/clock/Library/Artifacts/2c/2c8944d64332c3f0784f9fc57782476a differ
diff --git a/clock/Library/Artifacts/2c/2c9b8c9dce0d4675eac54e96cafc3062 b/clock/Library/Artifacts/2c/2c9b8c9dce0d4675eac54e96cafc3062
new file mode 100644
index 00000000..1840aecc
Binary files /dev/null and b/clock/Library/Artifacts/2c/2c9b8c9dce0d4675eac54e96cafc3062 differ
diff --git a/clock/Library/Artifacts/2c/2c9ebd751bbbdff635b8287399cdad1f b/clock/Library/Artifacts/2c/2c9ebd751bbbdff635b8287399cdad1f
new file mode 100644
index 00000000..b2e7419a
Binary files /dev/null and b/clock/Library/Artifacts/2c/2c9ebd751bbbdff635b8287399cdad1f differ
diff --git a/clock/Library/Artifacts/2c/2ca277488e2619741191fa5b10e2ab24 b/clock/Library/Artifacts/2c/2ca277488e2619741191fa5b10e2ab24
new file mode 100644
index 00000000..01d96f69
Binary files /dev/null and b/clock/Library/Artifacts/2c/2ca277488e2619741191fa5b10e2ab24 differ
diff --git a/clock/Library/Artifacts/2c/2cad4e095ff04101a659337545070989 b/clock/Library/Artifacts/2c/2cad4e095ff04101a659337545070989
new file mode 100644
index 00000000..edfaa2f7
Binary files /dev/null and b/clock/Library/Artifacts/2c/2cad4e095ff04101a659337545070989 differ
diff --git a/clock/Library/Artifacts/2c/2cc69b248a5536ab08f7dcb8ee07b3f0 b/clock/Library/Artifacts/2c/2cc69b248a5536ab08f7dcb8ee07b3f0
new file mode 100644
index 00000000..66166923
Binary files /dev/null and b/clock/Library/Artifacts/2c/2cc69b248a5536ab08f7dcb8ee07b3f0 differ
diff --git a/clock/Library/Artifacts/2c/2cd02f68aa0f3eb2788c465c6ab490f0 b/clock/Library/Artifacts/2c/2cd02f68aa0f3eb2788c465c6ab490f0
new file mode 100644
index 00000000..d8a79492
Binary files /dev/null and b/clock/Library/Artifacts/2c/2cd02f68aa0f3eb2788c465c6ab490f0 differ
diff --git a/clock/Library/Artifacts/2d/2d24ff0caeeeb46a1df40d9ad81b0c15 b/clock/Library/Artifacts/2d/2d24ff0caeeeb46a1df40d9ad81b0c15
new file mode 100644
index 00000000..d90fa4b9
Binary files /dev/null and b/clock/Library/Artifacts/2d/2d24ff0caeeeb46a1df40d9ad81b0c15 differ
diff --git a/clock/Library/Artifacts/2d/2d3e24ba4d1f3c0c4b050048a26757df b/clock/Library/Artifacts/2d/2d3e24ba4d1f3c0c4b050048a26757df
new file mode 100644
index 00000000..115f63ed
Binary files /dev/null and b/clock/Library/Artifacts/2d/2d3e24ba4d1f3c0c4b050048a26757df differ
diff --git a/clock/Library/Artifacts/2d/2d5026d7847095f27b0fd7870062e6e8 b/clock/Library/Artifacts/2d/2d5026d7847095f27b0fd7870062e6e8
new file mode 100644
index 00000000..765fbf59
Binary files /dev/null and b/clock/Library/Artifacts/2d/2d5026d7847095f27b0fd7870062e6e8 differ
diff --git a/clock/Library/Artifacts/2d/2df85a75e73ada62d1a2fa9b6fb7180a b/clock/Library/Artifacts/2d/2df85a75e73ada62d1a2fa9b6fb7180a
new file mode 100644
index 00000000..c6b76b41
Binary files /dev/null and b/clock/Library/Artifacts/2d/2df85a75e73ada62d1a2fa9b6fb7180a differ
diff --git a/clock/Library/Artifacts/2e/2e08d07a7daf431a06f206e16a51db3e b/clock/Library/Artifacts/2e/2e08d07a7daf431a06f206e16a51db3e
new file mode 100644
index 00000000..62e0cd25
Binary files /dev/null and b/clock/Library/Artifacts/2e/2e08d07a7daf431a06f206e16a51db3e differ
diff --git a/clock/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f b/clock/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f
new file mode 100644
index 00000000..45ed57ed
Binary files /dev/null and b/clock/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f differ
diff --git a/clock/Library/Artifacts/2e/2e69cdcd87332a5a087940da67f85ac5 b/clock/Library/Artifacts/2e/2e69cdcd87332a5a087940da67f85ac5
new file mode 100644
index 00000000..f59f2727
Binary files /dev/null and b/clock/Library/Artifacts/2e/2e69cdcd87332a5a087940da67f85ac5 differ
diff --git a/clock/Library/Artifacts/2e/2e9d7f046fd951558e5a14e03ae1fac4 b/clock/Library/Artifacts/2e/2e9d7f046fd951558e5a14e03ae1fac4
new file mode 100644
index 00000000..ae59c2e7
Binary files /dev/null and b/clock/Library/Artifacts/2e/2e9d7f046fd951558e5a14e03ae1fac4 differ
diff --git a/clock/Library/Artifacts/2e/2ed1d8f10907b05897e590646514e4b7 b/clock/Library/Artifacts/2e/2ed1d8f10907b05897e590646514e4b7
new file mode 100644
index 00000000..360df4c7
Binary files /dev/null and b/clock/Library/Artifacts/2e/2ed1d8f10907b05897e590646514e4b7 differ
diff --git a/clock/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f b/clock/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f
new file mode 100644
index 00000000..09dae986
Binary files /dev/null and b/clock/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f differ
diff --git a/clock/Library/Artifacts/2e/2ee362d84d364c7927eb1b0755291c5e b/clock/Library/Artifacts/2e/2ee362d84d364c7927eb1b0755291c5e
new file mode 100644
index 00000000..ac8eb91f
Binary files /dev/null and b/clock/Library/Artifacts/2e/2ee362d84d364c7927eb1b0755291c5e differ
diff --git a/clock/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d b/clock/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d
new file mode 100644
index 00000000..8dd2456e
Binary files /dev/null and b/clock/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d differ
diff --git a/clock/Library/Artifacts/2f/2f426f6f3b073bc89510d7dba0f67193 b/clock/Library/Artifacts/2f/2f426f6f3b073bc89510d7dba0f67193
new file mode 100644
index 00000000..2b1eda8f
Binary files /dev/null and b/clock/Library/Artifacts/2f/2f426f6f3b073bc89510d7dba0f67193 differ
diff --git a/clock/Library/Artifacts/2f/2f4d6a176d3c8c8cd4b198754e3ab9c9 b/clock/Library/Artifacts/2f/2f4d6a176d3c8c8cd4b198754e3ab9c9
new file mode 100644
index 00000000..4d5b2d42
Binary files /dev/null and b/clock/Library/Artifacts/2f/2f4d6a176d3c8c8cd4b198754e3ab9c9 differ
diff --git a/clock/Library/Artifacts/2f/2f5d98f7d4ad2bc1364ee90df7aa1495 b/clock/Library/Artifacts/2f/2f5d98f7d4ad2bc1364ee90df7aa1495
new file mode 100644
index 00000000..5b00c890
Binary files /dev/null and b/clock/Library/Artifacts/2f/2f5d98f7d4ad2bc1364ee90df7aa1495 differ
diff --git a/clock/Library/Artifacts/2f/2f7ddfaf2169f9843128f02470d25a1e b/clock/Library/Artifacts/2f/2f7ddfaf2169f9843128f02470d25a1e
new file mode 100644
index 00000000..c8ff4fe0
Binary files /dev/null and b/clock/Library/Artifacts/2f/2f7ddfaf2169f9843128f02470d25a1e differ
diff --git a/clock/Library/Artifacts/2f/2f8fcd67dcaa6f5c125b168fa87fe62d b/clock/Library/Artifacts/2f/2f8fcd67dcaa6f5c125b168fa87fe62d
new file mode 100644
index 00000000..2db368eb
Binary files /dev/null and b/clock/Library/Artifacts/2f/2f8fcd67dcaa6f5c125b168fa87fe62d differ
diff --git a/clock/Library/Artifacts/2f/2fef6a58951c01d6efe565a5d4c23824 b/clock/Library/Artifacts/2f/2fef6a58951c01d6efe565a5d4c23824
new file mode 100644
index 00000000..21aa3677
Binary files /dev/null and b/clock/Library/Artifacts/2f/2fef6a58951c01d6efe565a5d4c23824 differ
diff --git a/clock/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 b/clock/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47
new file mode 100644
index 00000000..162bf341
Binary files /dev/null and b/clock/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 differ
diff --git a/clock/Library/Artifacts/30/30203721e050dac4431d3cc552dd6f9d b/clock/Library/Artifacts/30/30203721e050dac4431d3cc552dd6f9d
new file mode 100644
index 00000000..12732525
Binary files /dev/null and b/clock/Library/Artifacts/30/30203721e050dac4431d3cc552dd6f9d differ
diff --git a/clock/Library/Artifacts/30/305255050af0802d70cbdbe2bc822516 b/clock/Library/Artifacts/30/305255050af0802d70cbdbe2bc822516
new file mode 100644
index 00000000..3effbc1e
Binary files /dev/null and b/clock/Library/Artifacts/30/305255050af0802d70cbdbe2bc822516 differ
diff --git a/clock/Library/Artifacts/30/307f86e4b28472200be4bea16870c0bb b/clock/Library/Artifacts/30/307f86e4b28472200be4bea16870c0bb
new file mode 100644
index 00000000..2b3d3956
Binary files /dev/null and b/clock/Library/Artifacts/30/307f86e4b28472200be4bea16870c0bb differ
diff --git a/clock/Library/Artifacts/30/3091fe3780d0a39978a6fb42e6521b08 b/clock/Library/Artifacts/30/3091fe3780d0a39978a6fb42e6521b08
new file mode 100644
index 00000000..800e1112
Binary files /dev/null and b/clock/Library/Artifacts/30/3091fe3780d0a39978a6fb42e6521b08 differ
diff --git a/clock/Library/Artifacts/30/3097c99359749b266b586bf791d5b3d9 b/clock/Library/Artifacts/30/3097c99359749b266b586bf791d5b3d9
new file mode 100644
index 00000000..d52f2b42
Binary files /dev/null and b/clock/Library/Artifacts/30/3097c99359749b266b586bf791d5b3d9 differ
diff --git a/clock/Library/Artifacts/30/30c03d5aca324a9a5bb603856a6323bd b/clock/Library/Artifacts/30/30c03d5aca324a9a5bb603856a6323bd
new file mode 100644
index 00000000..ff9ba8b7
Binary files /dev/null and b/clock/Library/Artifacts/30/30c03d5aca324a9a5bb603856a6323bd differ
diff --git a/clock/Library/Artifacts/30/30e04922499df5b0d0497a29ff208cd2 b/clock/Library/Artifacts/30/30e04922499df5b0d0497a29ff208cd2
new file mode 100644
index 00000000..e1799826
Binary files /dev/null and b/clock/Library/Artifacts/30/30e04922499df5b0d0497a29ff208cd2 differ
diff --git a/clock/Library/Artifacts/31/3139f1f1b18c817111c85fa1b34a3f7a b/clock/Library/Artifacts/31/3139f1f1b18c817111c85fa1b34a3f7a
new file mode 100644
index 00000000..13eb790d
Binary files /dev/null and b/clock/Library/Artifacts/31/3139f1f1b18c817111c85fa1b34a3f7a differ
diff --git a/clock/Library/Artifacts/31/3151228b7259e0c6e0f9f938fc6ec418 b/clock/Library/Artifacts/31/3151228b7259e0c6e0f9f938fc6ec418
new file mode 100644
index 00000000..3d55f13b
Binary files /dev/null and b/clock/Library/Artifacts/31/3151228b7259e0c6e0f9f938fc6ec418 differ
diff --git a/clock/Library/Artifacts/31/3186d9690cf1cbd0860d986106a3cca2 b/clock/Library/Artifacts/31/3186d9690cf1cbd0860d986106a3cca2
new file mode 100644
index 00000000..22c268f0
Binary files /dev/null and b/clock/Library/Artifacts/31/3186d9690cf1cbd0860d986106a3cca2 differ
diff --git a/clock/Library/Artifacts/31/31a25bd3d8432ae1c4a76e346bc8f14c b/clock/Library/Artifacts/31/31a25bd3d8432ae1c4a76e346bc8f14c
new file mode 100644
index 00000000..ec5c55a4
Binary files /dev/null and b/clock/Library/Artifacts/31/31a25bd3d8432ae1c4a76e346bc8f14c differ
diff --git a/clock/Library/Artifacts/31/31bd616991bc3055b9697cf7894ed642 b/clock/Library/Artifacts/31/31bd616991bc3055b9697cf7894ed642
new file mode 100644
index 00000000..07a915fe
Binary files /dev/null and b/clock/Library/Artifacts/31/31bd616991bc3055b9697cf7894ed642 differ
diff --git a/clock/Library/Artifacts/31/31fd346184ea82cf00ed08a6ed19b113 b/clock/Library/Artifacts/31/31fd346184ea82cf00ed08a6ed19b113
new file mode 100644
index 00000000..6ad298bd
Binary files /dev/null and b/clock/Library/Artifacts/31/31fd346184ea82cf00ed08a6ed19b113 differ
diff --git a/clock/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 b/clock/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363
new file mode 100644
index 00000000..6429dfd0
Binary files /dev/null and b/clock/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 differ
diff --git a/clock/Library/Artifacts/32/324983fe4be521feb6e84e078b72ef30 b/clock/Library/Artifacts/32/324983fe4be521feb6e84e078b72ef30
new file mode 100644
index 00000000..0a3adb53
Binary files /dev/null and b/clock/Library/Artifacts/32/324983fe4be521feb6e84e078b72ef30 differ
diff --git a/clock/Library/Artifacts/32/32649cb7b5c3f4c0001fe43130179919 b/clock/Library/Artifacts/32/32649cb7b5c3f4c0001fe43130179919
new file mode 100644
index 00000000..c51c1040
Binary files /dev/null and b/clock/Library/Artifacts/32/32649cb7b5c3f4c0001fe43130179919 differ
diff --git a/clock/Library/Artifacts/32/32a68feebfcdb5b7b32d02f9ee0735bd b/clock/Library/Artifacts/32/32a68feebfcdb5b7b32d02f9ee0735bd
new file mode 100644
index 00000000..0d669435
Binary files /dev/null and b/clock/Library/Artifacts/32/32a68feebfcdb5b7b32d02f9ee0735bd differ
diff --git a/clock/Library/Artifacts/32/32b8de4784afa28f169b96ee81e8e2fd b/clock/Library/Artifacts/32/32b8de4784afa28f169b96ee81e8e2fd
new file mode 100644
index 00000000..2174e840
Binary files /dev/null and b/clock/Library/Artifacts/32/32b8de4784afa28f169b96ee81e8e2fd differ
diff --git a/clock/Library/Artifacts/33/3381b3ed9904928cf38fdce3590a57a6 b/clock/Library/Artifacts/33/3381b3ed9904928cf38fdce3590a57a6
new file mode 100644
index 00000000..e608bacd
Binary files /dev/null and b/clock/Library/Artifacts/33/3381b3ed9904928cf38fdce3590a57a6 differ
diff --git a/clock/Library/Artifacts/33/33f1065634dd655469bf5e9ef26795a7 b/clock/Library/Artifacts/33/33f1065634dd655469bf5e9ef26795a7
new file mode 100644
index 00000000..dab384af
Binary files /dev/null and b/clock/Library/Artifacts/33/33f1065634dd655469bf5e9ef26795a7 differ
diff --git a/clock/Library/Artifacts/34/3419806a837ba1fc9a2cb45929626291 b/clock/Library/Artifacts/34/3419806a837ba1fc9a2cb45929626291
new file mode 100644
index 00000000..aa204e53
Binary files /dev/null and b/clock/Library/Artifacts/34/3419806a837ba1fc9a2cb45929626291 differ
diff --git a/clock/Library/Artifacts/34/345158e86427605dab7d96a7112c2a5e b/clock/Library/Artifacts/34/345158e86427605dab7d96a7112c2a5e
new file mode 100644
index 00000000..eecdf655
Binary files /dev/null and b/clock/Library/Artifacts/34/345158e86427605dab7d96a7112c2a5e differ
diff --git a/clock/Library/Artifacts/34/348d53935bc89235ea89aa38b9fafdda b/clock/Library/Artifacts/34/348d53935bc89235ea89aa38b9fafdda
new file mode 100644
index 00000000..1b42872e
Binary files /dev/null and b/clock/Library/Artifacts/34/348d53935bc89235ea89aa38b9fafdda differ
diff --git a/clock/Library/Artifacts/34/34eff001b92b488886f0d2d7ee967e38 b/clock/Library/Artifacts/34/34eff001b92b488886f0d2d7ee967e38
new file mode 100644
index 00000000..9365a64a
Binary files /dev/null and b/clock/Library/Artifacts/34/34eff001b92b488886f0d2d7ee967e38 differ
diff --git a/clock/Library/Artifacts/35/352031d2fa1a951f4a60bfbc1c6702f5 b/clock/Library/Artifacts/35/352031d2fa1a951f4a60bfbc1c6702f5
new file mode 100644
index 00000000..465d8c85
Binary files /dev/null and b/clock/Library/Artifacts/35/352031d2fa1a951f4a60bfbc1c6702f5 differ
diff --git a/clock/Library/Artifacts/35/35894fd4d4ff43f6fba997aab07047bf b/clock/Library/Artifacts/35/35894fd4d4ff43f6fba997aab07047bf
new file mode 100644
index 00000000..2b4cf12e
Binary files /dev/null and b/clock/Library/Artifacts/35/35894fd4d4ff43f6fba997aab07047bf differ
diff --git a/clock/Library/Artifacts/35/358b30307b8aaccdad2f7cd7db9a86d8 b/clock/Library/Artifacts/35/358b30307b8aaccdad2f7cd7db9a86d8
new file mode 100644
index 00000000..d608604a
Binary files /dev/null and b/clock/Library/Artifacts/35/358b30307b8aaccdad2f7cd7db9a86d8 differ
diff --git a/clock/Library/Artifacts/35/35dafdf9aed2f28be2f7e2bd49613b8b b/clock/Library/Artifacts/35/35dafdf9aed2f28be2f7e2bd49613b8b
new file mode 100644
index 00000000..1c90061c
Binary files /dev/null and b/clock/Library/Artifacts/35/35dafdf9aed2f28be2f7e2bd49613b8b differ
diff --git a/clock/Library/Artifacts/36/36224068e4b936a22f5f61e83b247954 b/clock/Library/Artifacts/36/36224068e4b936a22f5f61e83b247954
new file mode 100644
index 00000000..e997cbe9
Binary files /dev/null and b/clock/Library/Artifacts/36/36224068e4b936a22f5f61e83b247954 differ
diff --git a/clock/Library/Artifacts/36/36339863cfceb85e705aa4f35df005f0 b/clock/Library/Artifacts/36/36339863cfceb85e705aa4f35df005f0
new file mode 100644
index 00000000..433cf4d4
Binary files /dev/null and b/clock/Library/Artifacts/36/36339863cfceb85e705aa4f35df005f0 differ
diff --git a/clock/Library/Artifacts/36/3653c1924bcda56148685c30f3472190 b/clock/Library/Artifacts/36/3653c1924bcda56148685c30f3472190
new file mode 100644
index 00000000..a356282f
Binary files /dev/null and b/clock/Library/Artifacts/36/3653c1924bcda56148685c30f3472190 differ
diff --git a/clock/Library/Artifacts/36/36875e2a541bfea4487b544572389997 b/clock/Library/Artifacts/36/36875e2a541bfea4487b544572389997
new file mode 100644
index 00000000..5ecf5f5e
Binary files /dev/null and b/clock/Library/Artifacts/36/36875e2a541bfea4487b544572389997 differ
diff --git a/clock/Library/Artifacts/36/3696b6f4263ba52870fea021e224e566 b/clock/Library/Artifacts/36/3696b6f4263ba52870fea021e224e566
new file mode 100644
index 00000000..514a3e5e
Binary files /dev/null and b/clock/Library/Artifacts/36/3696b6f4263ba52870fea021e224e566 differ
diff --git a/clock/Library/Artifacts/36/369ed401c890ff3a1a89fa292cc37363 b/clock/Library/Artifacts/36/369ed401c890ff3a1a89fa292cc37363
new file mode 100644
index 00000000..f122c2b4
Binary files /dev/null and b/clock/Library/Artifacts/36/369ed401c890ff3a1a89fa292cc37363 differ
diff --git a/clock/Library/Artifacts/36/36a1615a39ba28033597342c68f0bc11 b/clock/Library/Artifacts/36/36a1615a39ba28033597342c68f0bc11
new file mode 100644
index 00000000..1a3f6810
Binary files /dev/null and b/clock/Library/Artifacts/36/36a1615a39ba28033597342c68f0bc11 differ
diff --git a/clock/Library/Artifacts/36/36a2de09fb33c2565c0993dfa6e6c90a b/clock/Library/Artifacts/36/36a2de09fb33c2565c0993dfa6e6c90a
new file mode 100644
index 00000000..4380526c
Binary files /dev/null and b/clock/Library/Artifacts/36/36a2de09fb33c2565c0993dfa6e6c90a differ
diff --git a/clock/Library/Artifacts/36/36b06f52f8ca6edd49212592929954ea b/clock/Library/Artifacts/36/36b06f52f8ca6edd49212592929954ea
new file mode 100644
index 00000000..d8d1b4e6
Binary files /dev/null and b/clock/Library/Artifacts/36/36b06f52f8ca6edd49212592929954ea differ
diff --git a/clock/Library/Artifacts/36/36b780547d20a4a0993e4ed923737532 b/clock/Library/Artifacts/36/36b780547d20a4a0993e4ed923737532
new file mode 100644
index 00000000..79aafa64
Binary files /dev/null and b/clock/Library/Artifacts/36/36b780547d20a4a0993e4ed923737532 differ
diff --git a/clock/Library/Artifacts/36/36eb3e9b583eb037426c3d8fd74dc57b b/clock/Library/Artifacts/36/36eb3e9b583eb037426c3d8fd74dc57b
new file mode 100644
index 00000000..c1758308
Binary files /dev/null and b/clock/Library/Artifacts/36/36eb3e9b583eb037426c3d8fd74dc57b differ
diff --git a/clock/Library/Artifacts/37/372386564b0f6514bbe65f01522c3cb9 b/clock/Library/Artifacts/37/372386564b0f6514bbe65f01522c3cb9
new file mode 100644
index 00000000..7e03b3f4
Binary files /dev/null and b/clock/Library/Artifacts/37/372386564b0f6514bbe65f01522c3cb9 differ
diff --git a/clock/Library/Artifacts/37/37454fefed96a740aa42d55fc3a33119 b/clock/Library/Artifacts/37/37454fefed96a740aa42d55fc3a33119
new file mode 100644
index 00000000..9ce1ddd1
Binary files /dev/null and b/clock/Library/Artifacts/37/37454fefed96a740aa42d55fc3a33119 differ
diff --git a/clock/Library/Artifacts/37/37539e848e363e047ab11bbb9a641410 b/clock/Library/Artifacts/37/37539e848e363e047ab11bbb9a641410
new file mode 100644
index 00000000..b8c31d76
Binary files /dev/null and b/clock/Library/Artifacts/37/37539e848e363e047ab11bbb9a641410 differ
diff --git a/clock/Library/Artifacts/37/377709f1a394bc91068e99d0c83e521a b/clock/Library/Artifacts/37/377709f1a394bc91068e99d0c83e521a
new file mode 100644
index 00000000..e36283e1
Binary files /dev/null and b/clock/Library/Artifacts/37/377709f1a394bc91068e99d0c83e521a differ
diff --git a/clock/Library/Artifacts/37/379acde67e7532a9471bf6fcf8ade805 b/clock/Library/Artifacts/37/379acde67e7532a9471bf6fcf8ade805
new file mode 100644
index 00000000..f0e636bc
Binary files /dev/null and b/clock/Library/Artifacts/37/379acde67e7532a9471bf6fcf8ade805 differ
diff --git a/clock/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 b/clock/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205
new file mode 100644
index 00000000..c3028e4c
Binary files /dev/null and b/clock/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 differ
diff --git a/clock/Library/Artifacts/37/37e3295097d1b7bb39558e2ae511afc6 b/clock/Library/Artifacts/37/37e3295097d1b7bb39558e2ae511afc6
new file mode 100644
index 00000000..d8512079
Binary files /dev/null and b/clock/Library/Artifacts/37/37e3295097d1b7bb39558e2ae511afc6 differ
diff --git a/clock/Library/Artifacts/38/384de0e6499d67137a541ae360fa11d2 b/clock/Library/Artifacts/38/384de0e6499d67137a541ae360fa11d2
new file mode 100644
index 00000000..747f0a02
Binary files /dev/null and b/clock/Library/Artifacts/38/384de0e6499d67137a541ae360fa11d2 differ
diff --git a/clock/Library/Artifacts/38/385c509d9162ef8d07d6f267b3d8db49 b/clock/Library/Artifacts/38/385c509d9162ef8d07d6f267b3d8db49
new file mode 100644
index 00000000..741d488c
Binary files /dev/null and b/clock/Library/Artifacts/38/385c509d9162ef8d07d6f267b3d8db49 differ
diff --git a/clock/Library/Artifacts/38/38a0838b273551a3887e1cb4bdefb073 b/clock/Library/Artifacts/38/38a0838b273551a3887e1cb4bdefb073
new file mode 100644
index 00000000..bf7ad021
Binary files /dev/null and b/clock/Library/Artifacts/38/38a0838b273551a3887e1cb4bdefb073 differ
diff --git a/clock/Library/Artifacts/38/38a5e89ab7ca8911c27632a43164356e b/clock/Library/Artifacts/38/38a5e89ab7ca8911c27632a43164356e
new file mode 100644
index 00000000..21bf82c2
Binary files /dev/null and b/clock/Library/Artifacts/38/38a5e89ab7ca8911c27632a43164356e differ
diff --git a/clock/Library/Artifacts/39/390d8f522a54df349a4e3bb05fbbf750 b/clock/Library/Artifacts/39/390d8f522a54df349a4e3bb05fbbf750
new file mode 100644
index 00000000..bbb68ff0
Binary files /dev/null and b/clock/Library/Artifacts/39/390d8f522a54df349a4e3bb05fbbf750 differ
diff --git a/clock/Library/Artifacts/39/392aa6ed9cf939e0da48d06857bef3b6 b/clock/Library/Artifacts/39/392aa6ed9cf939e0da48d06857bef3b6
new file mode 100644
index 00000000..e0ab75fe
Binary files /dev/null and b/clock/Library/Artifacts/39/392aa6ed9cf939e0da48d06857bef3b6 differ
diff --git a/clock/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 b/clock/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08
new file mode 100644
index 00000000..12cebf3d
Binary files /dev/null and b/clock/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 differ
diff --git a/clock/Library/Artifacts/39/39908ddd50e35892dbda8e3a5f8a8dc5 b/clock/Library/Artifacts/39/39908ddd50e35892dbda8e3a5f8a8dc5
new file mode 100644
index 00000000..c8793d84
Binary files /dev/null and b/clock/Library/Artifacts/39/39908ddd50e35892dbda8e3a5f8a8dc5 differ
diff --git a/clock/Library/Artifacts/39/3991056d747fd45016d1c80a3f1a2f5e b/clock/Library/Artifacts/39/3991056d747fd45016d1c80a3f1a2f5e
new file mode 100644
index 00000000..b67d7f18
Binary files /dev/null and b/clock/Library/Artifacts/39/3991056d747fd45016d1c80a3f1a2f5e differ
diff --git a/clock/Library/Artifacts/39/39a14cd3fbb1ee8efcec9d9100559c75 b/clock/Library/Artifacts/39/39a14cd3fbb1ee8efcec9d9100559c75
new file mode 100644
index 00000000..7cd098df
Binary files /dev/null and b/clock/Library/Artifacts/39/39a14cd3fbb1ee8efcec9d9100559c75 differ
diff --git a/clock/Library/Artifacts/39/39a3cc357473286dcfafc4325758d7cc b/clock/Library/Artifacts/39/39a3cc357473286dcfafc4325758d7cc
new file mode 100644
index 00000000..1088a100
Binary files /dev/null and b/clock/Library/Artifacts/39/39a3cc357473286dcfafc4325758d7cc differ
diff --git a/clock/Library/Artifacts/39/39ba02fe209ae9e6fb04bd4e4dbb87ca b/clock/Library/Artifacts/39/39ba02fe209ae9e6fb04bd4e4dbb87ca
new file mode 100644
index 00000000..eac2a6dd
Binary files /dev/null and b/clock/Library/Artifacts/39/39ba02fe209ae9e6fb04bd4e4dbb87ca differ
diff --git a/clock/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 b/clock/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657
new file mode 100644
index 00000000..9408a0b6
Binary files /dev/null and b/clock/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 differ
diff --git a/clock/Library/Artifacts/39/39fd7a087627fac98e14f9c1cc43e357 b/clock/Library/Artifacts/39/39fd7a087627fac98e14f9c1cc43e357
new file mode 100644
index 00000000..817b8d4a
Binary files /dev/null and b/clock/Library/Artifacts/39/39fd7a087627fac98e14f9c1cc43e357 differ
diff --git a/clock/Library/Artifacts/39/39fe5e404ca21c360ddb6306ff0eb24a b/clock/Library/Artifacts/39/39fe5e404ca21c360ddb6306ff0eb24a
new file mode 100644
index 00000000..11057c3a
Binary files /dev/null and b/clock/Library/Artifacts/39/39fe5e404ca21c360ddb6306ff0eb24a differ
diff --git a/clock/Library/Artifacts/3a/3a0de0163a0389e0fd7dcaed7af172aa b/clock/Library/Artifacts/3a/3a0de0163a0389e0fd7dcaed7af172aa
new file mode 100644
index 00000000..0e22b8d7
Binary files /dev/null and b/clock/Library/Artifacts/3a/3a0de0163a0389e0fd7dcaed7af172aa differ
diff --git a/clock/Library/Artifacts/3a/3a162222dbc13d96633fd6fc9f6e525b b/clock/Library/Artifacts/3a/3a162222dbc13d96633fd6fc9f6e525b
new file mode 100644
index 00000000..63185271
Binary files /dev/null and b/clock/Library/Artifacts/3a/3a162222dbc13d96633fd6fc9f6e525b differ
diff --git a/clock/Library/Artifacts/3a/3a74d0cc2ec35175687c4fa08c75efab b/clock/Library/Artifacts/3a/3a74d0cc2ec35175687c4fa08c75efab
new file mode 100644
index 00000000..02c16173
Binary files /dev/null and b/clock/Library/Artifacts/3a/3a74d0cc2ec35175687c4fa08c75efab differ
diff --git a/clock/Library/Artifacts/3a/3a8b20f6bd4c23438ff387f4f0108943 b/clock/Library/Artifacts/3a/3a8b20f6bd4c23438ff387f4f0108943
new file mode 100644
index 00000000..33775b8c
Binary files /dev/null and b/clock/Library/Artifacts/3a/3a8b20f6bd4c23438ff387f4f0108943 differ
diff --git a/clock/Library/Artifacts/3a/3aa195e5f52f0da883d43073eaf45c60 b/clock/Library/Artifacts/3a/3aa195e5f52f0da883d43073eaf45c60
new file mode 100644
index 00000000..2ed59a8f
Binary files /dev/null and b/clock/Library/Artifacts/3a/3aa195e5f52f0da883d43073eaf45c60 differ
diff --git a/clock/Library/Artifacts/3a/3aa8727494a07230ed2c311ae85a13c6 b/clock/Library/Artifacts/3a/3aa8727494a07230ed2c311ae85a13c6
new file mode 100644
index 00000000..37d9b4da
Binary files /dev/null and b/clock/Library/Artifacts/3a/3aa8727494a07230ed2c311ae85a13c6 differ
diff --git a/clock/Library/Artifacts/3a/3acdf3d77f105b24c6aaed7a2928122d b/clock/Library/Artifacts/3a/3acdf3d77f105b24c6aaed7a2928122d
new file mode 100644
index 00000000..cbff643b
Binary files /dev/null and b/clock/Library/Artifacts/3a/3acdf3d77f105b24c6aaed7a2928122d differ
diff --git a/clock/Library/Artifacts/3a/3ae7d77c7fed792cbe986c8208437291 b/clock/Library/Artifacts/3a/3ae7d77c7fed792cbe986c8208437291
new file mode 100644
index 00000000..22a3c774
Binary files /dev/null and b/clock/Library/Artifacts/3a/3ae7d77c7fed792cbe986c8208437291 differ
diff --git a/clock/Library/Artifacts/3b/3b0bd20a2e7e2c8bcc8485b52d1bcd8b b/clock/Library/Artifacts/3b/3b0bd20a2e7e2c8bcc8485b52d1bcd8b
new file mode 100644
index 00000000..87d0fc57
Binary files /dev/null and b/clock/Library/Artifacts/3b/3b0bd20a2e7e2c8bcc8485b52d1bcd8b differ
diff --git a/clock/Library/Artifacts/3b/3b1dcc00a3b965ba54a59a27194bf20b b/clock/Library/Artifacts/3b/3b1dcc00a3b965ba54a59a27194bf20b
new file mode 100644
index 00000000..1c4ed504
Binary files /dev/null and b/clock/Library/Artifacts/3b/3b1dcc00a3b965ba54a59a27194bf20b differ
diff --git a/clock/Library/Artifacts/3b/3b5f4703713698b8c7f2244b1089a722 b/clock/Library/Artifacts/3b/3b5f4703713698b8c7f2244b1089a722
new file mode 100644
index 00000000..ba161b8a
Binary files /dev/null and b/clock/Library/Artifacts/3b/3b5f4703713698b8c7f2244b1089a722 differ
diff --git a/clock/Library/Artifacts/3b/3b74fe38ec69e119fd2301f7795dcade b/clock/Library/Artifacts/3b/3b74fe38ec69e119fd2301f7795dcade
new file mode 100644
index 00000000..100e7375
Binary files /dev/null and b/clock/Library/Artifacts/3b/3b74fe38ec69e119fd2301f7795dcade differ
diff --git a/clock/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 b/clock/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2
new file mode 100644
index 00000000..fb2def4e
Binary files /dev/null and b/clock/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 differ
diff --git a/clock/Library/Artifacts/3b/3ba49ec9664650706f52c5a8b736f50a b/clock/Library/Artifacts/3b/3ba49ec9664650706f52c5a8b736f50a
new file mode 100644
index 00000000..2dc43d37
Binary files /dev/null and b/clock/Library/Artifacts/3b/3ba49ec9664650706f52c5a8b736f50a differ
diff --git a/clock/Library/Artifacts/3b/3baa1c4a24188436b4d88fc17b4440c4 b/clock/Library/Artifacts/3b/3baa1c4a24188436b4d88fc17b4440c4
new file mode 100644
index 00000000..d22a945c
Binary files /dev/null and b/clock/Library/Artifacts/3b/3baa1c4a24188436b4d88fc17b4440c4 differ
diff --git a/clock/Library/Artifacts/3b/3baee8e21ae3d985d1fde148085e6f63 b/clock/Library/Artifacts/3b/3baee8e21ae3d985d1fde148085e6f63
new file mode 100644
index 00000000..e3ddb05a
Binary files /dev/null and b/clock/Library/Artifacts/3b/3baee8e21ae3d985d1fde148085e6f63 differ
diff --git a/clock/Library/Artifacts/3b/3bd3d2a1dc1e80ee3eb8e8ddb21556ec b/clock/Library/Artifacts/3b/3bd3d2a1dc1e80ee3eb8e8ddb21556ec
new file mode 100644
index 00000000..3411e7af
Binary files /dev/null and b/clock/Library/Artifacts/3b/3bd3d2a1dc1e80ee3eb8e8ddb21556ec differ
diff --git a/clock/Library/Artifacts/3b/3bf8ed12cd6aaef73a0b7143f159d70a b/clock/Library/Artifacts/3b/3bf8ed12cd6aaef73a0b7143f159d70a
new file mode 100644
index 00000000..f87124fb
Binary files /dev/null and b/clock/Library/Artifacts/3b/3bf8ed12cd6aaef73a0b7143f159d70a differ
diff --git a/clock/Library/Artifacts/3c/3c2892168e69e1f7395adabbf17b2872 b/clock/Library/Artifacts/3c/3c2892168e69e1f7395adabbf17b2872
new file mode 100644
index 00000000..3c6c3adf
Binary files /dev/null and b/clock/Library/Artifacts/3c/3c2892168e69e1f7395adabbf17b2872 differ
diff --git a/clock/Library/Artifacts/3c/3c3324234d3371eb1f3506e482844458 b/clock/Library/Artifacts/3c/3c3324234d3371eb1f3506e482844458
new file mode 100644
index 00000000..7dc4bcfe
Binary files /dev/null and b/clock/Library/Artifacts/3c/3c3324234d3371eb1f3506e482844458 differ
diff --git a/clock/Library/Artifacts/3c/3c37651da2ce9f83cde400bb4430f7bd b/clock/Library/Artifacts/3c/3c37651da2ce9f83cde400bb4430f7bd
new file mode 100644
index 00000000..f0b86e86
Binary files /dev/null and b/clock/Library/Artifacts/3c/3c37651da2ce9f83cde400bb4430f7bd differ
diff --git a/clock/Library/Artifacts/3c/3c3c2e5364b63e82685dd59c304393f7 b/clock/Library/Artifacts/3c/3c3c2e5364b63e82685dd59c304393f7
new file mode 100644
index 00000000..b8dd5971
Binary files /dev/null and b/clock/Library/Artifacts/3c/3c3c2e5364b63e82685dd59c304393f7 differ
diff --git a/clock/Library/Artifacts/3c/3cc0290ebe12119281b23cade8e04971 b/clock/Library/Artifacts/3c/3cc0290ebe12119281b23cade8e04971
new file mode 100644
index 00000000..fbeee2cd
Binary files /dev/null and b/clock/Library/Artifacts/3c/3cc0290ebe12119281b23cade8e04971 differ
diff --git a/clock/Library/Artifacts/3c/3cc3c51d0646097681e3898cea140cde b/clock/Library/Artifacts/3c/3cc3c51d0646097681e3898cea140cde
new file mode 100644
index 00000000..b94a2415
Binary files /dev/null and b/clock/Library/Artifacts/3c/3cc3c51d0646097681e3898cea140cde differ
diff --git a/clock/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 b/clock/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27
new file mode 100644
index 00000000..355f18e2
Binary files /dev/null and b/clock/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 differ
diff --git a/clock/Library/Artifacts/3d/3d789f54f165cff6aa553c4a09424c39 b/clock/Library/Artifacts/3d/3d789f54f165cff6aa553c4a09424c39
new file mode 100644
index 00000000..4a38fe97
Binary files /dev/null and b/clock/Library/Artifacts/3d/3d789f54f165cff6aa553c4a09424c39 differ
diff --git a/clock/Library/Artifacts/3d/3d90865c04129840d79fdcd7ddff3c82 b/clock/Library/Artifacts/3d/3d90865c04129840d79fdcd7ddff3c82
new file mode 100644
index 00000000..0d3c823d
Binary files /dev/null and b/clock/Library/Artifacts/3d/3d90865c04129840d79fdcd7ddff3c82 differ
diff --git a/clock/Library/Artifacts/3d/3d9f99be0274815ae6dabcd10293a313 b/clock/Library/Artifacts/3d/3d9f99be0274815ae6dabcd10293a313
new file mode 100644
index 00000000..9ae9c3fe
Binary files /dev/null and b/clock/Library/Artifacts/3d/3d9f99be0274815ae6dabcd10293a313 differ
diff --git a/clock/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 b/clock/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990
new file mode 100644
index 00000000..db0a8832
Binary files /dev/null and b/clock/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 differ
diff --git a/clock/Library/Artifacts/3d/3def083e56d2bf23288eaccec8c36b3e b/clock/Library/Artifacts/3d/3def083e56d2bf23288eaccec8c36b3e
new file mode 100644
index 00000000..7d740bb7
Binary files /dev/null and b/clock/Library/Artifacts/3d/3def083e56d2bf23288eaccec8c36b3e differ
diff --git a/clock/Library/Artifacts/3d/3df93784d013a9f50a8d444614013c63 b/clock/Library/Artifacts/3d/3df93784d013a9f50a8d444614013c63
new file mode 100644
index 00000000..d4022b38
Binary files /dev/null and b/clock/Library/Artifacts/3d/3df93784d013a9f50a8d444614013c63 differ
diff --git a/clock/Library/Artifacts/3e/3e16e657d9536c5dbf71eebfccfbc55b b/clock/Library/Artifacts/3e/3e16e657d9536c5dbf71eebfccfbc55b
new file mode 100644
index 00000000..e95b65c3
Binary files /dev/null and b/clock/Library/Artifacts/3e/3e16e657d9536c5dbf71eebfccfbc55b differ
diff --git a/clock/Library/Artifacts/3e/3e2c9e273cd07df7808e10c766c271c3 b/clock/Library/Artifacts/3e/3e2c9e273cd07df7808e10c766c271c3
new file mode 100644
index 00000000..96358370
Binary files /dev/null and b/clock/Library/Artifacts/3e/3e2c9e273cd07df7808e10c766c271c3 differ
diff --git a/clock/Library/Artifacts/3e/3e6796b88ecdeb5222029903a99a24b8 b/clock/Library/Artifacts/3e/3e6796b88ecdeb5222029903a99a24b8
new file mode 100644
index 00000000..48e6a539
Binary files /dev/null and b/clock/Library/Artifacts/3e/3e6796b88ecdeb5222029903a99a24b8 differ
diff --git a/clock/Library/Artifacts/3e/3e93439decb1fe83fa70bdc14027436f b/clock/Library/Artifacts/3e/3e93439decb1fe83fa70bdc14027436f
new file mode 100644
index 00000000..5d4c35a7
Binary files /dev/null and b/clock/Library/Artifacts/3e/3e93439decb1fe83fa70bdc14027436f differ
diff --git a/clock/Library/Artifacts/3e/3ece3abb7f1d4a1ce235b9380da56117 b/clock/Library/Artifacts/3e/3ece3abb7f1d4a1ce235b9380da56117
new file mode 100644
index 00000000..2f9cd21b
Binary files /dev/null and b/clock/Library/Artifacts/3e/3ece3abb7f1d4a1ce235b9380da56117 differ
diff --git a/clock/Library/Artifacts/3f/3f2db56d72899737bbd52ffce665ab74 b/clock/Library/Artifacts/3f/3f2db56d72899737bbd52ffce665ab74
new file mode 100644
index 00000000..2ffa827e
Binary files /dev/null and b/clock/Library/Artifacts/3f/3f2db56d72899737bbd52ffce665ab74 differ
diff --git a/clock/Library/Artifacts/3f/3f6add89e246afe3a51d768f4d74e161 b/clock/Library/Artifacts/3f/3f6add89e246afe3a51d768f4d74e161
new file mode 100644
index 00000000..54859351
Binary files /dev/null and b/clock/Library/Artifacts/3f/3f6add89e246afe3a51d768f4d74e161 differ
diff --git a/clock/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 b/clock/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5
new file mode 100644
index 00000000..6747ee52
Binary files /dev/null and b/clock/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 differ
diff --git a/clock/Library/Artifacts/3f/3fb98a640c3dea65702f003717e5eada b/clock/Library/Artifacts/3f/3fb98a640c3dea65702f003717e5eada
new file mode 100644
index 00000000..1a993fd9
Binary files /dev/null and b/clock/Library/Artifacts/3f/3fb98a640c3dea65702f003717e5eada differ
diff --git a/clock/Library/Artifacts/3f/3fec436bfa76c171cc47cd25be0c31fc b/clock/Library/Artifacts/3f/3fec436bfa76c171cc47cd25be0c31fc
new file mode 100644
index 00000000..7c051c18
Binary files /dev/null and b/clock/Library/Artifacts/3f/3fec436bfa76c171cc47cd25be0c31fc differ
diff --git a/clock/Library/Artifacts/40/4026fbe2ec73c2a73090d4f6bcaf94da b/clock/Library/Artifacts/40/4026fbe2ec73c2a73090d4f6bcaf94da
new file mode 100644
index 00000000..8a01720f
Binary files /dev/null and b/clock/Library/Artifacts/40/4026fbe2ec73c2a73090d4f6bcaf94da differ
diff --git a/clock/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf b/clock/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf
new file mode 100644
index 00000000..d79195d5
Binary files /dev/null and b/clock/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf differ
diff --git a/clock/Library/Artifacts/40/40949f17e700e3f9905b748b474b4b2e b/clock/Library/Artifacts/40/40949f17e700e3f9905b748b474b4b2e
new file mode 100644
index 00000000..ddb058ba
Binary files /dev/null and b/clock/Library/Artifacts/40/40949f17e700e3f9905b748b474b4b2e differ
diff --git a/clock/Library/Artifacts/40/40d6836293cacce668e9415daeed7182 b/clock/Library/Artifacts/40/40d6836293cacce668e9415daeed7182
new file mode 100644
index 00000000..07eba70a
Binary files /dev/null and b/clock/Library/Artifacts/40/40d6836293cacce668e9415daeed7182 differ
diff --git a/clock/Library/Artifacts/40/40e5ff8f74966870b88b7d260b6b7cbf b/clock/Library/Artifacts/40/40e5ff8f74966870b88b7d260b6b7cbf
new file mode 100644
index 00000000..c734b2fe
Binary files /dev/null and b/clock/Library/Artifacts/40/40e5ff8f74966870b88b7d260b6b7cbf differ
diff --git a/clock/Library/Artifacts/40/40f2af9106f5e91004d312b4d952b7d3 b/clock/Library/Artifacts/40/40f2af9106f5e91004d312b4d952b7d3
new file mode 100644
index 00000000..42417358
Binary files /dev/null and b/clock/Library/Artifacts/40/40f2af9106f5e91004d312b4d952b7d3 differ
diff --git a/clock/Library/Artifacts/40/40f5fa9c193ee5bdce3cdc21577b55cc b/clock/Library/Artifacts/40/40f5fa9c193ee5bdce3cdc21577b55cc
new file mode 100644
index 00000000..b2bf33ed
Binary files /dev/null and b/clock/Library/Artifacts/40/40f5fa9c193ee5bdce3cdc21577b55cc differ
diff --git a/clock/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 b/clock/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475
new file mode 100644
index 00000000..4a41c335
Binary files /dev/null and b/clock/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 differ
diff --git a/clock/Library/Artifacts/41/411ac59128873ea8e31dfcf0938f9aba b/clock/Library/Artifacts/41/411ac59128873ea8e31dfcf0938f9aba
new file mode 100644
index 00000000..309747c5
Binary files /dev/null and b/clock/Library/Artifacts/41/411ac59128873ea8e31dfcf0938f9aba differ
diff --git a/clock/Library/Artifacts/41/416e2c9cb28ea099cde92c7c9a732948 b/clock/Library/Artifacts/41/416e2c9cb28ea099cde92c7c9a732948
new file mode 100644
index 00000000..dd72373d
Binary files /dev/null and b/clock/Library/Artifacts/41/416e2c9cb28ea099cde92c7c9a732948 differ
diff --git a/clock/Library/Artifacts/41/4193cea0c71ac39b5a679d095c38325f b/clock/Library/Artifacts/41/4193cea0c71ac39b5a679d095c38325f
new file mode 100644
index 00000000..08cef635
Binary files /dev/null and b/clock/Library/Artifacts/41/4193cea0c71ac39b5a679d095c38325f differ
diff --git a/clock/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb b/clock/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb
new file mode 100644
index 00000000..ca295a21
Binary files /dev/null and b/clock/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb differ
diff --git a/clock/Library/Artifacts/42/421bc6da09d4039f9f530af110891b5f b/clock/Library/Artifacts/42/421bc6da09d4039f9f530af110891b5f
new file mode 100644
index 00000000..45d59daa
Binary files /dev/null and b/clock/Library/Artifacts/42/421bc6da09d4039f9f530af110891b5f differ
diff --git a/clock/Library/Artifacts/42/421dbc2e59555512e364318cd69af4bc b/clock/Library/Artifacts/42/421dbc2e59555512e364318cd69af4bc
new file mode 100644
index 00000000..48994128
Binary files /dev/null and b/clock/Library/Artifacts/42/421dbc2e59555512e364318cd69af4bc differ
diff --git a/clock/Library/Artifacts/42/4239440714ba38542d80673f849792dd b/clock/Library/Artifacts/42/4239440714ba38542d80673f849792dd
new file mode 100644
index 00000000..290be558
Binary files /dev/null and b/clock/Library/Artifacts/42/4239440714ba38542d80673f849792dd differ
diff --git a/clock/Library/Artifacts/42/42d4ff8f1a79e63a41e23785940eff93 b/clock/Library/Artifacts/42/42d4ff8f1a79e63a41e23785940eff93
new file mode 100644
index 00000000..87b160ca
Binary files /dev/null and b/clock/Library/Artifacts/42/42d4ff8f1a79e63a41e23785940eff93 differ
diff --git a/clock/Library/Artifacts/42/42e7237c81706371540d212b8dac8838 b/clock/Library/Artifacts/42/42e7237c81706371540d212b8dac8838
new file mode 100644
index 00000000..40c1e0b9
Binary files /dev/null and b/clock/Library/Artifacts/42/42e7237c81706371540d212b8dac8838 differ
diff --git a/clock/Library/Artifacts/43/43babf34dccad4fe1f88584d105082ac b/clock/Library/Artifacts/43/43babf34dccad4fe1f88584d105082ac
new file mode 100644
index 00000000..caa76368
Binary files /dev/null and b/clock/Library/Artifacts/43/43babf34dccad4fe1f88584d105082ac differ
diff --git a/clock/Library/Artifacts/44/442008120df8dad56a5b2533747c016e b/clock/Library/Artifacts/44/442008120df8dad56a5b2533747c016e
new file mode 100644
index 00000000..43da6efc
Binary files /dev/null and b/clock/Library/Artifacts/44/442008120df8dad56a5b2533747c016e differ
diff --git a/clock/Library/Artifacts/44/443e663ca836b527d9b86eb301bb6bbb b/clock/Library/Artifacts/44/443e663ca836b527d9b86eb301bb6bbb
new file mode 100644
index 00000000..8b806b01
Binary files /dev/null and b/clock/Library/Artifacts/44/443e663ca836b527d9b86eb301bb6bbb differ
diff --git a/clock/Library/Artifacts/44/4461986e9c7cf1cf69f6a2975d9748a9 b/clock/Library/Artifacts/44/4461986e9c7cf1cf69f6a2975d9748a9
new file mode 100644
index 00000000..3c15c483
Binary files /dev/null and b/clock/Library/Artifacts/44/4461986e9c7cf1cf69f6a2975d9748a9 differ
diff --git a/clock/Library/Artifacts/44/446b7b1458f29fc546fa6df3e6b8525d b/clock/Library/Artifacts/44/446b7b1458f29fc546fa6df3e6b8525d
new file mode 100644
index 00000000..25c57036
Binary files /dev/null and b/clock/Library/Artifacts/44/446b7b1458f29fc546fa6df3e6b8525d differ
diff --git a/clock/Library/Artifacts/44/44994147ccd00a0d640878acfc667e17 b/clock/Library/Artifacts/44/44994147ccd00a0d640878acfc667e17
new file mode 100644
index 00000000..f6f261c8
Binary files /dev/null and b/clock/Library/Artifacts/44/44994147ccd00a0d640878acfc667e17 differ
diff --git a/clock/Library/Artifacts/44/449e9d185787fb9e875bad567d43da85 b/clock/Library/Artifacts/44/449e9d185787fb9e875bad567d43da85
new file mode 100644
index 00000000..964046dd
Binary files /dev/null and b/clock/Library/Artifacts/44/449e9d185787fb9e875bad567d43da85 differ
diff --git a/clock/Library/Artifacts/44/449fdf3f4158522d9b37b3a71503ecfd b/clock/Library/Artifacts/44/449fdf3f4158522d9b37b3a71503ecfd
new file mode 100644
index 00000000..db64be0d
Binary files /dev/null and b/clock/Library/Artifacts/44/449fdf3f4158522d9b37b3a71503ecfd differ
diff --git a/clock/Library/Artifacts/44/44a100cc12be2a7477ff1f4150d2e8ee b/clock/Library/Artifacts/44/44a100cc12be2a7477ff1f4150d2e8ee
new file mode 100644
index 00000000..2b7fe132
Binary files /dev/null and b/clock/Library/Artifacts/44/44a100cc12be2a7477ff1f4150d2e8ee differ
diff --git a/clock/Library/Artifacts/44/44c6a1f25a2338d0e8f069da77b197cf b/clock/Library/Artifacts/44/44c6a1f25a2338d0e8f069da77b197cf
new file mode 100644
index 00000000..962367fa
Binary files /dev/null and b/clock/Library/Artifacts/44/44c6a1f25a2338d0e8f069da77b197cf differ
diff --git a/clock/Library/Artifacts/44/44d8bdd862d9c0ab834ce83b53c27d76 b/clock/Library/Artifacts/44/44d8bdd862d9c0ab834ce83b53c27d76
new file mode 100644
index 00000000..5252609e
Binary files /dev/null and b/clock/Library/Artifacts/44/44d8bdd862d9c0ab834ce83b53c27d76 differ
diff --git a/clock/Library/Artifacts/44/44f5c54cf400c4b8b057e3a71a2d5b3d b/clock/Library/Artifacts/44/44f5c54cf400c4b8b057e3a71a2d5b3d
new file mode 100644
index 00000000..da2144d0
Binary files /dev/null and b/clock/Library/Artifacts/44/44f5c54cf400c4b8b057e3a71a2d5b3d differ
diff --git a/clock/Library/Artifacts/45/451a6340778b013572c3a7516e1a844b b/clock/Library/Artifacts/45/451a6340778b013572c3a7516e1a844b
new file mode 100644
index 00000000..eac097fd
Binary files /dev/null and b/clock/Library/Artifacts/45/451a6340778b013572c3a7516e1a844b differ
diff --git a/clock/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 b/clock/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3
new file mode 100644
index 00000000..fc5a5e76
Binary files /dev/null and b/clock/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 differ
diff --git a/clock/Library/Artifacts/45/4529bd0b91f4d1dd588325ed99746598 b/clock/Library/Artifacts/45/4529bd0b91f4d1dd588325ed99746598
new file mode 100644
index 00000000..63e91b1d
Binary files /dev/null and b/clock/Library/Artifacts/45/4529bd0b91f4d1dd588325ed99746598 differ
diff --git a/clock/Library/Artifacts/45/4552a3961af0326fd3539f2f20c838bf b/clock/Library/Artifacts/45/4552a3961af0326fd3539f2f20c838bf
new file mode 100644
index 00000000..cd672d64
Binary files /dev/null and b/clock/Library/Artifacts/45/4552a3961af0326fd3539f2f20c838bf differ
diff --git a/clock/Library/Artifacts/45/455b1e9a6cff2447a23e1cbca028f0b5 b/clock/Library/Artifacts/45/455b1e9a6cff2447a23e1cbca028f0b5
new file mode 100644
index 00000000..1924bbf1
Binary files /dev/null and b/clock/Library/Artifacts/45/455b1e9a6cff2447a23e1cbca028f0b5 differ
diff --git a/clock/Library/Artifacts/45/456a2ebdeae6b7d3e24152c2f3582194 b/clock/Library/Artifacts/45/456a2ebdeae6b7d3e24152c2f3582194
new file mode 100644
index 00000000..3cb52181
Binary files /dev/null and b/clock/Library/Artifacts/45/456a2ebdeae6b7d3e24152c2f3582194 differ
diff --git a/clock/Library/Artifacts/45/4594ccc985801abe5b1837c113e808b5 b/clock/Library/Artifacts/45/4594ccc985801abe5b1837c113e808b5
new file mode 100644
index 00000000..b3b8135f
Binary files /dev/null and b/clock/Library/Artifacts/45/4594ccc985801abe5b1837c113e808b5 differ
diff --git a/clock/Library/Artifacts/45/45b861d4b9e0a2c2b48922b88fb8d50d b/clock/Library/Artifacts/45/45b861d4b9e0a2c2b48922b88fb8d50d
new file mode 100644
index 00000000..2ccc3bb6
Binary files /dev/null and b/clock/Library/Artifacts/45/45b861d4b9e0a2c2b48922b88fb8d50d differ
diff --git a/clock/Library/Artifacts/45/45d4120ae542132f79fd3882f2adffe9 b/clock/Library/Artifacts/45/45d4120ae542132f79fd3882f2adffe9
new file mode 100644
index 00000000..36df10aa
Binary files /dev/null and b/clock/Library/Artifacts/45/45d4120ae542132f79fd3882f2adffe9 differ
diff --git a/clock/Library/Artifacts/46/4661f76a9e8f366502265bc2ffa55f05 b/clock/Library/Artifacts/46/4661f76a9e8f366502265bc2ffa55f05
new file mode 100644
index 00000000..62352f78
Binary files /dev/null and b/clock/Library/Artifacts/46/4661f76a9e8f366502265bc2ffa55f05 differ
diff --git a/clock/Library/Artifacts/46/467cee447afe31413332dc1eaa33e3c8 b/clock/Library/Artifacts/46/467cee447afe31413332dc1eaa33e3c8
new file mode 100644
index 00000000..f4ea29d9
Binary files /dev/null and b/clock/Library/Artifacts/46/467cee447afe31413332dc1eaa33e3c8 differ
diff --git a/clock/Library/Artifacts/46/4683472b8f106cc886f2d4509adfae7f b/clock/Library/Artifacts/46/4683472b8f106cc886f2d4509adfae7f
new file mode 100644
index 00000000..7631dd40
Binary files /dev/null and b/clock/Library/Artifacts/46/4683472b8f106cc886f2d4509adfae7f differ
diff --git a/clock/Library/Artifacts/47/4750fc68a693383c5ba2a007a354fcc0 b/clock/Library/Artifacts/47/4750fc68a693383c5ba2a007a354fcc0
new file mode 100644
index 00000000..1fb71825
Binary files /dev/null and b/clock/Library/Artifacts/47/4750fc68a693383c5ba2a007a354fcc0 differ
diff --git a/clock/Library/Artifacts/47/4775e4a018932639704c718b097c2432 b/clock/Library/Artifacts/47/4775e4a018932639704c718b097c2432
new file mode 100644
index 00000000..a62efa4e
Binary files /dev/null and b/clock/Library/Artifacts/47/4775e4a018932639704c718b097c2432 differ
diff --git a/clock/Library/Artifacts/47/477c8a55ec503e1c5f7e8a1866a0d98b b/clock/Library/Artifacts/47/477c8a55ec503e1c5f7e8a1866a0d98b
new file mode 100644
index 00000000..e1082065
Binary files /dev/null and b/clock/Library/Artifacts/47/477c8a55ec503e1c5f7e8a1866a0d98b differ
diff --git a/clock/Library/Artifacts/47/47dc391e69f7980451a36c99ea084d0c b/clock/Library/Artifacts/47/47dc391e69f7980451a36c99ea084d0c
new file mode 100644
index 00000000..2d797f86
Binary files /dev/null and b/clock/Library/Artifacts/47/47dc391e69f7980451a36c99ea084d0c differ
diff --git a/clock/Library/Artifacts/47/47e4ce80f006c6cb31fb08c0a96f50ac b/clock/Library/Artifacts/47/47e4ce80f006c6cb31fb08c0a96f50ac
new file mode 100644
index 00000000..04168b0a
Binary files /dev/null and b/clock/Library/Artifacts/47/47e4ce80f006c6cb31fb08c0a96f50ac differ
diff --git a/clock/Library/Artifacts/48/48077c01b9bc0c38e4488b1903796289 b/clock/Library/Artifacts/48/48077c01b9bc0c38e4488b1903796289
new file mode 100644
index 00000000..5b378663
Binary files /dev/null and b/clock/Library/Artifacts/48/48077c01b9bc0c38e4488b1903796289 differ
diff --git a/clock/Library/Artifacts/48/4809f4686af070f998af2b2f7f94e417 b/clock/Library/Artifacts/48/4809f4686af070f998af2b2f7f94e417
new file mode 100644
index 00000000..9d2d6a9a
Binary files /dev/null and b/clock/Library/Artifacts/48/4809f4686af070f998af2b2f7f94e417 differ
diff --git a/clock/Library/Artifacts/48/481423a2c2311ad662ed2a50d11eb343 b/clock/Library/Artifacts/48/481423a2c2311ad662ed2a50d11eb343
new file mode 100644
index 00000000..e2abc35e
Binary files /dev/null and b/clock/Library/Artifacts/48/481423a2c2311ad662ed2a50d11eb343 differ
diff --git a/clock/Library/Artifacts/48/487a412806bce85cebac873a58b5aee3 b/clock/Library/Artifacts/48/487a412806bce85cebac873a58b5aee3
new file mode 100644
index 00000000..1e078d3e
Binary files /dev/null and b/clock/Library/Artifacts/48/487a412806bce85cebac873a58b5aee3 differ
diff --git a/clock/Library/Artifacts/48/488137d65d8fd28f839e6bbfc4b58e04 b/clock/Library/Artifacts/48/488137d65d8fd28f839e6bbfc4b58e04
new file mode 100644
index 00000000..daa595b2
Binary files /dev/null and b/clock/Library/Artifacts/48/488137d65d8fd28f839e6bbfc4b58e04 differ
diff --git a/clock/Library/Artifacts/48/4886a013e9eb6c2bfa55792c68f04d57 b/clock/Library/Artifacts/48/4886a013e9eb6c2bfa55792c68f04d57
new file mode 100644
index 00000000..063bb583
Binary files /dev/null and b/clock/Library/Artifacts/48/4886a013e9eb6c2bfa55792c68f04d57 differ
diff --git a/clock/Library/Artifacts/48/48b290558bca59d09fdc7c3cafc8e215 b/clock/Library/Artifacts/48/48b290558bca59d09fdc7c3cafc8e215
new file mode 100644
index 00000000..303a9d63
Binary files /dev/null and b/clock/Library/Artifacts/48/48b290558bca59d09fdc7c3cafc8e215 differ
diff --git a/clock/Library/Artifacts/48/48bb077f8cbf2e6750cb1077e6159aa2 b/clock/Library/Artifacts/48/48bb077f8cbf2e6750cb1077e6159aa2
new file mode 100644
index 00000000..8a2dfbca
Binary files /dev/null and b/clock/Library/Artifacts/48/48bb077f8cbf2e6750cb1077e6159aa2 differ
diff --git a/clock/Library/Artifacts/48/48e2468eaef678fa99647cdecd53b530 b/clock/Library/Artifacts/48/48e2468eaef678fa99647cdecd53b530
new file mode 100644
index 00000000..9936d971
Binary files /dev/null and b/clock/Library/Artifacts/48/48e2468eaef678fa99647cdecd53b530 differ
diff --git a/clock/Library/Artifacts/49/4901b28dbd57b86986a0815a671e7e8d b/clock/Library/Artifacts/49/4901b28dbd57b86986a0815a671e7e8d
new file mode 100644
index 00000000..ded476e0
Binary files /dev/null and b/clock/Library/Artifacts/49/4901b28dbd57b86986a0815a671e7e8d differ
diff --git a/clock/Library/Artifacts/49/4922cc477887ed5e9fcd7441d66da1bd b/clock/Library/Artifacts/49/4922cc477887ed5e9fcd7441d66da1bd
new file mode 100644
index 00000000..22f6af05
Binary files /dev/null and b/clock/Library/Artifacts/49/4922cc477887ed5e9fcd7441d66da1bd differ
diff --git a/clock/Library/Artifacts/49/492ec71b4cbfbaf5bb1f81818e5e5aba b/clock/Library/Artifacts/49/492ec71b4cbfbaf5bb1f81818e5e5aba
new file mode 100644
index 00000000..78bbde2a
Binary files /dev/null and b/clock/Library/Artifacts/49/492ec71b4cbfbaf5bb1f81818e5e5aba differ
diff --git a/clock/Library/Artifacts/49/4934b6766b2a13d27ba96847269d3381 b/clock/Library/Artifacts/49/4934b6766b2a13d27ba96847269d3381
new file mode 100644
index 00000000..008be77e
Binary files /dev/null and b/clock/Library/Artifacts/49/4934b6766b2a13d27ba96847269d3381 differ
diff --git a/clock/Library/Artifacts/49/4964acb65cf2cf7dc763e9670210c1da b/clock/Library/Artifacts/49/4964acb65cf2cf7dc763e9670210c1da
new file mode 100644
index 00000000..4d9ee8df
Binary files /dev/null and b/clock/Library/Artifacts/49/4964acb65cf2cf7dc763e9670210c1da differ
diff --git a/clock/Library/Artifacts/49/497d934de4fc76d7df38810a7f8187ec b/clock/Library/Artifacts/49/497d934de4fc76d7df38810a7f8187ec
new file mode 100644
index 00000000..374bb3d2
Binary files /dev/null and b/clock/Library/Artifacts/49/497d934de4fc76d7df38810a7f8187ec differ
diff --git a/clock/Library/Artifacts/49/499d61ec866fd7d0d1a4b8c86ed42523 b/clock/Library/Artifacts/49/499d61ec866fd7d0d1a4b8c86ed42523
new file mode 100644
index 00000000..07a1c830
Binary files /dev/null and b/clock/Library/Artifacts/49/499d61ec866fd7d0d1a4b8c86ed42523 differ
diff --git a/clock/Library/Artifacts/4a/4a07f3ffbdf3f22640a74c27abf08e6f b/clock/Library/Artifacts/4a/4a07f3ffbdf3f22640a74c27abf08e6f
new file mode 100644
index 00000000..dc9d108e
Binary files /dev/null and b/clock/Library/Artifacts/4a/4a07f3ffbdf3f22640a74c27abf08e6f differ
diff --git a/clock/Library/Artifacts/4a/4a35bc67bc1992749d21ffdeeaa2dc34 b/clock/Library/Artifacts/4a/4a35bc67bc1992749d21ffdeeaa2dc34
new file mode 100644
index 00000000..7c697db9
Binary files /dev/null and b/clock/Library/Artifacts/4a/4a35bc67bc1992749d21ffdeeaa2dc34 differ
diff --git a/clock/Library/Artifacts/4a/4a65a8478eecc012b6c50f907333e771 b/clock/Library/Artifacts/4a/4a65a8478eecc012b6c50f907333e771
new file mode 100644
index 00000000..a65819bd
Binary files /dev/null and b/clock/Library/Artifacts/4a/4a65a8478eecc012b6c50f907333e771 differ
diff --git a/clock/Library/Artifacts/4a/4a836ed442f6af21bdb2b39b7318451a b/clock/Library/Artifacts/4a/4a836ed442f6af21bdb2b39b7318451a
new file mode 100644
index 00000000..17d0d682
Binary files /dev/null and b/clock/Library/Artifacts/4a/4a836ed442f6af21bdb2b39b7318451a differ
diff --git a/clock/Library/Artifacts/4a/4aa34b2dc2f164611ad271ed78156f6a b/clock/Library/Artifacts/4a/4aa34b2dc2f164611ad271ed78156f6a
new file mode 100644
index 00000000..045a96cb
Binary files /dev/null and b/clock/Library/Artifacts/4a/4aa34b2dc2f164611ad271ed78156f6a differ
diff --git a/clock/Library/Artifacts/4b/4b23067f988cb218c063e8ec60e5329f b/clock/Library/Artifacts/4b/4b23067f988cb218c063e8ec60e5329f
new file mode 100644
index 00000000..b3b61372
Binary files /dev/null and b/clock/Library/Artifacts/4b/4b23067f988cb218c063e8ec60e5329f differ
diff --git a/clock/Library/Artifacts/4b/4b790493bf2323ac64572de769a5d2e8 b/clock/Library/Artifacts/4b/4b790493bf2323ac64572de769a5d2e8
new file mode 100644
index 00000000..5964c22b
Binary files /dev/null and b/clock/Library/Artifacts/4b/4b790493bf2323ac64572de769a5d2e8 differ
diff --git a/clock/Library/Artifacts/4b/4b82c2233eaa93c84ff9a36ec1d455c3 b/clock/Library/Artifacts/4b/4b82c2233eaa93c84ff9a36ec1d455c3
new file mode 100644
index 00000000..18b4ff8b
Binary files /dev/null and b/clock/Library/Artifacts/4b/4b82c2233eaa93c84ff9a36ec1d455c3 differ
diff --git a/clock/Library/Artifacts/4b/4b8ba1fcc2bd3eb75ec6f7299c745942 b/clock/Library/Artifacts/4b/4b8ba1fcc2bd3eb75ec6f7299c745942
new file mode 100644
index 00000000..6e386deb
Binary files /dev/null and b/clock/Library/Artifacts/4b/4b8ba1fcc2bd3eb75ec6f7299c745942 differ
diff --git a/clock/Library/Artifacts/4b/4bcafbf08909a5c357371052814536fb b/clock/Library/Artifacts/4b/4bcafbf08909a5c357371052814536fb
new file mode 100644
index 00000000..a3a32b44
Binary files /dev/null and b/clock/Library/Artifacts/4b/4bcafbf08909a5c357371052814536fb differ
diff --git a/clock/Library/Artifacts/4b/4bfa2aad822fb587c65cc173dca9e86e b/clock/Library/Artifacts/4b/4bfa2aad822fb587c65cc173dca9e86e
new file mode 100644
index 00000000..881809e9
Binary files /dev/null and b/clock/Library/Artifacts/4b/4bfa2aad822fb587c65cc173dca9e86e differ
diff --git a/clock/Library/Artifacts/4b/4bfc0440b48d95a7f13d3ecc815c071c b/clock/Library/Artifacts/4b/4bfc0440b48d95a7f13d3ecc815c071c
new file mode 100644
index 00000000..9830bbb6
Binary files /dev/null and b/clock/Library/Artifacts/4b/4bfc0440b48d95a7f13d3ecc815c071c differ
diff --git a/clock/Library/Artifacts/4c/4c00dd29ae36fd33151d89653504006d b/clock/Library/Artifacts/4c/4c00dd29ae36fd33151d89653504006d
new file mode 100644
index 00000000..26623acc
Binary files /dev/null and b/clock/Library/Artifacts/4c/4c00dd29ae36fd33151d89653504006d differ
diff --git a/clock/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 b/clock/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42
new file mode 100644
index 00000000..a3b75a59
Binary files /dev/null and b/clock/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 differ
diff --git a/clock/Library/Artifacts/4c/4c467ac4206e61b01baaad1781751d43 b/clock/Library/Artifacts/4c/4c467ac4206e61b01baaad1781751d43
new file mode 100644
index 00000000..2d9d4713
Binary files /dev/null and b/clock/Library/Artifacts/4c/4c467ac4206e61b01baaad1781751d43 differ
diff --git a/clock/Library/Artifacts/4c/4cb1d2a46ab5852a077260a6fda450d8 b/clock/Library/Artifacts/4c/4cb1d2a46ab5852a077260a6fda450d8
new file mode 100644
index 00000000..aa7ac474
Binary files /dev/null and b/clock/Library/Artifacts/4c/4cb1d2a46ab5852a077260a6fda450d8 differ
diff --git a/clock/Library/Artifacts/4c/4ce8233af2e72896a926a3e6a1649486 b/clock/Library/Artifacts/4c/4ce8233af2e72896a926a3e6a1649486
new file mode 100644
index 00000000..629e6302
Binary files /dev/null and b/clock/Library/Artifacts/4c/4ce8233af2e72896a926a3e6a1649486 differ
diff --git a/clock/Library/Artifacts/4c/4cf414e4c62e3a5646eb5e693014e899 b/clock/Library/Artifacts/4c/4cf414e4c62e3a5646eb5e693014e899
new file mode 100644
index 00000000..d60bf437
Binary files /dev/null and b/clock/Library/Artifacts/4c/4cf414e4c62e3a5646eb5e693014e899 differ
diff --git a/clock/Library/Artifacts/4d/4d4ae9cf872d4985a01e31974998c252 b/clock/Library/Artifacts/4d/4d4ae9cf872d4985a01e31974998c252
new file mode 100644
index 00000000..d3d21673
Binary files /dev/null and b/clock/Library/Artifacts/4d/4d4ae9cf872d4985a01e31974998c252 differ
diff --git a/clock/Library/Artifacts/4d/4d60a1a4d0155af4b81bd3c8617c0b65 b/clock/Library/Artifacts/4d/4d60a1a4d0155af4b81bd3c8617c0b65
new file mode 100644
index 00000000..811c91ce
Binary files /dev/null and b/clock/Library/Artifacts/4d/4d60a1a4d0155af4b81bd3c8617c0b65 differ
diff --git a/clock/Library/Artifacts/4d/4d6146121896f23d343bbff89979dc9a b/clock/Library/Artifacts/4d/4d6146121896f23d343bbff89979dc9a
new file mode 100644
index 00000000..37fbbf43
Binary files /dev/null and b/clock/Library/Artifacts/4d/4d6146121896f23d343bbff89979dc9a differ
diff --git a/clock/Library/Artifacts/4d/4d89e455e3390018eb0a6248b759edec b/clock/Library/Artifacts/4d/4d89e455e3390018eb0a6248b759edec
new file mode 100644
index 00000000..ebcdb96a
Binary files /dev/null and b/clock/Library/Artifacts/4d/4d89e455e3390018eb0a6248b759edec differ
diff --git a/clock/Library/Artifacts/4e/4e6bc08374397b86b03122fdab952b6f b/clock/Library/Artifacts/4e/4e6bc08374397b86b03122fdab952b6f
new file mode 100644
index 00000000..3e1756ba
Binary files /dev/null and b/clock/Library/Artifacts/4e/4e6bc08374397b86b03122fdab952b6f differ
diff --git a/clock/Library/Artifacts/4f/4f08b6d0819278f073d89eea859ce8bf b/clock/Library/Artifacts/4f/4f08b6d0819278f073d89eea859ce8bf
new file mode 100644
index 00000000..f1e23f32
Binary files /dev/null and b/clock/Library/Artifacts/4f/4f08b6d0819278f073d89eea859ce8bf differ
diff --git a/clock/Library/Artifacts/4f/4f39b71e14b848353011e0aa8ea2683c b/clock/Library/Artifacts/4f/4f39b71e14b848353011e0aa8ea2683c
new file mode 100644
index 00000000..14617ee2
Binary files /dev/null and b/clock/Library/Artifacts/4f/4f39b71e14b848353011e0aa8ea2683c differ
diff --git a/clock/Library/Artifacts/4f/4f5d2bf20d9c1153b8f81538a5bb4db3 b/clock/Library/Artifacts/4f/4f5d2bf20d9c1153b8f81538a5bb4db3
new file mode 100644
index 00000000..d7240040
Binary files /dev/null and b/clock/Library/Artifacts/4f/4f5d2bf20d9c1153b8f81538a5bb4db3 differ
diff --git a/clock/Library/Artifacts/4f/4f97f6017b890dbc55ace51d0fa529e7 b/clock/Library/Artifacts/4f/4f97f6017b890dbc55ace51d0fa529e7
new file mode 100644
index 00000000..45105f6c
Binary files /dev/null and b/clock/Library/Artifacts/4f/4f97f6017b890dbc55ace51d0fa529e7 differ
diff --git a/clock/Library/Artifacts/4f/4fbfc528bdfc3edec99c6740dddd9157 b/clock/Library/Artifacts/4f/4fbfc528bdfc3edec99c6740dddd9157
new file mode 100644
index 00000000..4466abd6
Binary files /dev/null and b/clock/Library/Artifacts/4f/4fbfc528bdfc3edec99c6740dddd9157 differ
diff --git a/clock/Library/Artifacts/50/5023936511eec88e45f79a77467462b8 b/clock/Library/Artifacts/50/5023936511eec88e45f79a77467462b8
new file mode 100644
index 00000000..faa9b217
Binary files /dev/null and b/clock/Library/Artifacts/50/5023936511eec88e45f79a77467462b8 differ
diff --git a/clock/Library/Artifacts/50/503a2e14a21b7462e2311ce7edc01f19 b/clock/Library/Artifacts/50/503a2e14a21b7462e2311ce7edc01f19
new file mode 100644
index 00000000..fe673949
Binary files /dev/null and b/clock/Library/Artifacts/50/503a2e14a21b7462e2311ce7edc01f19 differ
diff --git a/clock/Library/Artifacts/50/5048b14fe703d35dcf1b98668ce2ff12 b/clock/Library/Artifacts/50/5048b14fe703d35dcf1b98668ce2ff12
new file mode 100644
index 00000000..2d302766
Binary files /dev/null and b/clock/Library/Artifacts/50/5048b14fe703d35dcf1b98668ce2ff12 differ
diff --git a/clock/Library/Artifacts/50/5054ce4e6f359e55137c1dfe330db6d4 b/clock/Library/Artifacts/50/5054ce4e6f359e55137c1dfe330db6d4
new file mode 100644
index 00000000..08f3b937
Binary files /dev/null and b/clock/Library/Artifacts/50/5054ce4e6f359e55137c1dfe330db6d4 differ
diff --git a/clock/Library/Artifacts/50/508261093d08cd4284bfe1e25339af58 b/clock/Library/Artifacts/50/508261093d08cd4284bfe1e25339af58
new file mode 100644
index 00000000..4e05b29f
Binary files /dev/null and b/clock/Library/Artifacts/50/508261093d08cd4284bfe1e25339af58 differ
diff --git a/clock/Library/Artifacts/50/508322b76c1a92477297df75b179d0e3 b/clock/Library/Artifacts/50/508322b76c1a92477297df75b179d0e3
new file mode 100644
index 00000000..389efe76
Binary files /dev/null and b/clock/Library/Artifacts/50/508322b76c1a92477297df75b179d0e3 differ
diff --git a/clock/Library/Artifacts/50/50a92b8d491e9e895108f61fe9805bc0 b/clock/Library/Artifacts/50/50a92b8d491e9e895108f61fe9805bc0
new file mode 100644
index 00000000..69f56bbd
Binary files /dev/null and b/clock/Library/Artifacts/50/50a92b8d491e9e895108f61fe9805bc0 differ
diff --git a/clock/Library/Artifacts/50/50efee8f1bb854f36130efd160475451 b/clock/Library/Artifacts/50/50efee8f1bb854f36130efd160475451
new file mode 100644
index 00000000..43e06618
Binary files /dev/null and b/clock/Library/Artifacts/50/50efee8f1bb854f36130efd160475451 differ
diff --git a/clock/Library/Artifacts/51/516017fdd67cc33e78116dde00ffdc3b b/clock/Library/Artifacts/51/516017fdd67cc33e78116dde00ffdc3b
new file mode 100644
index 00000000..dcc5ef0d
Binary files /dev/null and b/clock/Library/Artifacts/51/516017fdd67cc33e78116dde00ffdc3b differ
diff --git a/clock/Library/Artifacts/51/516dc10881b9a5a104434fe1c2d62ffa b/clock/Library/Artifacts/51/516dc10881b9a5a104434fe1c2d62ffa
new file mode 100644
index 00000000..ba8b7416
Binary files /dev/null and b/clock/Library/Artifacts/51/516dc10881b9a5a104434fe1c2d62ffa differ
diff --git a/clock/Library/Artifacts/51/5187a5e095124039224736d5a4e4a81a b/clock/Library/Artifacts/51/5187a5e095124039224736d5a4e4a81a
new file mode 100644
index 00000000..9d767f64
Binary files /dev/null and b/clock/Library/Artifacts/51/5187a5e095124039224736d5a4e4a81a differ
diff --git a/clock/Library/Artifacts/51/51919153b8220256ce96ac2f6818ab06 b/clock/Library/Artifacts/51/51919153b8220256ce96ac2f6818ab06
new file mode 100644
index 00000000..318c935f
Binary files /dev/null and b/clock/Library/Artifacts/51/51919153b8220256ce96ac2f6818ab06 differ
diff --git a/clock/Library/Artifacts/51/51bcb466929fc098fbdd3a789a3cc820 b/clock/Library/Artifacts/51/51bcb466929fc098fbdd3a789a3cc820
new file mode 100644
index 00000000..cd584598
Binary files /dev/null and b/clock/Library/Artifacts/51/51bcb466929fc098fbdd3a789a3cc820 differ
diff --git a/clock/Library/Artifacts/51/51dbc83dbebe788deeb055f6fd860cbb b/clock/Library/Artifacts/51/51dbc83dbebe788deeb055f6fd860cbb
new file mode 100644
index 00000000..9092f0ed
Binary files /dev/null and b/clock/Library/Artifacts/51/51dbc83dbebe788deeb055f6fd860cbb differ
diff --git a/clock/Library/Artifacts/52/52a44ce91081bb879e5d7d50d5ef92de b/clock/Library/Artifacts/52/52a44ce91081bb879e5d7d50d5ef92de
new file mode 100644
index 00000000..2a916c4c
Binary files /dev/null and b/clock/Library/Artifacts/52/52a44ce91081bb879e5d7d50d5ef92de differ
diff --git a/clock/Library/Artifacts/52/52ce8a493205301ac758abb318f8348b b/clock/Library/Artifacts/52/52ce8a493205301ac758abb318f8348b
new file mode 100644
index 00000000..0a13d4bc
Binary files /dev/null and b/clock/Library/Artifacts/52/52ce8a493205301ac758abb318f8348b differ
diff --git a/clock/Library/Artifacts/52/52eba02e79479af7095f3519c16aec0e b/clock/Library/Artifacts/52/52eba02e79479af7095f3519c16aec0e
new file mode 100644
index 00000000..28de9b4f
Binary files /dev/null and b/clock/Library/Artifacts/52/52eba02e79479af7095f3519c16aec0e differ
diff --git a/clock/Library/Artifacts/52/52faffbd5654c2e6f7deac0f6d5799b6 b/clock/Library/Artifacts/52/52faffbd5654c2e6f7deac0f6d5799b6
new file mode 100644
index 00000000..21ea49b7
Binary files /dev/null and b/clock/Library/Artifacts/52/52faffbd5654c2e6f7deac0f6d5799b6 differ
diff --git a/clock/Library/Artifacts/52/52ffbc72213f6806d99525c3c8e103db b/clock/Library/Artifacts/52/52ffbc72213f6806d99525c3c8e103db
new file mode 100644
index 00000000..2e4d0535
Binary files /dev/null and b/clock/Library/Artifacts/52/52ffbc72213f6806d99525c3c8e103db differ
diff --git a/clock/Library/Artifacts/53/532bde0ac38f0d41883ac0a76100798d b/clock/Library/Artifacts/53/532bde0ac38f0d41883ac0a76100798d
new file mode 100644
index 00000000..34211ce4
Binary files /dev/null and b/clock/Library/Artifacts/53/532bde0ac38f0d41883ac0a76100798d differ
diff --git a/clock/Library/Artifacts/53/53774383bc52cb55258e4d7bc667e291 b/clock/Library/Artifacts/53/53774383bc52cb55258e4d7bc667e291
new file mode 100644
index 00000000..4d42c3d3
Binary files /dev/null and b/clock/Library/Artifacts/53/53774383bc52cb55258e4d7bc667e291 differ
diff --git a/clock/Library/Artifacts/53/539c24dec0082d9f0bfe42835dd717ff b/clock/Library/Artifacts/53/539c24dec0082d9f0bfe42835dd717ff
new file mode 100644
index 00000000..d6538236
Binary files /dev/null and b/clock/Library/Artifacts/53/539c24dec0082d9f0bfe42835dd717ff differ
diff --git a/clock/Library/Artifacts/53/53c70946a2500146dcf76459f0033800 b/clock/Library/Artifacts/53/53c70946a2500146dcf76459f0033800
new file mode 100644
index 00000000..ddea045a
Binary files /dev/null and b/clock/Library/Artifacts/53/53c70946a2500146dcf76459f0033800 differ
diff --git a/clock/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b b/clock/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b
new file mode 100644
index 00000000..a184e921
Binary files /dev/null and b/clock/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b differ
diff --git a/clock/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 b/clock/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7
new file mode 100644
index 00000000..1e4456c1
Binary files /dev/null and b/clock/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 differ
diff --git a/clock/Library/Artifacts/54/5419b076756d89ff9b536a934fb142ac b/clock/Library/Artifacts/54/5419b076756d89ff9b536a934fb142ac
new file mode 100644
index 00000000..eb95525e
Binary files /dev/null and b/clock/Library/Artifacts/54/5419b076756d89ff9b536a934fb142ac differ
diff --git a/clock/Library/Artifacts/54/548eb49838eb902e23dd4c2718627e50 b/clock/Library/Artifacts/54/548eb49838eb902e23dd4c2718627e50
new file mode 100644
index 00000000..8e330683
Binary files /dev/null and b/clock/Library/Artifacts/54/548eb49838eb902e23dd4c2718627e50 differ
diff --git a/clock/Library/Artifacts/54/549f38469b83db63e76cd148579774be b/clock/Library/Artifacts/54/549f38469b83db63e76cd148579774be
new file mode 100644
index 00000000..b6263e63
Binary files /dev/null and b/clock/Library/Artifacts/54/549f38469b83db63e76cd148579774be differ
diff --git a/clock/Library/Artifacts/54/54fb83796fefc4a2ae7e7ea983e0606e b/clock/Library/Artifacts/54/54fb83796fefc4a2ae7e7ea983e0606e
new file mode 100644
index 00000000..46dd9d8c
Binary files /dev/null and b/clock/Library/Artifacts/54/54fb83796fefc4a2ae7e7ea983e0606e differ
diff --git a/clock/Library/Artifacts/55/550753f15ca7ec1afa2eb61c8ac09495 b/clock/Library/Artifacts/55/550753f15ca7ec1afa2eb61c8ac09495
new file mode 100644
index 00000000..2724cb44
Binary files /dev/null and b/clock/Library/Artifacts/55/550753f15ca7ec1afa2eb61c8ac09495 differ
diff --git a/clock/Library/Artifacts/55/553396e7977b9122d2f86114b148b1bd b/clock/Library/Artifacts/55/553396e7977b9122d2f86114b148b1bd
new file mode 100644
index 00000000..0d743d75
Binary files /dev/null and b/clock/Library/Artifacts/55/553396e7977b9122d2f86114b148b1bd differ
diff --git a/clock/Library/Artifacts/55/55462c0d7649d79119ed44d6164dad3a b/clock/Library/Artifacts/55/55462c0d7649d79119ed44d6164dad3a
new file mode 100644
index 00000000..2355aa15
Binary files /dev/null and b/clock/Library/Artifacts/55/55462c0d7649d79119ed44d6164dad3a differ
diff --git a/clock/Library/Artifacts/55/55a318d58fa2c8736b65ebffe8005c74 b/clock/Library/Artifacts/55/55a318d58fa2c8736b65ebffe8005c74
new file mode 100644
index 00000000..ede4b389
Binary files /dev/null and b/clock/Library/Artifacts/55/55a318d58fa2c8736b65ebffe8005c74 differ
diff --git a/clock/Library/Artifacts/55/55a4188e153aad27130995a2f8930d13 b/clock/Library/Artifacts/55/55a4188e153aad27130995a2f8930d13
new file mode 100644
index 00000000..1a5ada77
Binary files /dev/null and b/clock/Library/Artifacts/55/55a4188e153aad27130995a2f8930d13 differ
diff --git a/clock/Library/Artifacts/55/55ab34fb0efd598a0e2f1bd7635212cc b/clock/Library/Artifacts/55/55ab34fb0efd598a0e2f1bd7635212cc
new file mode 100644
index 00000000..fdc6d514
Binary files /dev/null and b/clock/Library/Artifacts/55/55ab34fb0efd598a0e2f1bd7635212cc differ
diff --git a/clock/Library/Artifacts/55/55ca590e0410d10315ebb9db26097444 b/clock/Library/Artifacts/55/55ca590e0410d10315ebb9db26097444
new file mode 100644
index 00000000..b531d577
Binary files /dev/null and b/clock/Library/Artifacts/55/55ca590e0410d10315ebb9db26097444 differ
diff --git a/clock/Library/Artifacts/55/55e2fb40a9b914c6ffa253c1a2fa653e b/clock/Library/Artifacts/55/55e2fb40a9b914c6ffa253c1a2fa653e
new file mode 100644
index 00000000..3acaf770
Binary files /dev/null and b/clock/Library/Artifacts/55/55e2fb40a9b914c6ffa253c1a2fa653e differ
diff --git a/clock/Library/Artifacts/56/565688339a67d047e638df0b5a603335 b/clock/Library/Artifacts/56/565688339a67d047e638df0b5a603335
new file mode 100644
index 00000000..8fafd56c
Binary files /dev/null and b/clock/Library/Artifacts/56/565688339a67d047e638df0b5a603335 differ
diff --git a/clock/Library/Artifacts/56/565d348be3501d2842dd77272d4c3009 b/clock/Library/Artifacts/56/565d348be3501d2842dd77272d4c3009
new file mode 100644
index 00000000..732e5f5b
Binary files /dev/null and b/clock/Library/Artifacts/56/565d348be3501d2842dd77272d4c3009 differ
diff --git a/clock/Library/Artifacts/56/5677af9ffb8921ebb27fbf491e139d0c b/clock/Library/Artifacts/56/5677af9ffb8921ebb27fbf491e139d0c
new file mode 100644
index 00000000..6f143810
Binary files /dev/null and b/clock/Library/Artifacts/56/5677af9ffb8921ebb27fbf491e139d0c differ
diff --git a/clock/Library/Artifacts/56/56974706b0942c7626413b07dcb93998 b/clock/Library/Artifacts/56/56974706b0942c7626413b07dcb93998
new file mode 100644
index 00000000..8c5f4dfe
Binary files /dev/null and b/clock/Library/Artifacts/56/56974706b0942c7626413b07dcb93998 differ
diff --git a/clock/Library/Artifacts/57/57ba7d1742cd9ccf631198646d323129 b/clock/Library/Artifacts/57/57ba7d1742cd9ccf631198646d323129
new file mode 100644
index 00000000..82827f60
Binary files /dev/null and b/clock/Library/Artifacts/57/57ba7d1742cd9ccf631198646d323129 differ
diff --git a/clock/Library/Artifacts/57/57f0e540c1835e75922d614b99ed3e6e b/clock/Library/Artifacts/57/57f0e540c1835e75922d614b99ed3e6e
new file mode 100644
index 00000000..e7e5602d
Binary files /dev/null and b/clock/Library/Artifacts/57/57f0e540c1835e75922d614b99ed3e6e differ
diff --git a/clock/Library/Artifacts/57/57ff44cdc73b1d2f2d26b3c934ba5821 b/clock/Library/Artifacts/57/57ff44cdc73b1d2f2d26b3c934ba5821
new file mode 100644
index 00000000..6fad0d04
Binary files /dev/null and b/clock/Library/Artifacts/57/57ff44cdc73b1d2f2d26b3c934ba5821 differ
diff --git a/clock/Library/Artifacts/58/583ab68e44536e1fe8ca78bb38322525 b/clock/Library/Artifacts/58/583ab68e44536e1fe8ca78bb38322525
new file mode 100644
index 00000000..b52c2b69
Binary files /dev/null and b/clock/Library/Artifacts/58/583ab68e44536e1fe8ca78bb38322525 differ
diff --git a/clock/Library/Artifacts/58/586d002d717ed790c92f2eb5ea949d0d b/clock/Library/Artifacts/58/586d002d717ed790c92f2eb5ea949d0d
new file mode 100644
index 00000000..88c46ef8
Binary files /dev/null and b/clock/Library/Artifacts/58/586d002d717ed790c92f2eb5ea949d0d differ
diff --git a/clock/Library/Artifacts/58/58bb074dca228a53c4452f5dcb40ec79 b/clock/Library/Artifacts/58/58bb074dca228a53c4452f5dcb40ec79
new file mode 100644
index 00000000..8f6a25e9
Binary files /dev/null and b/clock/Library/Artifacts/58/58bb074dca228a53c4452f5dcb40ec79 differ
diff --git a/clock/Library/Artifacts/58/58be15e439b7acb553b6032bb02c7371 b/clock/Library/Artifacts/58/58be15e439b7acb553b6032bb02c7371
new file mode 100644
index 00000000..d9dda2c4
Binary files /dev/null and b/clock/Library/Artifacts/58/58be15e439b7acb553b6032bb02c7371 differ
diff --git a/clock/Library/Artifacts/58/58c62b2e622522bea696c4906cf75d05 b/clock/Library/Artifacts/58/58c62b2e622522bea696c4906cf75d05
new file mode 100644
index 00000000..085d5829
Binary files /dev/null and b/clock/Library/Artifacts/58/58c62b2e622522bea696c4906cf75d05 differ
diff --git a/clock/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df b/clock/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df
new file mode 100644
index 00000000..38d94404
Binary files /dev/null and b/clock/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df differ
diff --git a/clock/Library/Artifacts/58/58d46fdcf88a81b19fc5e4017056a17c b/clock/Library/Artifacts/58/58d46fdcf88a81b19fc5e4017056a17c
new file mode 100644
index 00000000..443d7c86
Binary files /dev/null and b/clock/Library/Artifacts/58/58d46fdcf88a81b19fc5e4017056a17c differ
diff --git a/clock/Library/Artifacts/58/58e0bd22add46ced23c618bbad1d0904 b/clock/Library/Artifacts/58/58e0bd22add46ced23c618bbad1d0904
new file mode 100644
index 00000000..ed13de54
Binary files /dev/null and b/clock/Library/Artifacts/58/58e0bd22add46ced23c618bbad1d0904 differ
diff --git a/clock/Library/Artifacts/59/5944a8a4b874dd0fd8c725f417ba339c b/clock/Library/Artifacts/59/5944a8a4b874dd0fd8c725f417ba339c
new file mode 100644
index 00000000..87b044a9
Binary files /dev/null and b/clock/Library/Artifacts/59/5944a8a4b874dd0fd8c725f417ba339c differ
diff --git a/clock/Library/Artifacts/59/59f13c631c6a0e2f29836639cbdac853 b/clock/Library/Artifacts/59/59f13c631c6a0e2f29836639cbdac853
new file mode 100644
index 00000000..e34e1067
Binary files /dev/null and b/clock/Library/Artifacts/59/59f13c631c6a0e2f29836639cbdac853 differ
diff --git a/clock/Library/Artifacts/5a/5a562040b4b8fc3471a2e37caa0f924f b/clock/Library/Artifacts/5a/5a562040b4b8fc3471a2e37caa0f924f
new file mode 100644
index 00000000..2060c0ca
Binary files /dev/null and b/clock/Library/Artifacts/5a/5a562040b4b8fc3471a2e37caa0f924f differ
diff --git a/clock/Library/Artifacts/5a/5a568802cedaf6af8f4fdc3ce79c8292 b/clock/Library/Artifacts/5a/5a568802cedaf6af8f4fdc3ce79c8292
new file mode 100644
index 00000000..cbdb1ec4
Binary files /dev/null and b/clock/Library/Artifacts/5a/5a568802cedaf6af8f4fdc3ce79c8292 differ
diff --git a/clock/Library/Artifacts/5a/5a5ad2276e9c11914afb3183fd9f6843 b/clock/Library/Artifacts/5a/5a5ad2276e9c11914afb3183fd9f6843
new file mode 100644
index 00000000..b1d19510
Binary files /dev/null and b/clock/Library/Artifacts/5a/5a5ad2276e9c11914afb3183fd9f6843 differ
diff --git a/clock/Library/Artifacts/5a/5a61ac0a10574d3e4d75402ad8c8d1bd b/clock/Library/Artifacts/5a/5a61ac0a10574d3e4d75402ad8c8d1bd
new file mode 100644
index 00000000..ee42b4e7
Binary files /dev/null and b/clock/Library/Artifacts/5a/5a61ac0a10574d3e4d75402ad8c8d1bd differ
diff --git a/clock/Library/Artifacts/5a/5aa0fa949202e4ca9cd4c6ffae4eab9f b/clock/Library/Artifacts/5a/5aa0fa949202e4ca9cd4c6ffae4eab9f
new file mode 100644
index 00000000..78f1d6cc
Binary files /dev/null and b/clock/Library/Artifacts/5a/5aa0fa949202e4ca9cd4c6ffae4eab9f differ
diff --git a/clock/Library/Artifacts/5a/5ac22b8b6892db9321524cec494d9c77 b/clock/Library/Artifacts/5a/5ac22b8b6892db9321524cec494d9c77
new file mode 100644
index 00000000..8df59960
Binary files /dev/null and b/clock/Library/Artifacts/5a/5ac22b8b6892db9321524cec494d9c77 differ
diff --git a/clock/Library/Artifacts/5a/5ad610e3aed1be0d98f13599bdd1ffc8 b/clock/Library/Artifacts/5a/5ad610e3aed1be0d98f13599bdd1ffc8
new file mode 100644
index 00000000..75d76af5
Binary files /dev/null and b/clock/Library/Artifacts/5a/5ad610e3aed1be0d98f13599bdd1ffc8 differ
diff --git a/clock/Library/Artifacts/5a/5ae637754a66506f13b89e3f3a86776a b/clock/Library/Artifacts/5a/5ae637754a66506f13b89e3f3a86776a
new file mode 100644
index 00000000..1d277bc8
Binary files /dev/null and b/clock/Library/Artifacts/5a/5ae637754a66506f13b89e3f3a86776a differ
diff --git a/clock/Library/Artifacts/5a/5ae7d9b84fa59c041f811c9d762559da b/clock/Library/Artifacts/5a/5ae7d9b84fa59c041f811c9d762559da
new file mode 100644
index 00000000..5af16a72
Binary files /dev/null and b/clock/Library/Artifacts/5a/5ae7d9b84fa59c041f811c9d762559da differ
diff --git a/clock/Library/Artifacts/5b/5b25c5f1eb3f283e3d0a90f55fd43a6a b/clock/Library/Artifacts/5b/5b25c5f1eb3f283e3d0a90f55fd43a6a
new file mode 100644
index 00000000..ed92981f
Binary files /dev/null and b/clock/Library/Artifacts/5b/5b25c5f1eb3f283e3d0a90f55fd43a6a differ
diff --git a/clock/Library/Artifacts/5b/5b3cd04ce687e54649ff7da090cc84e9 b/clock/Library/Artifacts/5b/5b3cd04ce687e54649ff7da090cc84e9
new file mode 100644
index 00000000..90346c51
Binary files /dev/null and b/clock/Library/Artifacts/5b/5b3cd04ce687e54649ff7da090cc84e9 differ
diff --git a/clock/Library/Artifacts/5b/5ba09fc6787877ec4442166e1bfdfa26 b/clock/Library/Artifacts/5b/5ba09fc6787877ec4442166e1bfdfa26
new file mode 100644
index 00000000..2e01276f
Binary files /dev/null and b/clock/Library/Artifacts/5b/5ba09fc6787877ec4442166e1bfdfa26 differ
diff --git a/clock/Library/Artifacts/5b/5bd664879013ff61af81fe81c971a6f8 b/clock/Library/Artifacts/5b/5bd664879013ff61af81fe81c971a6f8
new file mode 100644
index 00000000..81c54531
Binary files /dev/null and b/clock/Library/Artifacts/5b/5bd664879013ff61af81fe81c971a6f8 differ
diff --git a/clock/Library/Artifacts/5c/5c780217d75c7b3effd9f8cc5e744183 b/clock/Library/Artifacts/5c/5c780217d75c7b3effd9f8cc5e744183
new file mode 100644
index 00000000..47dbea0a
Binary files /dev/null and b/clock/Library/Artifacts/5c/5c780217d75c7b3effd9f8cc5e744183 differ
diff --git a/clock/Library/Artifacts/5c/5c959948cdf2d40df14ff3bdb41dfc87 b/clock/Library/Artifacts/5c/5c959948cdf2d40df14ff3bdb41dfc87
new file mode 100644
index 00000000..e4f8b979
Binary files /dev/null and b/clock/Library/Artifacts/5c/5c959948cdf2d40df14ff3bdb41dfc87 differ
diff --git a/clock/Library/Artifacts/5c/5ca85e21dadba1c02de062eeda8102c6 b/clock/Library/Artifacts/5c/5ca85e21dadba1c02de062eeda8102c6
new file mode 100644
index 00000000..608e50ce
Binary files /dev/null and b/clock/Library/Artifacts/5c/5ca85e21dadba1c02de062eeda8102c6 differ
diff --git a/clock/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d b/clock/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d
new file mode 100644
index 00000000..288c085a
Binary files /dev/null and b/clock/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d differ
diff --git a/clock/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 b/clock/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663
new file mode 100644
index 00000000..cae6d4c3
Binary files /dev/null and b/clock/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 differ
diff --git a/clock/Library/Artifacts/5d/5d68d41657eca691f4c40abe6eec0480 b/clock/Library/Artifacts/5d/5d68d41657eca691f4c40abe6eec0480
new file mode 100644
index 00000000..02ed0195
Binary files /dev/null and b/clock/Library/Artifacts/5d/5d68d41657eca691f4c40abe6eec0480 differ
diff --git a/clock/Library/Artifacts/5d/5d6f6b7d2f2939bace1b6c83d7c5dd74 b/clock/Library/Artifacts/5d/5d6f6b7d2f2939bace1b6c83d7c5dd74
new file mode 100644
index 00000000..4a94f249
Binary files /dev/null and b/clock/Library/Artifacts/5d/5d6f6b7d2f2939bace1b6c83d7c5dd74 differ
diff --git a/clock/Library/Artifacts/5d/5d7fabd49299b5291ec90544b15725c3 b/clock/Library/Artifacts/5d/5d7fabd49299b5291ec90544b15725c3
new file mode 100644
index 00000000..1a82a420
Binary files /dev/null and b/clock/Library/Artifacts/5d/5d7fabd49299b5291ec90544b15725c3 differ
diff --git a/clock/Library/Artifacts/5d/5dc4d889b8046f6f012671949cf0c277 b/clock/Library/Artifacts/5d/5dc4d889b8046f6f012671949cf0c277
new file mode 100644
index 00000000..213c3059
Binary files /dev/null and b/clock/Library/Artifacts/5d/5dc4d889b8046f6f012671949cf0c277 differ
diff --git a/clock/Library/Artifacts/5d/5dc6a14940250ac20704164abfe52793 b/clock/Library/Artifacts/5d/5dc6a14940250ac20704164abfe52793
new file mode 100644
index 00000000..6f55991f
Binary files /dev/null and b/clock/Library/Artifacts/5d/5dc6a14940250ac20704164abfe52793 differ
diff --git a/clock/Library/Artifacts/5d/5dddda5fdb495d890a96e9aa924e044e b/clock/Library/Artifacts/5d/5dddda5fdb495d890a96e9aa924e044e
new file mode 100644
index 00000000..82ec5ba0
Binary files /dev/null and b/clock/Library/Artifacts/5d/5dddda5fdb495d890a96e9aa924e044e differ
diff --git a/clock/Library/Artifacts/5d/5dfeb99aed05e82cf15daeb88ce17817 b/clock/Library/Artifacts/5d/5dfeb99aed05e82cf15daeb88ce17817
new file mode 100644
index 00000000..73df252b
Binary files /dev/null and b/clock/Library/Artifacts/5d/5dfeb99aed05e82cf15daeb88ce17817 differ
diff --git a/clock/Library/Artifacts/5e/5e2b201130e82230a307e7b224349382 b/clock/Library/Artifacts/5e/5e2b201130e82230a307e7b224349382
new file mode 100644
index 00000000..c02e32e2
Binary files /dev/null and b/clock/Library/Artifacts/5e/5e2b201130e82230a307e7b224349382 differ
diff --git a/clock/Library/Artifacts/5e/5e2ec100206675fcb566f704a38e2ad6 b/clock/Library/Artifacts/5e/5e2ec100206675fcb566f704a38e2ad6
new file mode 100644
index 00000000..67a0b80f
Binary files /dev/null and b/clock/Library/Artifacts/5e/5e2ec100206675fcb566f704a38e2ad6 differ
diff --git a/clock/Library/Artifacts/5e/5e4500bd3b7c00e45a16a1629a37b6b4 b/clock/Library/Artifacts/5e/5e4500bd3b7c00e45a16a1629a37b6b4
new file mode 100644
index 00000000..14221a22
Binary files /dev/null and b/clock/Library/Artifacts/5e/5e4500bd3b7c00e45a16a1629a37b6b4 differ
diff --git a/clock/Library/Artifacts/5e/5ec25f82c75a3e1d1edba241555d678b b/clock/Library/Artifacts/5e/5ec25f82c75a3e1d1edba241555d678b
new file mode 100644
index 00000000..86cbfba9
Binary files /dev/null and b/clock/Library/Artifacts/5e/5ec25f82c75a3e1d1edba241555d678b differ
diff --git a/clock/Library/Artifacts/5e/5ed375e83fea86bb362a5364bd678c4c b/clock/Library/Artifacts/5e/5ed375e83fea86bb362a5364bd678c4c
new file mode 100644
index 00000000..5f29c0d3
Binary files /dev/null and b/clock/Library/Artifacts/5e/5ed375e83fea86bb362a5364bd678c4c differ
diff --git a/clock/Library/Artifacts/5e/5ef7f9ff238a4fa05d92385962812244 b/clock/Library/Artifacts/5e/5ef7f9ff238a4fa05d92385962812244
new file mode 100644
index 00000000..5b83cf97
Binary files /dev/null and b/clock/Library/Artifacts/5e/5ef7f9ff238a4fa05d92385962812244 differ
diff --git a/clock/Library/Artifacts/5e/5efbaae1921c56d458bf06f55f30dc95 b/clock/Library/Artifacts/5e/5efbaae1921c56d458bf06f55f30dc95
new file mode 100644
index 00000000..79dd5b6e
Binary files /dev/null and b/clock/Library/Artifacts/5e/5efbaae1921c56d458bf06f55f30dc95 differ
diff --git a/clock/Library/Artifacts/5f/5f04fc31e4073815f26c7bff7918c7ca b/clock/Library/Artifacts/5f/5f04fc31e4073815f26c7bff7918c7ca
new file mode 100644
index 00000000..fde77c14
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f04fc31e4073815f26c7bff7918c7ca differ
diff --git a/clock/Library/Artifacts/5f/5f0d37bad65229e5b79a1b4db60c0aab b/clock/Library/Artifacts/5f/5f0d37bad65229e5b79a1b4db60c0aab
new file mode 100644
index 00000000..32785ca0
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f0d37bad65229e5b79a1b4db60c0aab differ
diff --git a/clock/Library/Artifacts/5f/5f1cc2f7a0c1beaf475b5872c2fa705c b/clock/Library/Artifacts/5f/5f1cc2f7a0c1beaf475b5872c2fa705c
new file mode 100644
index 00000000..46829523
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f1cc2f7a0c1beaf475b5872c2fa705c differ
diff --git a/clock/Library/Artifacts/5f/5f1fc06236b84400680141afe8a816d6 b/clock/Library/Artifacts/5f/5f1fc06236b84400680141afe8a816d6
new file mode 100644
index 00000000..ebf27cef
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f1fc06236b84400680141afe8a816d6 differ
diff --git a/clock/Library/Artifacts/5f/5f303a19eeb36c4f518c4921ab7f4c4f b/clock/Library/Artifacts/5f/5f303a19eeb36c4f518c4921ab7f4c4f
new file mode 100644
index 00000000..68223e8d
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f303a19eeb36c4f518c4921ab7f4c4f differ
diff --git a/clock/Library/Artifacts/5f/5f3cb2db1e037c605b74f23aa6440d53 b/clock/Library/Artifacts/5f/5f3cb2db1e037c605b74f23aa6440d53
new file mode 100644
index 00000000..31c054f4
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f3cb2db1e037c605b74f23aa6440d53 differ
diff --git a/clock/Library/Artifacts/5f/5f473cf185f9410e08ea801e3fe2e640 b/clock/Library/Artifacts/5f/5f473cf185f9410e08ea801e3fe2e640
new file mode 100644
index 00000000..cb6371fc
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f473cf185f9410e08ea801e3fe2e640 differ
diff --git a/clock/Library/Artifacts/5f/5f83fc7c4c8fc88ab750f321d89c108a b/clock/Library/Artifacts/5f/5f83fc7c4c8fc88ab750f321d89c108a
new file mode 100644
index 00000000..0f2b3d4f
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f83fc7c4c8fc88ab750f321d89c108a differ
diff --git a/clock/Library/Artifacts/5f/5f893224783928139985627fbaf3ea7f b/clock/Library/Artifacts/5f/5f893224783928139985627fbaf3ea7f
new file mode 100644
index 00000000..a55f2c4f
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f893224783928139985627fbaf3ea7f differ
diff --git a/clock/Library/Artifacts/5f/5f93216b1c2b47cb871111af26d20ba7 b/clock/Library/Artifacts/5f/5f93216b1c2b47cb871111af26d20ba7
new file mode 100644
index 00000000..d2eac103
Binary files /dev/null and b/clock/Library/Artifacts/5f/5f93216b1c2b47cb871111af26d20ba7 differ
diff --git a/clock/Library/Artifacts/60/6072aebe9d51ca3c2f673d285c6c58ce b/clock/Library/Artifacts/60/6072aebe9d51ca3c2f673d285c6c58ce
new file mode 100644
index 00000000..b0494b89
Binary files /dev/null and b/clock/Library/Artifacts/60/6072aebe9d51ca3c2f673d285c6c58ce differ
diff --git a/clock/Library/Artifacts/60/6088e193d1561df4e477b507e3c872d8 b/clock/Library/Artifacts/60/6088e193d1561df4e477b507e3c872d8
new file mode 100644
index 00000000..ed30b8b8
Binary files /dev/null and b/clock/Library/Artifacts/60/6088e193d1561df4e477b507e3c872d8 differ
diff --git a/clock/Library/Artifacts/60/609017f15b60543709c1f3e8ddf2217c b/clock/Library/Artifacts/60/609017f15b60543709c1f3e8ddf2217c
new file mode 100644
index 00000000..67a5c5f1
Binary files /dev/null and b/clock/Library/Artifacts/60/609017f15b60543709c1f3e8ddf2217c differ
diff --git a/clock/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da b/clock/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da
new file mode 100644
index 00000000..d78eb5e8
Binary files /dev/null and b/clock/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da differ
diff --git a/clock/Library/Artifacts/60/60cd985753cd9c9d86c90c806d8753d6 b/clock/Library/Artifacts/60/60cd985753cd9c9d86c90c806d8753d6
new file mode 100644
index 00000000..4dac0da4
Binary files /dev/null and b/clock/Library/Artifacts/60/60cd985753cd9c9d86c90c806d8753d6 differ
diff --git a/clock/Library/Artifacts/61/611e4a668f5e41728a0e2957a546ac04 b/clock/Library/Artifacts/61/611e4a668f5e41728a0e2957a546ac04
new file mode 100644
index 00000000..c0c909ae
Binary files /dev/null and b/clock/Library/Artifacts/61/611e4a668f5e41728a0e2957a546ac04 differ
diff --git a/clock/Library/Artifacts/61/619650fd3f762ad2dab19d0cadbb3c7c b/clock/Library/Artifacts/61/619650fd3f762ad2dab19d0cadbb3c7c
new file mode 100644
index 00000000..cc145131
Binary files /dev/null and b/clock/Library/Artifacts/61/619650fd3f762ad2dab19d0cadbb3c7c differ
diff --git a/clock/Library/Artifacts/61/61a570c42f186a9fa5718e54b4b0ddda b/clock/Library/Artifacts/61/61a570c42f186a9fa5718e54b4b0ddda
new file mode 100644
index 00000000..5fc9b0aa
Binary files /dev/null and b/clock/Library/Artifacts/61/61a570c42f186a9fa5718e54b4b0ddda differ
diff --git a/clock/Library/Artifacts/61/61aacd72177434bbce09138310c8aaf5 b/clock/Library/Artifacts/61/61aacd72177434bbce09138310c8aaf5
new file mode 100644
index 00000000..3476c487
Binary files /dev/null and b/clock/Library/Artifacts/61/61aacd72177434bbce09138310c8aaf5 differ
diff --git a/clock/Library/Artifacts/61/61fa4032d17d8fea47e4b4b73fd2e038 b/clock/Library/Artifacts/61/61fa4032d17d8fea47e4b4b73fd2e038
new file mode 100644
index 00000000..105fef49
Binary files /dev/null and b/clock/Library/Artifacts/61/61fa4032d17d8fea47e4b4b73fd2e038 differ
diff --git a/clock/Library/Artifacts/62/6220826ea5774d754f0fec3917f000ec b/clock/Library/Artifacts/62/6220826ea5774d754f0fec3917f000ec
new file mode 100644
index 00000000..b2c75401
Binary files /dev/null and b/clock/Library/Artifacts/62/6220826ea5774d754f0fec3917f000ec differ
diff --git a/clock/Library/Artifacts/62/623f40c740c5b05adb3e3561f637993f b/clock/Library/Artifacts/62/623f40c740c5b05adb3e3561f637993f
new file mode 100644
index 00000000..816a8400
Binary files /dev/null and b/clock/Library/Artifacts/62/623f40c740c5b05adb3e3561f637993f differ
diff --git a/clock/Library/Artifacts/62/6276d67fa04e426b1be768a027bbdbdb b/clock/Library/Artifacts/62/6276d67fa04e426b1be768a027bbdbdb
new file mode 100644
index 00000000..ccd97861
Binary files /dev/null and b/clock/Library/Artifacts/62/6276d67fa04e426b1be768a027bbdbdb differ
diff --git a/clock/Library/Artifacts/62/627959dd33080ac7804b15d566fbc780 b/clock/Library/Artifacts/62/627959dd33080ac7804b15d566fbc780
new file mode 100644
index 00000000..b02f42cb
Binary files /dev/null and b/clock/Library/Artifacts/62/627959dd33080ac7804b15d566fbc780 differ
diff --git a/clock/Library/Artifacts/62/62896476c809352e36990c9c7abe9dd5 b/clock/Library/Artifacts/62/62896476c809352e36990c9c7abe9dd5
new file mode 100644
index 00000000..5b1de5fc
Binary files /dev/null and b/clock/Library/Artifacts/62/62896476c809352e36990c9c7abe9dd5 differ
diff --git a/clock/Library/Artifacts/62/62b70195903ff78cbded4bd65259b999 b/clock/Library/Artifacts/62/62b70195903ff78cbded4bd65259b999
new file mode 100644
index 00000000..4706a0db
Binary files /dev/null and b/clock/Library/Artifacts/62/62b70195903ff78cbded4bd65259b999 differ
diff --git a/clock/Library/Artifacts/62/62b90a0cc730a3915ad3cc87267d4f9f b/clock/Library/Artifacts/62/62b90a0cc730a3915ad3cc87267d4f9f
new file mode 100644
index 00000000..876dfa0c
Binary files /dev/null and b/clock/Library/Artifacts/62/62b90a0cc730a3915ad3cc87267d4f9f differ
diff --git a/clock/Library/Artifacts/62/62eea13449554dbc27f88dd6ca684cfe b/clock/Library/Artifacts/62/62eea13449554dbc27f88dd6ca684cfe
new file mode 100644
index 00000000..5e49c8c9
Binary files /dev/null and b/clock/Library/Artifacts/62/62eea13449554dbc27f88dd6ca684cfe differ
diff --git a/clock/Library/Artifacts/63/633a108c2b17a224a998a41ae8a32275 b/clock/Library/Artifacts/63/633a108c2b17a224a998a41ae8a32275
new file mode 100644
index 00000000..b63cd32f
Binary files /dev/null and b/clock/Library/Artifacts/63/633a108c2b17a224a998a41ae8a32275 differ
diff --git a/clock/Library/Artifacts/63/6363332690edeaad69b9e7ff0dc19075 b/clock/Library/Artifacts/63/6363332690edeaad69b9e7ff0dc19075
new file mode 100644
index 00000000..3af941bc
Binary files /dev/null and b/clock/Library/Artifacts/63/6363332690edeaad69b9e7ff0dc19075 differ
diff --git a/clock/Library/Artifacts/63/63a9f506966050501dfbf95060f6cdfc b/clock/Library/Artifacts/63/63a9f506966050501dfbf95060f6cdfc
new file mode 100644
index 00000000..e0203770
Binary files /dev/null and b/clock/Library/Artifacts/63/63a9f506966050501dfbf95060f6cdfc differ
diff --git a/clock/Library/Artifacts/63/63eac93743b490c75a727f0b1cb9475b b/clock/Library/Artifacts/63/63eac93743b490c75a727f0b1cb9475b
new file mode 100644
index 00000000..0e6d0d70
Binary files /dev/null and b/clock/Library/Artifacts/63/63eac93743b490c75a727f0b1cb9475b differ
diff --git a/clock/Library/Artifacts/64/6407f9352db1d2f6184732720e46a96d b/clock/Library/Artifacts/64/6407f9352db1d2f6184732720e46a96d
new file mode 100644
index 00000000..2fe3710f
Binary files /dev/null and b/clock/Library/Artifacts/64/6407f9352db1d2f6184732720e46a96d differ
diff --git a/clock/Library/Artifacts/64/6425f65ae48738ce325899687d159e3d b/clock/Library/Artifacts/64/6425f65ae48738ce325899687d159e3d
new file mode 100644
index 00000000..49d2817f
Binary files /dev/null and b/clock/Library/Artifacts/64/6425f65ae48738ce325899687d159e3d differ
diff --git a/clock/Library/Artifacts/64/646050224a5a0c0a5f533e33faf8d646 b/clock/Library/Artifacts/64/646050224a5a0c0a5f533e33faf8d646
new file mode 100644
index 00000000..ea5d6a0f
Binary files /dev/null and b/clock/Library/Artifacts/64/646050224a5a0c0a5f533e33faf8d646 differ
diff --git a/clock/Library/Artifacts/64/64633bcb44cb297fd82e40ce7f9d8dda b/clock/Library/Artifacts/64/64633bcb44cb297fd82e40ce7f9d8dda
new file mode 100644
index 00000000..4c381426
Binary files /dev/null and b/clock/Library/Artifacts/64/64633bcb44cb297fd82e40ce7f9d8dda differ
diff --git a/clock/Library/Artifacts/64/6468baaecc107e73cefb6043adc52d50 b/clock/Library/Artifacts/64/6468baaecc107e73cefb6043adc52d50
new file mode 100644
index 00000000..34de83dd
Binary files /dev/null and b/clock/Library/Artifacts/64/6468baaecc107e73cefb6043adc52d50 differ
diff --git a/clock/Library/Artifacts/64/646fd5c5304bc6e7c2b37508be0ce976 b/clock/Library/Artifacts/64/646fd5c5304bc6e7c2b37508be0ce976
new file mode 100644
index 00000000..b838f26e
Binary files /dev/null and b/clock/Library/Artifacts/64/646fd5c5304bc6e7c2b37508be0ce976 differ
diff --git a/clock/Library/Artifacts/64/6470e5b271af74adff44c0ac4f81e92b b/clock/Library/Artifacts/64/6470e5b271af74adff44c0ac4f81e92b
new file mode 100644
index 00000000..eb1b4ac3
Binary files /dev/null and b/clock/Library/Artifacts/64/6470e5b271af74adff44c0ac4f81e92b differ
diff --git a/clock/Library/Artifacts/64/648787267f66e572ed57bfe89d62e33c b/clock/Library/Artifacts/64/648787267f66e572ed57bfe89d62e33c
new file mode 100644
index 00000000..fee777d5
Binary files /dev/null and b/clock/Library/Artifacts/64/648787267f66e572ed57bfe89d62e33c differ
diff --git a/clock/Library/Artifacts/64/64c9332b4057fef1c3e370ebd3e4563d b/clock/Library/Artifacts/64/64c9332b4057fef1c3e370ebd3e4563d
new file mode 100644
index 00000000..841efe0c
Binary files /dev/null and b/clock/Library/Artifacts/64/64c9332b4057fef1c3e370ebd3e4563d differ
diff --git a/clock/Library/Artifacts/64/64d0632cff21261be599ddc86a785696 b/clock/Library/Artifacts/64/64d0632cff21261be599ddc86a785696
new file mode 100644
index 00000000..659b8dff
Binary files /dev/null and b/clock/Library/Artifacts/64/64d0632cff21261be599ddc86a785696 differ
diff --git a/clock/Library/Artifacts/64/64ebc5595d0d54b062357351508addc7 b/clock/Library/Artifacts/64/64ebc5595d0d54b062357351508addc7
new file mode 100644
index 00000000..0b5622ce
Binary files /dev/null and b/clock/Library/Artifacts/64/64ebc5595d0d54b062357351508addc7 differ
diff --git a/clock/Library/Artifacts/65/6547f81a0e3855adfd6922f51a5769f5 b/clock/Library/Artifacts/65/6547f81a0e3855adfd6922f51a5769f5
new file mode 100644
index 00000000..80dbd024
Binary files /dev/null and b/clock/Library/Artifacts/65/6547f81a0e3855adfd6922f51a5769f5 differ
diff --git a/clock/Library/Artifacts/65/65c0c8a06acd4441a4fd385e5647c5af b/clock/Library/Artifacts/65/65c0c8a06acd4441a4fd385e5647c5af
new file mode 100644
index 00000000..9121bede
Binary files /dev/null and b/clock/Library/Artifacts/65/65c0c8a06acd4441a4fd385e5647c5af differ
diff --git a/clock/Library/Artifacts/65/65d86183e9e8dd2d76b0dc4bd45fc8ba b/clock/Library/Artifacts/65/65d86183e9e8dd2d76b0dc4bd45fc8ba
new file mode 100644
index 00000000..190ee1df
Binary files /dev/null and b/clock/Library/Artifacts/65/65d86183e9e8dd2d76b0dc4bd45fc8ba differ
diff --git a/clock/Library/Artifacts/65/65e100c7a65aa51dd8fbc20edc4f49e5 b/clock/Library/Artifacts/65/65e100c7a65aa51dd8fbc20edc4f49e5
new file mode 100644
index 00000000..7817321d
Binary files /dev/null and b/clock/Library/Artifacts/65/65e100c7a65aa51dd8fbc20edc4f49e5 differ
diff --git a/clock/Library/Artifacts/65/65e605a4906157ad3e9dea82f03c1c67 b/clock/Library/Artifacts/65/65e605a4906157ad3e9dea82f03c1c67
new file mode 100644
index 00000000..c6f8527a
Binary files /dev/null and b/clock/Library/Artifacts/65/65e605a4906157ad3e9dea82f03c1c67 differ
diff --git a/clock/Library/Artifacts/65/65e98b844c62025e1e17acb528099555 b/clock/Library/Artifacts/65/65e98b844c62025e1e17acb528099555
new file mode 100644
index 00000000..74507905
Binary files /dev/null and b/clock/Library/Artifacts/65/65e98b844c62025e1e17acb528099555 differ
diff --git a/clock/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 b/clock/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9
new file mode 100644
index 00000000..67b013a4
Binary files /dev/null and b/clock/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 differ
diff --git a/clock/Library/Artifacts/66/662c12f54f48b75c10062cb8fb603431 b/clock/Library/Artifacts/66/662c12f54f48b75c10062cb8fb603431
new file mode 100644
index 00000000..c8bd634d
Binary files /dev/null and b/clock/Library/Artifacts/66/662c12f54f48b75c10062cb8fb603431 differ
diff --git a/clock/Library/Artifacts/66/66308f8150b5236267213688e451b5ae b/clock/Library/Artifacts/66/66308f8150b5236267213688e451b5ae
new file mode 100644
index 00000000..cf7910bb
Binary files /dev/null and b/clock/Library/Artifacts/66/66308f8150b5236267213688e451b5ae differ
diff --git a/clock/Library/Artifacts/66/66354c32e750bf76f2dbe2c974a5ac20 b/clock/Library/Artifacts/66/66354c32e750bf76f2dbe2c974a5ac20
new file mode 100644
index 00000000..ff5223ef
Binary files /dev/null and b/clock/Library/Artifacts/66/66354c32e750bf76f2dbe2c974a5ac20 differ
diff --git a/clock/Library/Artifacts/66/668c7826be7436de1737470c427c4c5c b/clock/Library/Artifacts/66/668c7826be7436de1737470c427c4c5c
new file mode 100644
index 00000000..1f2ce8fa
Binary files /dev/null and b/clock/Library/Artifacts/66/668c7826be7436de1737470c427c4c5c differ
diff --git a/clock/Library/Artifacts/66/668eb1cf87007f7e7abaaae37a2c1a88 b/clock/Library/Artifacts/66/668eb1cf87007f7e7abaaae37a2c1a88
new file mode 100644
index 00000000..8436f0ed
Binary files /dev/null and b/clock/Library/Artifacts/66/668eb1cf87007f7e7abaaae37a2c1a88 differ
diff --git a/clock/Library/Artifacts/66/66cb8dd935199e9d19a9b48268d89c90 b/clock/Library/Artifacts/66/66cb8dd935199e9d19a9b48268d89c90
new file mode 100644
index 00000000..ac3df35e
Binary files /dev/null and b/clock/Library/Artifacts/66/66cb8dd935199e9d19a9b48268d89c90 differ
diff --git a/clock/Library/Artifacts/66/66dc943b859dc6bcb78b1d3047c8522c b/clock/Library/Artifacts/66/66dc943b859dc6bcb78b1d3047c8522c
new file mode 100644
index 00000000..62f6143d
Binary files /dev/null and b/clock/Library/Artifacts/66/66dc943b859dc6bcb78b1d3047c8522c differ
diff --git a/clock/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 b/clock/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1
new file mode 100644
index 00000000..7d1d8e02
Binary files /dev/null and b/clock/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 differ
diff --git a/clock/Library/Artifacts/67/6700d8eb1538b6d927d39a49652f6b26 b/clock/Library/Artifacts/67/6700d8eb1538b6d927d39a49652f6b26
new file mode 100644
index 00000000..5ceeb83e
Binary files /dev/null and b/clock/Library/Artifacts/67/6700d8eb1538b6d927d39a49652f6b26 differ
diff --git a/clock/Library/Artifacts/67/672e9420477724adcc5d9d0536b6b327 b/clock/Library/Artifacts/67/672e9420477724adcc5d9d0536b6b327
new file mode 100644
index 00000000..316bf8ab
Binary files /dev/null and b/clock/Library/Artifacts/67/672e9420477724adcc5d9d0536b6b327 differ
diff --git a/clock/Library/Artifacts/67/6732ef35fdb392ed86ac927843971d4d b/clock/Library/Artifacts/67/6732ef35fdb392ed86ac927843971d4d
new file mode 100644
index 00000000..e4142087
Binary files /dev/null and b/clock/Library/Artifacts/67/6732ef35fdb392ed86ac927843971d4d differ
diff --git a/clock/Library/Artifacts/67/6776860377af6eacbe1b9180f5a9c8f9 b/clock/Library/Artifacts/67/6776860377af6eacbe1b9180f5a9c8f9
new file mode 100644
index 00000000..50b77682
Binary files /dev/null and b/clock/Library/Artifacts/67/6776860377af6eacbe1b9180f5a9c8f9 differ
diff --git a/clock/Library/Artifacts/67/6787b149d251226e52880d9e478740ae b/clock/Library/Artifacts/67/6787b149d251226e52880d9e478740ae
new file mode 100644
index 00000000..63fde1bb
Binary files /dev/null and b/clock/Library/Artifacts/67/6787b149d251226e52880d9e478740ae differ
diff --git a/clock/Library/Artifacts/67/678fe98469ebe2f6ee0948e932ad48fe b/clock/Library/Artifacts/67/678fe98469ebe2f6ee0948e932ad48fe
new file mode 100644
index 00000000..cb8f6878
Binary files /dev/null and b/clock/Library/Artifacts/67/678fe98469ebe2f6ee0948e932ad48fe differ
diff --git a/clock/Library/Artifacts/67/679bf5683bab61b467dc89fa49169d87 b/clock/Library/Artifacts/67/679bf5683bab61b467dc89fa49169d87
new file mode 100644
index 00000000..417585a1
Binary files /dev/null and b/clock/Library/Artifacts/67/679bf5683bab61b467dc89fa49169d87 differ
diff --git a/clock/Library/Artifacts/67/67e4dd2f343895383fd11e502fa14e31 b/clock/Library/Artifacts/67/67e4dd2f343895383fd11e502fa14e31
new file mode 100644
index 00000000..7e5ff547
Binary files /dev/null and b/clock/Library/Artifacts/67/67e4dd2f343895383fd11e502fa14e31 differ
diff --git a/clock/Library/Artifacts/67/67e63d7095539bdbe72e6b50dc6a3117 b/clock/Library/Artifacts/67/67e63d7095539bdbe72e6b50dc6a3117
new file mode 100644
index 00000000..5c5f8745
Binary files /dev/null and b/clock/Library/Artifacts/67/67e63d7095539bdbe72e6b50dc6a3117 differ
diff --git a/clock/Library/Artifacts/67/67f723c92a80a8b1f748e9d3c440f116 b/clock/Library/Artifacts/67/67f723c92a80a8b1f748e9d3c440f116
new file mode 100644
index 00000000..e5c04c67
Binary files /dev/null and b/clock/Library/Artifacts/67/67f723c92a80a8b1f748e9d3c440f116 differ
diff --git a/clock/Library/Artifacts/67/67faf668c02d0510504b2b40f8453cc5 b/clock/Library/Artifacts/67/67faf668c02d0510504b2b40f8453cc5
new file mode 100644
index 00000000..f0855248
Binary files /dev/null and b/clock/Library/Artifacts/67/67faf668c02d0510504b2b40f8453cc5 differ
diff --git a/clock/Library/Artifacts/67/67ff18fabb6940efbdbda718963c93f4 b/clock/Library/Artifacts/67/67ff18fabb6940efbdbda718963c93f4
new file mode 100644
index 00000000..97ef888f
Binary files /dev/null and b/clock/Library/Artifacts/67/67ff18fabb6940efbdbda718963c93f4 differ
diff --git a/clock/Library/Artifacts/68/688a50e729482f5c8320bc625fe58000 b/clock/Library/Artifacts/68/688a50e729482f5c8320bc625fe58000
new file mode 100644
index 00000000..0faa4999
Binary files /dev/null and b/clock/Library/Artifacts/68/688a50e729482f5c8320bc625fe58000 differ
diff --git a/clock/Library/Artifacts/68/689e18a9411d5d0a41ed8f244ebaf778 b/clock/Library/Artifacts/68/689e18a9411d5d0a41ed8f244ebaf778
new file mode 100644
index 00000000..964130d6
Binary files /dev/null and b/clock/Library/Artifacts/68/689e18a9411d5d0a41ed8f244ebaf778 differ
diff --git a/clock/Library/Artifacts/68/68ac9e3081dd425f7b8f0ac9e1732902 b/clock/Library/Artifacts/68/68ac9e3081dd425f7b8f0ac9e1732902
new file mode 100644
index 00000000..04e2818e
Binary files /dev/null and b/clock/Library/Artifacts/68/68ac9e3081dd425f7b8f0ac9e1732902 differ
diff --git a/clock/Library/Artifacts/68/68eba0c6eb22037d6486d66cf70fa653 b/clock/Library/Artifacts/68/68eba0c6eb22037d6486d66cf70fa653
new file mode 100644
index 00000000..f352b281
Binary files /dev/null and b/clock/Library/Artifacts/68/68eba0c6eb22037d6486d66cf70fa653 differ
diff --git a/clock/Library/Artifacts/69/6917b8c8a47f7e1cb6023a6a0b263798 b/clock/Library/Artifacts/69/6917b8c8a47f7e1cb6023a6a0b263798
new file mode 100644
index 00000000..dcafabb0
Binary files /dev/null and b/clock/Library/Artifacts/69/6917b8c8a47f7e1cb6023a6a0b263798 differ
diff --git a/clock/Library/Artifacts/69/6935fb18091ac08209bd0d15bd55692a b/clock/Library/Artifacts/69/6935fb18091ac08209bd0d15bd55692a
new file mode 100644
index 00000000..60eb7173
Binary files /dev/null and b/clock/Library/Artifacts/69/6935fb18091ac08209bd0d15bd55692a differ
diff --git a/clock/Library/Artifacts/69/6941f020496f6b94437bd565685dec2f b/clock/Library/Artifacts/69/6941f020496f6b94437bd565685dec2f
new file mode 100644
index 00000000..fa203701
Binary files /dev/null and b/clock/Library/Artifacts/69/6941f020496f6b94437bd565685dec2f differ
diff --git a/clock/Library/Artifacts/69/69839c2f97d29175348474ae0e11670e b/clock/Library/Artifacts/69/69839c2f97d29175348474ae0e11670e
new file mode 100644
index 00000000..2792147a
Binary files /dev/null and b/clock/Library/Artifacts/69/69839c2f97d29175348474ae0e11670e differ
diff --git a/clock/Library/Artifacts/69/699055fa6206fbc3280d9b44aa1ea088 b/clock/Library/Artifacts/69/699055fa6206fbc3280d9b44aa1ea088
new file mode 100644
index 00000000..436a49a9
Binary files /dev/null and b/clock/Library/Artifacts/69/699055fa6206fbc3280d9b44aa1ea088 differ
diff --git a/clock/Library/Artifacts/69/69aeb2a67f92e60708a16613aebfd430 b/clock/Library/Artifacts/69/69aeb2a67f92e60708a16613aebfd430
new file mode 100644
index 00000000..864d58e7
Binary files /dev/null and b/clock/Library/Artifacts/69/69aeb2a67f92e60708a16613aebfd430 differ
diff --git a/clock/Library/Artifacts/6a/6a43f37acb533d22948f44bd88e357cc b/clock/Library/Artifacts/6a/6a43f37acb533d22948f44bd88e357cc
new file mode 100644
index 00000000..b1089b9a
Binary files /dev/null and b/clock/Library/Artifacts/6a/6a43f37acb533d22948f44bd88e357cc differ
diff --git a/clock/Library/Artifacts/6a/6a5147a1fd1cea56e8858cd484074c5e b/clock/Library/Artifacts/6a/6a5147a1fd1cea56e8858cd484074c5e
new file mode 100644
index 00000000..5df6ea52
Binary files /dev/null and b/clock/Library/Artifacts/6a/6a5147a1fd1cea56e8858cd484074c5e differ
diff --git a/clock/Library/Artifacts/6a/6a907375d55461b5b042f0eca2505f6d b/clock/Library/Artifacts/6a/6a907375d55461b5b042f0eca2505f6d
new file mode 100644
index 00000000..dc09c93b
Binary files /dev/null and b/clock/Library/Artifacts/6a/6a907375d55461b5b042f0eca2505f6d differ
diff --git a/clock/Library/Artifacts/6a/6a98254857369f82257467e4c97c7677 b/clock/Library/Artifacts/6a/6a98254857369f82257467e4c97c7677
new file mode 100644
index 00000000..f552458b
Binary files /dev/null and b/clock/Library/Artifacts/6a/6a98254857369f82257467e4c97c7677 differ
diff --git a/clock/Library/Artifacts/6a/6aaf1368869aecc3227dc31154642269 b/clock/Library/Artifacts/6a/6aaf1368869aecc3227dc31154642269
new file mode 100644
index 00000000..b4467d05
Binary files /dev/null and b/clock/Library/Artifacts/6a/6aaf1368869aecc3227dc31154642269 differ
diff --git a/clock/Library/Artifacts/6a/6ac72a75dbcf1fbc13508f1c6638e7b4 b/clock/Library/Artifacts/6a/6ac72a75dbcf1fbc13508f1c6638e7b4
new file mode 100644
index 00000000..6509ea78
Binary files /dev/null and b/clock/Library/Artifacts/6a/6ac72a75dbcf1fbc13508f1c6638e7b4 differ
diff --git a/clock/Library/Artifacts/6a/6ad234b2bc56f93ecad7a5f51fdad6fd b/clock/Library/Artifacts/6a/6ad234b2bc56f93ecad7a5f51fdad6fd
new file mode 100644
index 00000000..3eb71f82
Binary files /dev/null and b/clock/Library/Artifacts/6a/6ad234b2bc56f93ecad7a5f51fdad6fd differ
diff --git a/clock/Library/Artifacts/6a/6adaa7914fccbf73cbed059ebdec7eea b/clock/Library/Artifacts/6a/6adaa7914fccbf73cbed059ebdec7eea
new file mode 100644
index 00000000..6c19e3de
Binary files /dev/null and b/clock/Library/Artifacts/6a/6adaa7914fccbf73cbed059ebdec7eea differ
diff --git a/clock/Library/Artifacts/6b/6b27776496d52feb65ced5624652c65b b/clock/Library/Artifacts/6b/6b27776496d52feb65ced5624652c65b
new file mode 100644
index 00000000..3ee93b64
Binary files /dev/null and b/clock/Library/Artifacts/6b/6b27776496d52feb65ced5624652c65b differ
diff --git a/clock/Library/Artifacts/6b/6be9dc54110a31143d3a43691488c26b b/clock/Library/Artifacts/6b/6be9dc54110a31143d3a43691488c26b
new file mode 100644
index 00000000..64dec8d0
Binary files /dev/null and b/clock/Library/Artifacts/6b/6be9dc54110a31143d3a43691488c26b differ
diff --git a/clock/Library/Artifacts/6b/6bf38563b79298cda441a91bdb5e0e5e b/clock/Library/Artifacts/6b/6bf38563b79298cda441a91bdb5e0e5e
new file mode 100644
index 00000000..a75bfd74
Binary files /dev/null and b/clock/Library/Artifacts/6b/6bf38563b79298cda441a91bdb5e0e5e differ
diff --git a/clock/Library/Artifacts/6b/6bfdc85be78478b12571c47c1fa4d3aa b/clock/Library/Artifacts/6b/6bfdc85be78478b12571c47c1fa4d3aa
new file mode 100644
index 00000000..83c6e80a
Binary files /dev/null and b/clock/Library/Artifacts/6b/6bfdc85be78478b12571c47c1fa4d3aa differ
diff --git a/clock/Library/Artifacts/6c/6c13f748a804ed4129501586fc84dae6 b/clock/Library/Artifacts/6c/6c13f748a804ed4129501586fc84dae6
new file mode 100644
index 00000000..4560b824
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c13f748a804ed4129501586fc84dae6 differ
diff --git a/clock/Library/Artifacts/6c/6c2ba0d183d4519b09f715e6e746221a b/clock/Library/Artifacts/6c/6c2ba0d183d4519b09f715e6e746221a
new file mode 100644
index 00000000..218457ec
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c2ba0d183d4519b09f715e6e746221a differ
diff --git a/clock/Library/Artifacts/6c/6c33be4434dba6e2ef66e9e352d20647 b/clock/Library/Artifacts/6c/6c33be4434dba6e2ef66e9e352d20647
new file mode 100644
index 00000000..28d301a2
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c33be4434dba6e2ef66e9e352d20647 differ
diff --git a/clock/Library/Artifacts/6c/6c61919ca1de25c69795afdc5fa37843 b/clock/Library/Artifacts/6c/6c61919ca1de25c69795afdc5fa37843
new file mode 100644
index 00000000..2f5a63dc
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c61919ca1de25c69795afdc5fa37843 differ
diff --git a/clock/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 b/clock/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443
new file mode 100644
index 00000000..b810d618
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 differ
diff --git a/clock/Library/Artifacts/6c/6c89c0903def4275f083b5cb2a8cfda8 b/clock/Library/Artifacts/6c/6c89c0903def4275f083b5cb2a8cfda8
new file mode 100644
index 00000000..ea0081c5
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c89c0903def4275f083b5cb2a8cfda8 differ
diff --git a/clock/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 b/clock/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9
new file mode 100644
index 00000000..89520076
Binary files /dev/null and b/clock/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 differ
diff --git a/clock/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e b/clock/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e
new file mode 100644
index 00000000..233a5549
Binary files /dev/null and b/clock/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e differ
diff --git a/clock/Library/Artifacts/6d/6d05d2d20b2c47bb05d559b8f7159701 b/clock/Library/Artifacts/6d/6d05d2d20b2c47bb05d559b8f7159701
new file mode 100644
index 00000000..3f00c1f5
Binary files /dev/null and b/clock/Library/Artifacts/6d/6d05d2d20b2c47bb05d559b8f7159701 differ
diff --git a/clock/Library/Artifacts/6d/6daedf3554b7b19329f47d68c8c3b6b7 b/clock/Library/Artifacts/6d/6daedf3554b7b19329f47d68c8c3b6b7
new file mode 100644
index 00000000..273de8df
Binary files /dev/null and b/clock/Library/Artifacts/6d/6daedf3554b7b19329f47d68c8c3b6b7 differ
diff --git a/clock/Library/Artifacts/6e/6e0f47707af983e9b8ec255724f8f81e b/clock/Library/Artifacts/6e/6e0f47707af983e9b8ec255724f8f81e
new file mode 100644
index 00000000..ea47d87b
Binary files /dev/null and b/clock/Library/Artifacts/6e/6e0f47707af983e9b8ec255724f8f81e differ
diff --git a/clock/Library/Artifacts/6e/6e20f6756de9ecf020809539789e9190 b/clock/Library/Artifacts/6e/6e20f6756de9ecf020809539789e9190
new file mode 100644
index 00000000..ec3f333d
Binary files /dev/null and b/clock/Library/Artifacts/6e/6e20f6756de9ecf020809539789e9190 differ
diff --git a/clock/Library/Artifacts/6e/6e670ff91c34f90da951806a3372d225 b/clock/Library/Artifacts/6e/6e670ff91c34f90da951806a3372d225
new file mode 100644
index 00000000..81d616b3
Binary files /dev/null and b/clock/Library/Artifacts/6e/6e670ff91c34f90da951806a3372d225 differ
diff --git a/clock/Library/Artifacts/6e/6ebd1f73492fdf6ca46111dee2d6165c b/clock/Library/Artifacts/6e/6ebd1f73492fdf6ca46111dee2d6165c
new file mode 100644
index 00000000..0ddb8927
Binary files /dev/null and b/clock/Library/Artifacts/6e/6ebd1f73492fdf6ca46111dee2d6165c differ
diff --git a/clock/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c b/clock/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c
new file mode 100644
index 00000000..41fe660c
Binary files /dev/null and b/clock/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c differ
diff --git a/clock/Library/Artifacts/6e/6ed89a84906bc4b6fcf8b33dc3c19598 b/clock/Library/Artifacts/6e/6ed89a84906bc4b6fcf8b33dc3c19598
new file mode 100644
index 00000000..b25e1f39
Binary files /dev/null and b/clock/Library/Artifacts/6e/6ed89a84906bc4b6fcf8b33dc3c19598 differ
diff --git a/clock/Library/Artifacts/6e/6ed89d6a1dc9713f873e994213522004 b/clock/Library/Artifacts/6e/6ed89d6a1dc9713f873e994213522004
new file mode 100644
index 00000000..cbaaee77
Binary files /dev/null and b/clock/Library/Artifacts/6e/6ed89d6a1dc9713f873e994213522004 differ
diff --git a/clock/Library/Artifacts/6f/6f5812a832955954081183546ed3286a b/clock/Library/Artifacts/6f/6f5812a832955954081183546ed3286a
new file mode 100644
index 00000000..a5bff4bd
Binary files /dev/null and b/clock/Library/Artifacts/6f/6f5812a832955954081183546ed3286a differ
diff --git a/clock/Library/Artifacts/6f/6f69f7cabd6e4abec40cd458376ccfcc b/clock/Library/Artifacts/6f/6f69f7cabd6e4abec40cd458376ccfcc
new file mode 100644
index 00000000..50a638e0
Binary files /dev/null and b/clock/Library/Artifacts/6f/6f69f7cabd6e4abec40cd458376ccfcc differ
diff --git a/clock/Library/Artifacts/6f/6fa7e45f4fea48d8973e500949498a6b b/clock/Library/Artifacts/6f/6fa7e45f4fea48d8973e500949498a6b
new file mode 100644
index 00000000..d104a4a2
Binary files /dev/null and b/clock/Library/Artifacts/6f/6fa7e45f4fea48d8973e500949498a6b differ
diff --git a/clock/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 b/clock/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44
new file mode 100644
index 00000000..b20da55f
Binary files /dev/null and b/clock/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 differ
diff --git a/clock/Library/Artifacts/70/70690c611dee5cb02a12a79b2986b290 b/clock/Library/Artifacts/70/70690c611dee5cb02a12a79b2986b290
new file mode 100644
index 00000000..e496b8b3
Binary files /dev/null and b/clock/Library/Artifacts/70/70690c611dee5cb02a12a79b2986b290 differ
diff --git a/clock/Library/Artifacts/70/70a72c9308f9e4da72713c69c7739562 b/clock/Library/Artifacts/70/70a72c9308f9e4da72713c69c7739562
new file mode 100644
index 00000000..75b7e4d0
Binary files /dev/null and b/clock/Library/Artifacts/70/70a72c9308f9e4da72713c69c7739562 differ
diff --git a/clock/Library/Artifacts/70/70affe89880455925ed49877ca0071a4 b/clock/Library/Artifacts/70/70affe89880455925ed49877ca0071a4
new file mode 100644
index 00000000..68dbdfb4
Binary files /dev/null and b/clock/Library/Artifacts/70/70affe89880455925ed49877ca0071a4 differ
diff --git a/clock/Library/Artifacts/70/70b842b91ab6d0bcfb84a221fb71f25f b/clock/Library/Artifacts/70/70b842b91ab6d0bcfb84a221fb71f25f
new file mode 100644
index 00000000..015995d3
Binary files /dev/null and b/clock/Library/Artifacts/70/70b842b91ab6d0bcfb84a221fb71f25f differ
diff --git a/clock/Library/Artifacts/70/70db403a8eb729e7062f273c70a0cb56 b/clock/Library/Artifacts/70/70db403a8eb729e7062f273c70a0cb56
new file mode 100644
index 00000000..ab51b0c6
Binary files /dev/null and b/clock/Library/Artifacts/70/70db403a8eb729e7062f273c70a0cb56 differ
diff --git a/clock/Library/Artifacts/71/7108920c47fbefa2ba146d6a559ec41e b/clock/Library/Artifacts/71/7108920c47fbefa2ba146d6a559ec41e
new file mode 100644
index 00000000..c02d4477
Binary files /dev/null and b/clock/Library/Artifacts/71/7108920c47fbefa2ba146d6a559ec41e differ
diff --git a/clock/Library/Artifacts/71/7136abb7cd30e1b9f67bd55728b588fa b/clock/Library/Artifacts/71/7136abb7cd30e1b9f67bd55728b588fa
new file mode 100644
index 00000000..3f2e35ef
Binary files /dev/null and b/clock/Library/Artifacts/71/7136abb7cd30e1b9f67bd55728b588fa differ
diff --git a/clock/Library/Artifacts/71/7181d769a0da6ca74c62767fd7bc1a92 b/clock/Library/Artifacts/71/7181d769a0da6ca74c62767fd7bc1a92
new file mode 100644
index 00000000..c145d03e
Binary files /dev/null and b/clock/Library/Artifacts/71/7181d769a0da6ca74c62767fd7bc1a92 differ
diff --git a/clock/Library/Artifacts/71/7192838da940edbbf45509b4059c1061 b/clock/Library/Artifacts/71/7192838da940edbbf45509b4059c1061
new file mode 100644
index 00000000..22284740
Binary files /dev/null and b/clock/Library/Artifacts/71/7192838da940edbbf45509b4059c1061 differ
diff --git a/clock/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 b/clock/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33
new file mode 100644
index 00000000..33837750
Binary files /dev/null and b/clock/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 differ
diff --git a/clock/Library/Artifacts/71/71e851f64f3270db04b6d9cf2e4ddead b/clock/Library/Artifacts/71/71e851f64f3270db04b6d9cf2e4ddead
new file mode 100644
index 00000000..3fe2df84
Binary files /dev/null and b/clock/Library/Artifacts/71/71e851f64f3270db04b6d9cf2e4ddead differ
diff --git a/clock/Library/Artifacts/72/722dd7bc653ee1273059d3427de53513 b/clock/Library/Artifacts/72/722dd7bc653ee1273059d3427de53513
new file mode 100644
index 00000000..7dab6189
Binary files /dev/null and b/clock/Library/Artifacts/72/722dd7bc653ee1273059d3427de53513 differ
diff --git a/clock/Library/Artifacts/72/724697400fd9c9558b0f5672c9a2e2e8 b/clock/Library/Artifacts/72/724697400fd9c9558b0f5672c9a2e2e8
new file mode 100644
index 00000000..be34ffa3
Binary files /dev/null and b/clock/Library/Artifacts/72/724697400fd9c9558b0f5672c9a2e2e8 differ
diff --git a/clock/Library/Artifacts/72/727019887099d1c6a6965221f4309a4d b/clock/Library/Artifacts/72/727019887099d1c6a6965221f4309a4d
new file mode 100644
index 00000000..867f1ffb
Binary files /dev/null and b/clock/Library/Artifacts/72/727019887099d1c6a6965221f4309a4d differ
diff --git a/clock/Library/Artifacts/72/72772c84b54cb493c821d0b7cc2b26ab b/clock/Library/Artifacts/72/72772c84b54cb493c821d0b7cc2b26ab
new file mode 100644
index 00000000..edbd6a4a
Binary files /dev/null and b/clock/Library/Artifacts/72/72772c84b54cb493c821d0b7cc2b26ab differ
diff --git a/clock/Library/Artifacts/72/72b2de892075550843740653e013537c b/clock/Library/Artifacts/72/72b2de892075550843740653e013537c
new file mode 100644
index 00000000..e39b474f
Binary files /dev/null and b/clock/Library/Artifacts/72/72b2de892075550843740653e013537c differ
diff --git a/clock/Library/Artifacts/73/73108bddc39b44b21bec93e5b0fb1390 b/clock/Library/Artifacts/73/73108bddc39b44b21bec93e5b0fb1390
new file mode 100644
index 00000000..c0a8f02b
Binary files /dev/null and b/clock/Library/Artifacts/73/73108bddc39b44b21bec93e5b0fb1390 differ
diff --git a/clock/Library/Artifacts/73/73b30698761cc876468f0957fc2dcdb1 b/clock/Library/Artifacts/73/73b30698761cc876468f0957fc2dcdb1
new file mode 100644
index 00000000..d3372b7d
Binary files /dev/null and b/clock/Library/Artifacts/73/73b30698761cc876468f0957fc2dcdb1 differ
diff --git a/clock/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 b/clock/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2
new file mode 100644
index 00000000..2c25d27e
Binary files /dev/null and b/clock/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 differ
diff --git a/clock/Library/Artifacts/73/73fa2d19a4ab5f5ac0be7d8a32a77365 b/clock/Library/Artifacts/73/73fa2d19a4ab5f5ac0be7d8a32a77365
new file mode 100644
index 00000000..f4e50a30
Binary files /dev/null and b/clock/Library/Artifacts/73/73fa2d19a4ab5f5ac0be7d8a32a77365 differ
diff --git a/clock/Library/Artifacts/74/742cbb989ba59f929cf4c1723056f9df b/clock/Library/Artifacts/74/742cbb989ba59f929cf4c1723056f9df
new file mode 100644
index 00000000..cda9935a
Binary files /dev/null and b/clock/Library/Artifacts/74/742cbb989ba59f929cf4c1723056f9df differ
diff --git a/clock/Library/Artifacts/74/748d9a5d20a98213a343c972aa47c462 b/clock/Library/Artifacts/74/748d9a5d20a98213a343c972aa47c462
new file mode 100644
index 00000000..fcfdcf73
Binary files /dev/null and b/clock/Library/Artifacts/74/748d9a5d20a98213a343c972aa47c462 differ
diff --git a/clock/Library/Artifacts/74/7494dd4ae78f8b92d3fa609c5e4e3cbd b/clock/Library/Artifacts/74/7494dd4ae78f8b92d3fa609c5e4e3cbd
new file mode 100644
index 00000000..e12f1dee
Binary files /dev/null and b/clock/Library/Artifacts/74/7494dd4ae78f8b92d3fa609c5e4e3cbd differ
diff --git a/clock/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 b/clock/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5
new file mode 100644
index 00000000..d5836042
Binary files /dev/null and b/clock/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 differ
diff --git a/clock/Library/Artifacts/74/74d9c21a638a34c98e9a633c8e2d47e9 b/clock/Library/Artifacts/74/74d9c21a638a34c98e9a633c8e2d47e9
new file mode 100644
index 00000000..d79dee2e
Binary files /dev/null and b/clock/Library/Artifacts/74/74d9c21a638a34c98e9a633c8e2d47e9 differ
diff --git a/clock/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 b/clock/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099
new file mode 100644
index 00000000..a171986c
Binary files /dev/null and b/clock/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 differ
diff --git a/clock/Library/Artifacts/75/752555272790a054ec380b6570c279c2 b/clock/Library/Artifacts/75/752555272790a054ec380b6570c279c2
new file mode 100644
index 00000000..2801ca4a
Binary files /dev/null and b/clock/Library/Artifacts/75/752555272790a054ec380b6570c279c2 differ
diff --git a/clock/Library/Artifacts/75/756397c01ce4694f4073c838029cd9b4 b/clock/Library/Artifacts/75/756397c01ce4694f4073c838029cd9b4
new file mode 100644
index 00000000..b951db66
Binary files /dev/null and b/clock/Library/Artifacts/75/756397c01ce4694f4073c838029cd9b4 differ
diff --git a/clock/Library/Artifacts/75/757bfa2c443582e19e5ffada62e77d75 b/clock/Library/Artifacts/75/757bfa2c443582e19e5ffada62e77d75
new file mode 100644
index 00000000..c085cdff
Binary files /dev/null and b/clock/Library/Artifacts/75/757bfa2c443582e19e5ffada62e77d75 differ
diff --git a/clock/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 b/clock/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057
new file mode 100644
index 00000000..24b31583
Binary files /dev/null and b/clock/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 differ
diff --git a/clock/Library/Artifacts/75/75cbde4f8e050f7361169f06d4e36209 b/clock/Library/Artifacts/75/75cbde4f8e050f7361169f06d4e36209
new file mode 100644
index 00000000..cafff060
Binary files /dev/null and b/clock/Library/Artifacts/75/75cbde4f8e050f7361169f06d4e36209 differ
diff --git a/clock/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 b/clock/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57
new file mode 100644
index 00000000..3d31682e
Binary files /dev/null and b/clock/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 differ
diff --git a/clock/Library/Artifacts/76/76711dac0005e696c78fed08e16c33b4 b/clock/Library/Artifacts/76/76711dac0005e696c78fed08e16c33b4
new file mode 100644
index 00000000..8192fe01
Binary files /dev/null and b/clock/Library/Artifacts/76/76711dac0005e696c78fed08e16c33b4 differ
diff --git a/clock/Library/Artifacts/76/76a87f6ec616e416e2bf758d9553168e b/clock/Library/Artifacts/76/76a87f6ec616e416e2bf758d9553168e
new file mode 100644
index 00000000..ccc7165b
Binary files /dev/null and b/clock/Library/Artifacts/76/76a87f6ec616e416e2bf758d9553168e differ
diff --git a/clock/Library/Artifacts/76/76a969e8d33daa5ee42b1136dee0110f b/clock/Library/Artifacts/76/76a969e8d33daa5ee42b1136dee0110f
new file mode 100644
index 00000000..12710af9
Binary files /dev/null and b/clock/Library/Artifacts/76/76a969e8d33daa5ee42b1136dee0110f differ
diff --git a/clock/Library/Artifacts/76/76b2f1c6cb6983a27de1393c0c4cb94e b/clock/Library/Artifacts/76/76b2f1c6cb6983a27de1393c0c4cb94e
new file mode 100644
index 00000000..69bec97d
Binary files /dev/null and b/clock/Library/Artifacts/76/76b2f1c6cb6983a27de1393c0c4cb94e differ
diff --git a/clock/Library/Artifacts/76/76be6cf307ff821c647bf6e7b2847774 b/clock/Library/Artifacts/76/76be6cf307ff821c647bf6e7b2847774
new file mode 100644
index 00000000..5d9a186f
Binary files /dev/null and b/clock/Library/Artifacts/76/76be6cf307ff821c647bf6e7b2847774 differ
diff --git a/clock/Library/Artifacts/76/76d49e12590685f0633a2ae1c74b0f52 b/clock/Library/Artifacts/76/76d49e12590685f0633a2ae1c74b0f52
new file mode 100644
index 00000000..46f17962
Binary files /dev/null and b/clock/Library/Artifacts/76/76d49e12590685f0633a2ae1c74b0f52 differ
diff --git a/clock/Library/Artifacts/76/76ef304cbe21f35d7bd9c3a3f060cd56 b/clock/Library/Artifacts/76/76ef304cbe21f35d7bd9c3a3f060cd56
new file mode 100644
index 00000000..66008b16
Binary files /dev/null and b/clock/Library/Artifacts/76/76ef304cbe21f35d7bd9c3a3f060cd56 differ
diff --git a/clock/Library/Artifacts/76/76fc9ab24b28a0cb7b6c423f84a6a83e b/clock/Library/Artifacts/76/76fc9ab24b28a0cb7b6c423f84a6a83e
new file mode 100644
index 00000000..52944257
Binary files /dev/null and b/clock/Library/Artifacts/76/76fc9ab24b28a0cb7b6c423f84a6a83e differ
diff --git a/clock/Library/Artifacts/76/76ffed4f8e671af194ca2c8200afa159 b/clock/Library/Artifacts/76/76ffed4f8e671af194ca2c8200afa159
new file mode 100644
index 00000000..e341bddc
Binary files /dev/null and b/clock/Library/Artifacts/76/76ffed4f8e671af194ca2c8200afa159 differ
diff --git a/clock/Library/Artifacts/77/777aedec704bafe35e4490c6bd0672d1 b/clock/Library/Artifacts/77/777aedec704bafe35e4490c6bd0672d1
new file mode 100644
index 00000000..ff41f795
Binary files /dev/null and b/clock/Library/Artifacts/77/777aedec704bafe35e4490c6bd0672d1 differ
diff --git a/clock/Library/Artifacts/77/778d1f773f75e0efa5180d8a2b1056d9 b/clock/Library/Artifacts/77/778d1f773f75e0efa5180d8a2b1056d9
new file mode 100644
index 00000000..975122e3
Binary files /dev/null and b/clock/Library/Artifacts/77/778d1f773f75e0efa5180d8a2b1056d9 differ
diff --git a/clock/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 b/clock/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7
new file mode 100644
index 00000000..9c532f87
Binary files /dev/null and b/clock/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 differ
diff --git a/clock/Library/Artifacts/78/785c98f6737f1405c792e7db9dadf269 b/clock/Library/Artifacts/78/785c98f6737f1405c792e7db9dadf269
new file mode 100644
index 00000000..356c85b8
Binary files /dev/null and b/clock/Library/Artifacts/78/785c98f6737f1405c792e7db9dadf269 differ
diff --git a/clock/Library/Artifacts/78/7862350a9b0899b0197fd93ddc079999 b/clock/Library/Artifacts/78/7862350a9b0899b0197fd93ddc079999
new file mode 100644
index 00000000..9b262947
Binary files /dev/null and b/clock/Library/Artifacts/78/7862350a9b0899b0197fd93ddc079999 differ
diff --git a/clock/Library/Artifacts/78/788c2e328fca6991733e67798b16214a b/clock/Library/Artifacts/78/788c2e328fca6991733e67798b16214a
new file mode 100644
index 00000000..073df6ea
Binary files /dev/null and b/clock/Library/Artifacts/78/788c2e328fca6991733e67798b16214a differ
diff --git a/clock/Library/Artifacts/78/78a5c952acccf49445241de66763a334 b/clock/Library/Artifacts/78/78a5c952acccf49445241de66763a334
new file mode 100644
index 00000000..d27cab8f
Binary files /dev/null and b/clock/Library/Artifacts/78/78a5c952acccf49445241de66763a334 differ
diff --git a/clock/Library/Artifacts/78/78b2292e487341052f6e4b86a093eb7c b/clock/Library/Artifacts/78/78b2292e487341052f6e4b86a093eb7c
new file mode 100644
index 00000000..6377ea5a
Binary files /dev/null and b/clock/Library/Artifacts/78/78b2292e487341052f6e4b86a093eb7c differ
diff --git a/clock/Library/Artifacts/78/78bd801a965e2310dcf191b3f6f438ce b/clock/Library/Artifacts/78/78bd801a965e2310dcf191b3f6f438ce
new file mode 100644
index 00000000..042b8652
Binary files /dev/null and b/clock/Library/Artifacts/78/78bd801a965e2310dcf191b3f6f438ce differ
diff --git a/clock/Library/Artifacts/78/78ced3357e8cf7e0d6378a07fc449985 b/clock/Library/Artifacts/78/78ced3357e8cf7e0d6378a07fc449985
new file mode 100644
index 00000000..c4557728
Binary files /dev/null and b/clock/Library/Artifacts/78/78ced3357e8cf7e0d6378a07fc449985 differ
diff --git a/clock/Library/Artifacts/78/78f1f5b3abe0b7e54f144bb9fc139172 b/clock/Library/Artifacts/78/78f1f5b3abe0b7e54f144bb9fc139172
new file mode 100644
index 00000000..ffb6db06
Binary files /dev/null and b/clock/Library/Artifacts/78/78f1f5b3abe0b7e54f144bb9fc139172 differ
diff --git a/clock/Library/Artifacts/79/790a622e218a6ef8c8c7e3636f82d71e b/clock/Library/Artifacts/79/790a622e218a6ef8c8c7e3636f82d71e
new file mode 100644
index 00000000..08331a6c
Binary files /dev/null and b/clock/Library/Artifacts/79/790a622e218a6ef8c8c7e3636f82d71e differ
diff --git a/clock/Library/Artifacts/79/790bd43f7965ca0a9d59d49ce51915f2 b/clock/Library/Artifacts/79/790bd43f7965ca0a9d59d49ce51915f2
new file mode 100644
index 00000000..3c359ba9
Binary files /dev/null and b/clock/Library/Artifacts/79/790bd43f7965ca0a9d59d49ce51915f2 differ
diff --git a/clock/Library/Artifacts/79/7915cc370a7bfdd895f4c422d8019778 b/clock/Library/Artifacts/79/7915cc370a7bfdd895f4c422d8019778
new file mode 100644
index 00000000..c4367e0b
Binary files /dev/null and b/clock/Library/Artifacts/79/7915cc370a7bfdd895f4c422d8019778 differ
diff --git a/clock/Library/Artifacts/79/7937afde80445c8fbac076fc5a0654d0 b/clock/Library/Artifacts/79/7937afde80445c8fbac076fc5a0654d0
new file mode 100644
index 00000000..dda60f83
Binary files /dev/null and b/clock/Library/Artifacts/79/7937afde80445c8fbac076fc5a0654d0 differ
diff --git a/clock/Library/Artifacts/79/799f692d332a52406bb2002c4fe9d0ea b/clock/Library/Artifacts/79/799f692d332a52406bb2002c4fe9d0ea
new file mode 100644
index 00000000..df943502
Binary files /dev/null and b/clock/Library/Artifacts/79/799f692d332a52406bb2002c4fe9d0ea differ
diff --git a/clock/Library/Artifacts/79/79c695e0bb6e19becfb330452570592d b/clock/Library/Artifacts/79/79c695e0bb6e19becfb330452570592d
new file mode 100644
index 00000000..f9476a6d
Binary files /dev/null and b/clock/Library/Artifacts/79/79c695e0bb6e19becfb330452570592d differ
diff --git a/clock/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 b/clock/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369
new file mode 100644
index 00000000..7964e9b7
Binary files /dev/null and b/clock/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 differ
diff --git a/clock/Library/Artifacts/7a/7a0d9c38fd948c543470189f13e79876 b/clock/Library/Artifacts/7a/7a0d9c38fd948c543470189f13e79876
new file mode 100644
index 00000000..d16fa2bf
Binary files /dev/null and b/clock/Library/Artifacts/7a/7a0d9c38fd948c543470189f13e79876 differ
diff --git a/clock/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 b/clock/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72
new file mode 100644
index 00000000..a9fbb892
Binary files /dev/null and b/clock/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 differ
diff --git a/clock/Library/Artifacts/7a/7a2254afcd0ad53f57a254bbe5c4760b b/clock/Library/Artifacts/7a/7a2254afcd0ad53f57a254bbe5c4760b
new file mode 100644
index 00000000..603257de
Binary files /dev/null and b/clock/Library/Artifacts/7a/7a2254afcd0ad53f57a254bbe5c4760b differ
diff --git a/clock/Library/Artifacts/7a/7a2514421c7ce487e710f00f2998f9d2 b/clock/Library/Artifacts/7a/7a2514421c7ce487e710f00f2998f9d2
new file mode 100644
index 00000000..be33b49e
Binary files /dev/null and b/clock/Library/Artifacts/7a/7a2514421c7ce487e710f00f2998f9d2 differ
diff --git a/clock/Library/Artifacts/7a/7a2f5a41152fcbd8f6a0581f240cdf7a b/clock/Library/Artifacts/7a/7a2f5a41152fcbd8f6a0581f240cdf7a
new file mode 100644
index 00000000..cd8b2bd6
Binary files /dev/null and b/clock/Library/Artifacts/7a/7a2f5a41152fcbd8f6a0581f240cdf7a differ
diff --git a/clock/Library/Artifacts/7a/7aa23bc501dd203f04e075cd7418cda4 b/clock/Library/Artifacts/7a/7aa23bc501dd203f04e075cd7418cda4
new file mode 100644
index 00000000..1cf7a093
Binary files /dev/null and b/clock/Library/Artifacts/7a/7aa23bc501dd203f04e075cd7418cda4 differ
diff --git a/clock/Library/Artifacts/7a/7ab1d9bea6bd4a0ab5e09550fb13c48e b/clock/Library/Artifacts/7a/7ab1d9bea6bd4a0ab5e09550fb13c48e
new file mode 100644
index 00000000..fb361b67
Binary files /dev/null and b/clock/Library/Artifacts/7a/7ab1d9bea6bd4a0ab5e09550fb13c48e differ
diff --git a/clock/Library/Artifacts/7a/7ad8c86d53a3722385dc8f44ca67d6af b/clock/Library/Artifacts/7a/7ad8c86d53a3722385dc8f44ca67d6af
new file mode 100644
index 00000000..02610b78
Binary files /dev/null and b/clock/Library/Artifacts/7a/7ad8c86d53a3722385dc8f44ca67d6af differ
diff --git a/clock/Library/Artifacts/7a/7afab06bcf38d65f5b45f7afa811c878 b/clock/Library/Artifacts/7a/7afab06bcf38d65f5b45f7afa811c878
new file mode 100644
index 00000000..86c8f53c
Binary files /dev/null and b/clock/Library/Artifacts/7a/7afab06bcf38d65f5b45f7afa811c878 differ
diff --git a/clock/Library/Artifacts/7b/7b0048b548625666c1f281beb76e571b b/clock/Library/Artifacts/7b/7b0048b548625666c1f281beb76e571b
new file mode 100644
index 00000000..93ca7ad5
Binary files /dev/null and b/clock/Library/Artifacts/7b/7b0048b548625666c1f281beb76e571b differ
diff --git a/clock/Library/Artifacts/7b/7b00e2bb82c4d7045962fc0e6f7185ea b/clock/Library/Artifacts/7b/7b00e2bb82c4d7045962fc0e6f7185ea
new file mode 100644
index 00000000..abeeeec5
Binary files /dev/null and b/clock/Library/Artifacts/7b/7b00e2bb82c4d7045962fc0e6f7185ea differ
diff --git a/clock/Library/Artifacts/7b/7b29fcaaaa08cc155f89502d1fcfab3f b/clock/Library/Artifacts/7b/7b29fcaaaa08cc155f89502d1fcfab3f
new file mode 100644
index 00000000..20c8b942
Binary files /dev/null and b/clock/Library/Artifacts/7b/7b29fcaaaa08cc155f89502d1fcfab3f differ
diff --git a/clock/Library/Artifacts/7b/7b95865b281db05aad1aaaa22d1e5fc6 b/clock/Library/Artifacts/7b/7b95865b281db05aad1aaaa22d1e5fc6
new file mode 100644
index 00000000..8282cf69
Binary files /dev/null and b/clock/Library/Artifacts/7b/7b95865b281db05aad1aaaa22d1e5fc6 differ
diff --git a/clock/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 b/clock/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796
new file mode 100644
index 00000000..7ba63e26
Binary files /dev/null and b/clock/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 differ
diff --git a/clock/Library/Artifacts/7c/7c8f4a9671ccf243e05fcc2716164092 b/clock/Library/Artifacts/7c/7c8f4a9671ccf243e05fcc2716164092
new file mode 100644
index 00000000..e8a24224
Binary files /dev/null and b/clock/Library/Artifacts/7c/7c8f4a9671ccf243e05fcc2716164092 differ
diff --git a/clock/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 b/clock/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6
new file mode 100644
index 00000000..bf7b7467
Binary files /dev/null and b/clock/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 differ
diff --git a/clock/Library/Artifacts/7c/7cc42f952f18b0b5792b54b5d4d68ff5 b/clock/Library/Artifacts/7c/7cc42f952f18b0b5792b54b5d4d68ff5
new file mode 100644
index 00000000..be487074
Binary files /dev/null and b/clock/Library/Artifacts/7c/7cc42f952f18b0b5792b54b5d4d68ff5 differ
diff --git a/clock/Library/Artifacts/7c/7cdcc76de87d4a31339ca7288e066b11 b/clock/Library/Artifacts/7c/7cdcc76de87d4a31339ca7288e066b11
new file mode 100644
index 00000000..03c43ae8
Binary files /dev/null and b/clock/Library/Artifacts/7c/7cdcc76de87d4a31339ca7288e066b11 differ
diff --git a/clock/Library/Artifacts/7c/7cf76bd02d975d2736ce668337e102ba b/clock/Library/Artifacts/7c/7cf76bd02d975d2736ce668337e102ba
new file mode 100644
index 00000000..59195b87
Binary files /dev/null and b/clock/Library/Artifacts/7c/7cf76bd02d975d2736ce668337e102ba differ
diff --git a/clock/Library/Artifacts/7d/7d0d60ce57d239e39d31deee939e7db3 b/clock/Library/Artifacts/7d/7d0d60ce57d239e39d31deee939e7db3
new file mode 100644
index 00000000..fb4f0694
Binary files /dev/null and b/clock/Library/Artifacts/7d/7d0d60ce57d239e39d31deee939e7db3 differ
diff --git a/clock/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 b/clock/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9
new file mode 100644
index 00000000..e7ed25e3
Binary files /dev/null and b/clock/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 differ
diff --git a/clock/Library/Artifacts/7d/7d4debe93281cba6593c4e3c332f5ff5 b/clock/Library/Artifacts/7d/7d4debe93281cba6593c4e3c332f5ff5
new file mode 100644
index 00000000..56fb155e
Binary files /dev/null and b/clock/Library/Artifacts/7d/7d4debe93281cba6593c4e3c332f5ff5 differ
diff --git a/clock/Library/Artifacts/7d/7d603dd8de48f60c3a733b4795368d11 b/clock/Library/Artifacts/7d/7d603dd8de48f60c3a733b4795368d11
new file mode 100644
index 00000000..e2a5c98e
Binary files /dev/null and b/clock/Library/Artifacts/7d/7d603dd8de48f60c3a733b4795368d11 differ
diff --git a/clock/Library/Artifacts/7d/7db8f8476683c5a8e155556f5006617f b/clock/Library/Artifacts/7d/7db8f8476683c5a8e155556f5006617f
new file mode 100644
index 00000000..786b6337
Binary files /dev/null and b/clock/Library/Artifacts/7d/7db8f8476683c5a8e155556f5006617f differ
diff --git a/clock/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 b/clock/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74
new file mode 100644
index 00000000..7b06c5d0
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 differ
diff --git a/clock/Library/Artifacts/7e/7e1970ebd17701d8fa385b372cc52ff0 b/clock/Library/Artifacts/7e/7e1970ebd17701d8fa385b372cc52ff0
new file mode 100644
index 00000000..dc14125b
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e1970ebd17701d8fa385b372cc52ff0 differ
diff --git a/clock/Library/Artifacts/7e/7e2ae2bc3d7021e6081c4e20cfbd5c92 b/clock/Library/Artifacts/7e/7e2ae2bc3d7021e6081c4e20cfbd5c92
new file mode 100644
index 00000000..85888882
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e2ae2bc3d7021e6081c4e20cfbd5c92 differ
diff --git a/clock/Library/Artifacts/7e/7e3aef92c96fd24d948abc574a1ec96f b/clock/Library/Artifacts/7e/7e3aef92c96fd24d948abc574a1ec96f
new file mode 100644
index 00000000..d40b74fc
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e3aef92c96fd24d948abc574a1ec96f differ
diff --git a/clock/Library/Artifacts/7e/7e40ff22153fd1475181849bd475cf39 b/clock/Library/Artifacts/7e/7e40ff22153fd1475181849bd475cf39
new file mode 100644
index 00000000..06f84ff0
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e40ff22153fd1475181849bd475cf39 differ
diff --git a/clock/Library/Artifacts/7e/7e605654b516a8183eb17fd9d100f482 b/clock/Library/Artifacts/7e/7e605654b516a8183eb17fd9d100f482
new file mode 100644
index 00000000..9d9b131d
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e605654b516a8183eb17fd9d100f482 differ
diff --git a/clock/Library/Artifacts/7e/7e67b2347cb3bc02231bd06731ffb97b b/clock/Library/Artifacts/7e/7e67b2347cb3bc02231bd06731ffb97b
new file mode 100644
index 00000000..574aad22
Binary files /dev/null and b/clock/Library/Artifacts/7e/7e67b2347cb3bc02231bd06731ffb97b differ
diff --git a/clock/Library/Artifacts/7e/7ea33a85018204c2f62bc117cb57dc62 b/clock/Library/Artifacts/7e/7ea33a85018204c2f62bc117cb57dc62
new file mode 100644
index 00000000..ac212e85
Binary files /dev/null and b/clock/Library/Artifacts/7e/7ea33a85018204c2f62bc117cb57dc62 differ
diff --git a/clock/Library/Artifacts/7e/7ed82b5e448fb2ed8533311193cf20ce b/clock/Library/Artifacts/7e/7ed82b5e448fb2ed8533311193cf20ce
new file mode 100644
index 00000000..62594de4
Binary files /dev/null and b/clock/Library/Artifacts/7e/7ed82b5e448fb2ed8533311193cf20ce differ
diff --git a/clock/Library/Artifacts/7e/7ee4658e446231691ebd9b672682e1fd b/clock/Library/Artifacts/7e/7ee4658e446231691ebd9b672682e1fd
new file mode 100644
index 00000000..a87b4f0b
Binary files /dev/null and b/clock/Library/Artifacts/7e/7ee4658e446231691ebd9b672682e1fd differ
diff --git a/clock/Library/Artifacts/7e/7ef1fa9f16c5bb2901634570c31d78a9 b/clock/Library/Artifacts/7e/7ef1fa9f16c5bb2901634570c31d78a9
new file mode 100644
index 00000000..80eb3153
Binary files /dev/null and b/clock/Library/Artifacts/7e/7ef1fa9f16c5bb2901634570c31d78a9 differ
diff --git a/clock/Library/Artifacts/7f/7f26aa7fe95961a53ba4b8938c7e85ca b/clock/Library/Artifacts/7f/7f26aa7fe95961a53ba4b8938c7e85ca
new file mode 100644
index 00000000..a8ed184a
Binary files /dev/null and b/clock/Library/Artifacts/7f/7f26aa7fe95961a53ba4b8938c7e85ca differ
diff --git a/clock/Library/Artifacts/7f/7f4904b4efeffadcaeebc5f3d6c304a4 b/clock/Library/Artifacts/7f/7f4904b4efeffadcaeebc5f3d6c304a4
new file mode 100644
index 00000000..56f7051f
Binary files /dev/null and b/clock/Library/Artifacts/7f/7f4904b4efeffadcaeebc5f3d6c304a4 differ
diff --git a/clock/Library/Artifacts/7f/7f6112fa885b1b033598d5fcb4fa8388 b/clock/Library/Artifacts/7f/7f6112fa885b1b033598d5fcb4fa8388
new file mode 100644
index 00000000..243dd5fc
Binary files /dev/null and b/clock/Library/Artifacts/7f/7f6112fa885b1b033598d5fcb4fa8388 differ
diff --git a/clock/Library/Artifacts/7f/7f6ecefbc093c6b18667ca4229a51dff b/clock/Library/Artifacts/7f/7f6ecefbc093c6b18667ca4229a51dff
new file mode 100644
index 00000000..0ddc7df6
Binary files /dev/null and b/clock/Library/Artifacts/7f/7f6ecefbc093c6b18667ca4229a51dff differ
diff --git a/clock/Library/Artifacts/7f/7f8f83ea308854c924ce661ca28929aa b/clock/Library/Artifacts/7f/7f8f83ea308854c924ce661ca28929aa
new file mode 100644
index 00000000..84a48ffb
Binary files /dev/null and b/clock/Library/Artifacts/7f/7f8f83ea308854c924ce661ca28929aa differ
diff --git a/clock/Library/Artifacts/7f/7f9f9a327fc06c25167681145f4e95b0 b/clock/Library/Artifacts/7f/7f9f9a327fc06c25167681145f4e95b0
new file mode 100644
index 00000000..15ed65f5
Binary files /dev/null and b/clock/Library/Artifacts/7f/7f9f9a327fc06c25167681145f4e95b0 differ
diff --git a/clock/Library/Artifacts/7f/7fe6702041ad4eb77bc6822232da8c81 b/clock/Library/Artifacts/7f/7fe6702041ad4eb77bc6822232da8c81
new file mode 100644
index 00000000..2770bcf9
Binary files /dev/null and b/clock/Library/Artifacts/7f/7fe6702041ad4eb77bc6822232da8c81 differ
diff --git a/clock/Library/Artifacts/80/8029c08e443edc7a2d49ba78f2a9ff22 b/clock/Library/Artifacts/80/8029c08e443edc7a2d49ba78f2a9ff22
new file mode 100644
index 00000000..ce90ee12
Binary files /dev/null and b/clock/Library/Artifacts/80/8029c08e443edc7a2d49ba78f2a9ff22 differ
diff --git a/clock/Library/Artifacts/80/807964c728d163b42966204bcab0ca69 b/clock/Library/Artifacts/80/807964c728d163b42966204bcab0ca69
new file mode 100644
index 00000000..e1c00b96
Binary files /dev/null and b/clock/Library/Artifacts/80/807964c728d163b42966204bcab0ca69 differ
diff --git a/clock/Library/Artifacts/80/808097c3d9855865df44aad71f55f5b5 b/clock/Library/Artifacts/80/808097c3d9855865df44aad71f55f5b5
new file mode 100644
index 00000000..ea865642
Binary files /dev/null and b/clock/Library/Artifacts/80/808097c3d9855865df44aad71f55f5b5 differ
diff --git a/clock/Library/Artifacts/80/80c29dc1dea3741586f3bf1d152425e1 b/clock/Library/Artifacts/80/80c29dc1dea3741586f3bf1d152425e1
new file mode 100644
index 00000000..517ec762
Binary files /dev/null and b/clock/Library/Artifacts/80/80c29dc1dea3741586f3bf1d152425e1 differ
diff --git a/clock/Library/Artifacts/80/80d57d55be484729a3b75b08ef721d85 b/clock/Library/Artifacts/80/80d57d55be484729a3b75b08ef721d85
new file mode 100644
index 00000000..d5dd702e
Binary files /dev/null and b/clock/Library/Artifacts/80/80d57d55be484729a3b75b08ef721d85 differ
diff --git a/clock/Library/Artifacts/81/815086ddb30aeccf549df9dd588ed2ce b/clock/Library/Artifacts/81/815086ddb30aeccf549df9dd588ed2ce
new file mode 100644
index 00000000..dd414616
Binary files /dev/null and b/clock/Library/Artifacts/81/815086ddb30aeccf549df9dd588ed2ce differ
diff --git a/clock/Library/Artifacts/81/8195a05dbcbdd84a49281490db17784b b/clock/Library/Artifacts/81/8195a05dbcbdd84a49281490db17784b
new file mode 100644
index 00000000..17046bcb
Binary files /dev/null and b/clock/Library/Artifacts/81/8195a05dbcbdd84a49281490db17784b differ
diff --git a/clock/Library/Artifacts/82/8209746c6d8a8ce96332109e24063cdb b/clock/Library/Artifacts/82/8209746c6d8a8ce96332109e24063cdb
new file mode 100644
index 00000000..d2c3e982
Binary files /dev/null and b/clock/Library/Artifacts/82/8209746c6d8a8ce96332109e24063cdb differ
diff --git a/clock/Library/Artifacts/82/821264e963d2d3aa512bfc57d97b6189 b/clock/Library/Artifacts/82/821264e963d2d3aa512bfc57d97b6189
new file mode 100644
index 00000000..a67dee59
Binary files /dev/null and b/clock/Library/Artifacts/82/821264e963d2d3aa512bfc57d97b6189 differ
diff --git a/clock/Library/Artifacts/82/8236d80f4ac0a425a53356bae4272b94 b/clock/Library/Artifacts/82/8236d80f4ac0a425a53356bae4272b94
new file mode 100644
index 00000000..892bd965
Binary files /dev/null and b/clock/Library/Artifacts/82/8236d80f4ac0a425a53356bae4272b94 differ
diff --git a/clock/Library/Artifacts/82/8250c4d8b94741a02d8baa843dfd2d95 b/clock/Library/Artifacts/82/8250c4d8b94741a02d8baa843dfd2d95
new file mode 100644
index 00000000..378b9c30
Binary files /dev/null and b/clock/Library/Artifacts/82/8250c4d8b94741a02d8baa843dfd2d95 differ
diff --git a/clock/Library/Artifacts/82/82563ec4d51d5a9e913e52419fad4f32 b/clock/Library/Artifacts/82/82563ec4d51d5a9e913e52419fad4f32
new file mode 100644
index 00000000..4b881005
Binary files /dev/null and b/clock/Library/Artifacts/82/82563ec4d51d5a9e913e52419fad4f32 differ
diff --git a/clock/Library/Artifacts/82/82641833657a0946bab7040027eb210c b/clock/Library/Artifacts/82/82641833657a0946bab7040027eb210c
new file mode 100644
index 00000000..28bf09ca
Binary files /dev/null and b/clock/Library/Artifacts/82/82641833657a0946bab7040027eb210c differ
diff --git a/clock/Library/Artifacts/82/826f933060fc58333bd19621634d9298 b/clock/Library/Artifacts/82/826f933060fc58333bd19621634d9298
new file mode 100644
index 00000000..ce07ef94
Binary files /dev/null and b/clock/Library/Artifacts/82/826f933060fc58333bd19621634d9298 differ
diff --git a/clock/Library/Artifacts/82/828bfe088cf46c450b7cad194d024e82 b/clock/Library/Artifacts/82/828bfe088cf46c450b7cad194d024e82
new file mode 100644
index 00000000..9be4743a
Binary files /dev/null and b/clock/Library/Artifacts/82/828bfe088cf46c450b7cad194d024e82 differ
diff --git a/clock/Library/Artifacts/82/82bd59fce4f3136ca1a27e29c09867bb b/clock/Library/Artifacts/82/82bd59fce4f3136ca1a27e29c09867bb
new file mode 100644
index 00000000..288b1966
Binary files /dev/null and b/clock/Library/Artifacts/82/82bd59fce4f3136ca1a27e29c09867bb differ
diff --git a/clock/Library/Artifacts/82/82e51fde5bda9062463056b6b2f57a2d b/clock/Library/Artifacts/82/82e51fde5bda9062463056b6b2f57a2d
new file mode 100644
index 00000000..2bb5920a
Binary files /dev/null and b/clock/Library/Artifacts/82/82e51fde5bda9062463056b6b2f57a2d differ
diff --git a/clock/Library/Artifacts/83/83005e9838e18b2f7bf551fa3c4dbaf1 b/clock/Library/Artifacts/83/83005e9838e18b2f7bf551fa3c4dbaf1
new file mode 100644
index 00000000..397eab7d
Binary files /dev/null and b/clock/Library/Artifacts/83/83005e9838e18b2f7bf551fa3c4dbaf1 differ
diff --git a/clock/Library/Artifacts/83/83634820c59d20ca36bb768a885d08f3 b/clock/Library/Artifacts/83/83634820c59d20ca36bb768a885d08f3
new file mode 100644
index 00000000..1c84a364
Binary files /dev/null and b/clock/Library/Artifacts/83/83634820c59d20ca36bb768a885d08f3 differ
diff --git a/clock/Library/Artifacts/83/836a6e98397ff471618a436f85cd1bfc b/clock/Library/Artifacts/83/836a6e98397ff471618a436f85cd1bfc
new file mode 100644
index 00000000..ba777dfd
Binary files /dev/null and b/clock/Library/Artifacts/83/836a6e98397ff471618a436f85cd1bfc differ
diff --git a/clock/Library/Artifacts/83/8385d8badda2b07f899765098f9eb5b9 b/clock/Library/Artifacts/83/8385d8badda2b07f899765098f9eb5b9
new file mode 100644
index 00000000..cf7086ed
Binary files /dev/null and b/clock/Library/Artifacts/83/8385d8badda2b07f899765098f9eb5b9 differ
diff --git a/clock/Library/Artifacts/83/839a548905ff8a31f8b74dc650d3dad0 b/clock/Library/Artifacts/83/839a548905ff8a31f8b74dc650d3dad0
new file mode 100644
index 00000000..edf04e97
Binary files /dev/null and b/clock/Library/Artifacts/83/839a548905ff8a31f8b74dc650d3dad0 differ
diff --git a/clock/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa b/clock/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa
new file mode 100644
index 00000000..6c7e4f90
Binary files /dev/null and b/clock/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa differ
diff --git a/clock/Library/Artifacts/83/83abb6e7f472848620aef1c786634fe0 b/clock/Library/Artifacts/83/83abb6e7f472848620aef1c786634fe0
new file mode 100644
index 00000000..5f3c08fb
Binary files /dev/null and b/clock/Library/Artifacts/83/83abb6e7f472848620aef1c786634fe0 differ
diff --git a/clock/Library/Artifacts/83/83bbc111553425d29e938509690e8ac9 b/clock/Library/Artifacts/83/83bbc111553425d29e938509690e8ac9
new file mode 100644
index 00000000..a9971534
Binary files /dev/null and b/clock/Library/Artifacts/83/83bbc111553425d29e938509690e8ac9 differ
diff --git a/clock/Library/Artifacts/83/83bc10f7a0265d16b096c88c12b425d9 b/clock/Library/Artifacts/83/83bc10f7a0265d16b096c88c12b425d9
new file mode 100644
index 00000000..a55db6f6
Binary files /dev/null and b/clock/Library/Artifacts/83/83bc10f7a0265d16b096c88c12b425d9 differ
diff --git a/clock/Library/Artifacts/83/83cdbfeb57dd6b7703fde4fab4b221ec b/clock/Library/Artifacts/83/83cdbfeb57dd6b7703fde4fab4b221ec
new file mode 100644
index 00000000..2e2ab106
Binary files /dev/null and b/clock/Library/Artifacts/83/83cdbfeb57dd6b7703fde4fab4b221ec differ
diff --git a/clock/Library/Artifacts/83/83f0fb0bab37bbc4454e7e8e1ada9d8d b/clock/Library/Artifacts/83/83f0fb0bab37bbc4454e7e8e1ada9d8d
new file mode 100644
index 00000000..960f4ee5
Binary files /dev/null and b/clock/Library/Artifacts/83/83f0fb0bab37bbc4454e7e8e1ada9d8d differ
diff --git a/clock/Library/Artifacts/84/842c1383e21a4e71cc4945aa09bd1f38 b/clock/Library/Artifacts/84/842c1383e21a4e71cc4945aa09bd1f38
new file mode 100644
index 00000000..3d403b0f
Binary files /dev/null and b/clock/Library/Artifacts/84/842c1383e21a4e71cc4945aa09bd1f38 differ
diff --git a/clock/Library/Artifacts/84/8441196ef222177c647391d3de5c23ab b/clock/Library/Artifacts/84/8441196ef222177c647391d3de5c23ab
new file mode 100644
index 00000000..8e7ca16d
Binary files /dev/null and b/clock/Library/Artifacts/84/8441196ef222177c647391d3de5c23ab differ
diff --git a/clock/Library/Artifacts/84/846dbdd5457c549420e6bc689a89bbe2 b/clock/Library/Artifacts/84/846dbdd5457c549420e6bc689a89bbe2
new file mode 100644
index 00000000..0e0758d9
Binary files /dev/null and b/clock/Library/Artifacts/84/846dbdd5457c549420e6bc689a89bbe2 differ
diff --git a/clock/Library/Artifacts/84/84b095bef4b01a03eac88879444aaf97 b/clock/Library/Artifacts/84/84b095bef4b01a03eac88879444aaf97
new file mode 100644
index 00000000..82e61619
Binary files /dev/null and b/clock/Library/Artifacts/84/84b095bef4b01a03eac88879444aaf97 differ
diff --git a/clock/Library/Artifacts/84/84d361c3649b5f0a7c301d7e0ea5d3dc b/clock/Library/Artifacts/84/84d361c3649b5f0a7c301d7e0ea5d3dc
new file mode 100644
index 00000000..488a8737
Binary files /dev/null and b/clock/Library/Artifacts/84/84d361c3649b5f0a7c301d7e0ea5d3dc differ
diff --git a/clock/Library/Artifacts/84/84e74dc0c2f394404673d2022ae62c7e b/clock/Library/Artifacts/84/84e74dc0c2f394404673d2022ae62c7e
new file mode 100644
index 00000000..a24f98f7
Binary files /dev/null and b/clock/Library/Artifacts/84/84e74dc0c2f394404673d2022ae62c7e differ
diff --git a/clock/Library/Artifacts/85/856930670378f98c50919302c2969495 b/clock/Library/Artifacts/85/856930670378f98c50919302c2969495
new file mode 100644
index 00000000..788a74d8
Binary files /dev/null and b/clock/Library/Artifacts/85/856930670378f98c50919302c2969495 differ
diff --git a/clock/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 b/clock/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33
new file mode 100644
index 00000000..2b6b177b
Binary files /dev/null and b/clock/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 differ
diff --git a/clock/Library/Artifacts/85/85d28e6ab3d417ba22fb14a6e49dd779 b/clock/Library/Artifacts/85/85d28e6ab3d417ba22fb14a6e49dd779
new file mode 100644
index 00000000..78e2d3ef
Binary files /dev/null and b/clock/Library/Artifacts/85/85d28e6ab3d417ba22fb14a6e49dd779 differ
diff --git a/clock/Library/Artifacts/86/8605de2043d8d27cd90a3543530e7933 b/clock/Library/Artifacts/86/8605de2043d8d27cd90a3543530e7933
new file mode 100644
index 00000000..ac5a3c16
Binary files /dev/null and b/clock/Library/Artifacts/86/8605de2043d8d27cd90a3543530e7933 differ
diff --git a/clock/Library/Artifacts/86/86328839b08dae07c52ad42b06dbdcdc b/clock/Library/Artifacts/86/86328839b08dae07c52ad42b06dbdcdc
new file mode 100644
index 00000000..10d65982
Binary files /dev/null and b/clock/Library/Artifacts/86/86328839b08dae07c52ad42b06dbdcdc differ
diff --git a/clock/Library/Artifacts/86/863d94ba9eea1b3589c41961f086dd89 b/clock/Library/Artifacts/86/863d94ba9eea1b3589c41961f086dd89
new file mode 100644
index 00000000..8047a1f0
Binary files /dev/null and b/clock/Library/Artifacts/86/863d94ba9eea1b3589c41961f086dd89 differ
diff --git a/clock/Library/Artifacts/86/8657f225634608615bab32beca61b54a b/clock/Library/Artifacts/86/8657f225634608615bab32beca61b54a
new file mode 100644
index 00000000..42bb6e03
Binary files /dev/null and b/clock/Library/Artifacts/86/8657f225634608615bab32beca61b54a differ
diff --git a/clock/Library/Artifacts/86/86e126d96cbbd909f2655fc475381866 b/clock/Library/Artifacts/86/86e126d96cbbd909f2655fc475381866
new file mode 100644
index 00000000..1138a37b
Binary files /dev/null and b/clock/Library/Artifacts/86/86e126d96cbbd909f2655fc475381866 differ
diff --git a/clock/Library/Artifacts/87/874f466dc63f12955402e50ccce04f6e b/clock/Library/Artifacts/87/874f466dc63f12955402e50ccce04f6e
new file mode 100644
index 00000000..9d645e78
Binary files /dev/null and b/clock/Library/Artifacts/87/874f466dc63f12955402e50ccce04f6e differ
diff --git a/clock/Library/Artifacts/87/875f1767a78d900265da31231f4a62d8 b/clock/Library/Artifacts/87/875f1767a78d900265da31231f4a62d8
new file mode 100644
index 00000000..fb283465
Binary files /dev/null and b/clock/Library/Artifacts/87/875f1767a78d900265da31231f4a62d8 differ
diff --git a/clock/Library/Artifacts/87/877454ac84423765c33ae94ef7fd9606 b/clock/Library/Artifacts/87/877454ac84423765c33ae94ef7fd9606
new file mode 100644
index 00000000..250298d6
Binary files /dev/null and b/clock/Library/Artifacts/87/877454ac84423765c33ae94ef7fd9606 differ
diff --git a/clock/Library/Artifacts/87/87a05e0df32663acbe27a16b7c974b26 b/clock/Library/Artifacts/87/87a05e0df32663acbe27a16b7c974b26
new file mode 100644
index 00000000..2a95a960
Binary files /dev/null and b/clock/Library/Artifacts/87/87a05e0df32663acbe27a16b7c974b26 differ
diff --git a/clock/Library/Artifacts/87/87ff259526b0dbae836052faa7d8ced1 b/clock/Library/Artifacts/87/87ff259526b0dbae836052faa7d8ced1
new file mode 100644
index 00000000..ce6e0c72
Binary files /dev/null and b/clock/Library/Artifacts/87/87ff259526b0dbae836052faa7d8ced1 differ
diff --git a/clock/Library/Artifacts/88/8804a9309143f871c8df80d29f6445d9 b/clock/Library/Artifacts/88/8804a9309143f871c8df80d29f6445d9
new file mode 100644
index 00000000..00dc66d2
Binary files /dev/null and b/clock/Library/Artifacts/88/8804a9309143f871c8df80d29f6445d9 differ
diff --git a/clock/Library/Artifacts/88/8830366a1c77f56a3ed0b8959081ee1a b/clock/Library/Artifacts/88/8830366a1c77f56a3ed0b8959081ee1a
new file mode 100644
index 00000000..15ac337a
Binary files /dev/null and b/clock/Library/Artifacts/88/8830366a1c77f56a3ed0b8959081ee1a differ
diff --git a/clock/Library/Artifacts/88/883c7c861e63acb20d0a2eab22fbe989 b/clock/Library/Artifacts/88/883c7c861e63acb20d0a2eab22fbe989
new file mode 100644
index 00000000..5ce8ce0e
Binary files /dev/null and b/clock/Library/Artifacts/88/883c7c861e63acb20d0a2eab22fbe989 differ
diff --git a/clock/Library/Artifacts/88/8861c1ba28838eeb8a79ca2f37582007 b/clock/Library/Artifacts/88/8861c1ba28838eeb8a79ca2f37582007
new file mode 100644
index 00000000..80d6984a
Binary files /dev/null and b/clock/Library/Artifacts/88/8861c1ba28838eeb8a79ca2f37582007 differ
diff --git a/clock/Library/Artifacts/88/8869b4162ab4fea4faf08d4513ba8775 b/clock/Library/Artifacts/88/8869b4162ab4fea4faf08d4513ba8775
new file mode 100644
index 00000000..75ab2406
Binary files /dev/null and b/clock/Library/Artifacts/88/8869b4162ab4fea4faf08d4513ba8775 differ
diff --git a/clock/Library/Artifacts/88/88792597092b93812b9989908ca88239 b/clock/Library/Artifacts/88/88792597092b93812b9989908ca88239
new file mode 100644
index 00000000..33ebe80d
Binary files /dev/null and b/clock/Library/Artifacts/88/88792597092b93812b9989908ca88239 differ
diff --git a/clock/Library/Artifacts/88/88adcb8fed86831c0288bbfad8285581 b/clock/Library/Artifacts/88/88adcb8fed86831c0288bbfad8285581
new file mode 100644
index 00000000..f6cdb24f
Binary files /dev/null and b/clock/Library/Artifacts/88/88adcb8fed86831c0288bbfad8285581 differ
diff --git a/clock/Library/Artifacts/89/89201c94bfc84f48ca5e094599325530 b/clock/Library/Artifacts/89/89201c94bfc84f48ca5e094599325530
new file mode 100644
index 00000000..444273ab
Binary files /dev/null and b/clock/Library/Artifacts/89/89201c94bfc84f48ca5e094599325530 differ
diff --git a/clock/Library/Artifacts/89/89479e399a8dc5926776dbebb8f0adbc b/clock/Library/Artifacts/89/89479e399a8dc5926776dbebb8f0adbc
new file mode 100644
index 00000000..e8dc2d0a
Binary files /dev/null and b/clock/Library/Artifacts/89/89479e399a8dc5926776dbebb8f0adbc differ
diff --git a/clock/Library/Artifacts/89/89546dce869c342c6bf47d6d31b51271 b/clock/Library/Artifacts/89/89546dce869c342c6bf47d6d31b51271
new file mode 100644
index 00000000..26043745
Binary files /dev/null and b/clock/Library/Artifacts/89/89546dce869c342c6bf47d6d31b51271 differ
diff --git a/clock/Library/Artifacts/89/8989d5303df383daba00c6f47a633766 b/clock/Library/Artifacts/89/8989d5303df383daba00c6f47a633766
new file mode 100644
index 00000000..9afab3da
Binary files /dev/null and b/clock/Library/Artifacts/89/8989d5303df383daba00c6f47a633766 differ
diff --git a/clock/Library/Artifacts/89/89afc434c7e183ed39a4b9324c1258cd b/clock/Library/Artifacts/89/89afc434c7e183ed39a4b9324c1258cd
new file mode 100644
index 00000000..f32690c3
Binary files /dev/null and b/clock/Library/Artifacts/89/89afc434c7e183ed39a4b9324c1258cd differ
diff --git a/clock/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 b/clock/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044
new file mode 100644
index 00000000..683542a9
Binary files /dev/null and b/clock/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 differ
diff --git a/clock/Library/Artifacts/8a/8a52d9d8734d6ed684606bb59e49f010 b/clock/Library/Artifacts/8a/8a52d9d8734d6ed684606bb59e49f010
new file mode 100644
index 00000000..47998f3d
Binary files /dev/null and b/clock/Library/Artifacts/8a/8a52d9d8734d6ed684606bb59e49f010 differ
diff --git a/clock/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 b/clock/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1
new file mode 100644
index 00000000..6cc8d16e
Binary files /dev/null and b/clock/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 differ
diff --git a/clock/Library/Artifacts/8a/8a9ab5d7d0db4bd55a400eca0e95da81 b/clock/Library/Artifacts/8a/8a9ab5d7d0db4bd55a400eca0e95da81
new file mode 100644
index 00000000..57a90c6f
Binary files /dev/null and b/clock/Library/Artifacts/8a/8a9ab5d7d0db4bd55a400eca0e95da81 differ
diff --git a/clock/Library/Artifacts/8a/8ab8290436a50538ce89b0b5102969cf b/clock/Library/Artifacts/8a/8ab8290436a50538ce89b0b5102969cf
new file mode 100644
index 00000000..c599d169
Binary files /dev/null and b/clock/Library/Artifacts/8a/8ab8290436a50538ce89b0b5102969cf differ
diff --git a/clock/Library/Artifacts/8b/8b453e655db8d20513a9250c142f8b9e b/clock/Library/Artifacts/8b/8b453e655db8d20513a9250c142f8b9e
new file mode 100644
index 00000000..32f065f5
Binary files /dev/null and b/clock/Library/Artifacts/8b/8b453e655db8d20513a9250c142f8b9e differ
diff --git a/clock/Library/Artifacts/8b/8b4b94909da6ea7719bf7842df68f25d b/clock/Library/Artifacts/8b/8b4b94909da6ea7719bf7842df68f25d
new file mode 100644
index 00000000..db26257b
Binary files /dev/null and b/clock/Library/Artifacts/8b/8b4b94909da6ea7719bf7842df68f25d differ
diff --git a/clock/Library/Artifacts/8b/8bfcbe2524b8f7242160ef5c0f52109a b/clock/Library/Artifacts/8b/8bfcbe2524b8f7242160ef5c0f52109a
new file mode 100644
index 00000000..28a5f032
Binary files /dev/null and b/clock/Library/Artifacts/8b/8bfcbe2524b8f7242160ef5c0f52109a differ
diff --git a/clock/Library/Artifacts/8c/8c13dea8cfe0613a3d586d83eee109aa b/clock/Library/Artifacts/8c/8c13dea8cfe0613a3d586d83eee109aa
new file mode 100644
index 00000000..6b29ba31
Binary files /dev/null and b/clock/Library/Artifacts/8c/8c13dea8cfe0613a3d586d83eee109aa differ
diff --git a/clock/Library/Artifacts/8c/8c483d9e1be5112671cc1294359232d7 b/clock/Library/Artifacts/8c/8c483d9e1be5112671cc1294359232d7
new file mode 100644
index 00000000..089b5296
Binary files /dev/null and b/clock/Library/Artifacts/8c/8c483d9e1be5112671cc1294359232d7 differ
diff --git a/clock/Library/Artifacts/8c/8c57bbb27c2484910d4ce56eaa41fb1e b/clock/Library/Artifacts/8c/8c57bbb27c2484910d4ce56eaa41fb1e
new file mode 100644
index 00000000..6a211ae9
Binary files /dev/null and b/clock/Library/Artifacts/8c/8c57bbb27c2484910d4ce56eaa41fb1e differ
diff --git a/clock/Library/Artifacts/8c/8c9bbaf146fe41a53969c979c62a0dd8 b/clock/Library/Artifacts/8c/8c9bbaf146fe41a53969c979c62a0dd8
new file mode 100644
index 00000000..e0682912
Binary files /dev/null and b/clock/Library/Artifacts/8c/8c9bbaf146fe41a53969c979c62a0dd8 differ
diff --git a/clock/Library/Artifacts/8c/8cb1cd3622cd11fc1c77162469b5cf5f b/clock/Library/Artifacts/8c/8cb1cd3622cd11fc1c77162469b5cf5f
new file mode 100644
index 00000000..1467273e
Binary files /dev/null and b/clock/Library/Artifacts/8c/8cb1cd3622cd11fc1c77162469b5cf5f differ
diff --git a/clock/Library/Artifacts/8c/8cb2c58421b9b1483f4ba367828b8449 b/clock/Library/Artifacts/8c/8cb2c58421b9b1483f4ba367828b8449
new file mode 100644
index 00000000..b4b76492
Binary files /dev/null and b/clock/Library/Artifacts/8c/8cb2c58421b9b1483f4ba367828b8449 differ
diff --git a/clock/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e b/clock/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e
new file mode 100644
index 00000000..9f9f91cf
Binary files /dev/null and b/clock/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e differ
diff --git a/clock/Library/Artifacts/8d/8d31266edf3b3091803b295e4e826709 b/clock/Library/Artifacts/8d/8d31266edf3b3091803b295e4e826709
new file mode 100644
index 00000000..fb150dcf
Binary files /dev/null and b/clock/Library/Artifacts/8d/8d31266edf3b3091803b295e4e826709 differ
diff --git a/clock/Library/Artifacts/8d/8d5d64adb8bf47715e5010dc69fb37c2 b/clock/Library/Artifacts/8d/8d5d64adb8bf47715e5010dc69fb37c2
new file mode 100644
index 00000000..123b01d5
Binary files /dev/null and b/clock/Library/Artifacts/8d/8d5d64adb8bf47715e5010dc69fb37c2 differ
diff --git a/clock/Library/Artifacts/8d/8d92a57e371f4aabc58a9c5e5a7934cb b/clock/Library/Artifacts/8d/8d92a57e371f4aabc58a9c5e5a7934cb
new file mode 100644
index 00000000..b9c71350
Binary files /dev/null and b/clock/Library/Artifacts/8d/8d92a57e371f4aabc58a9c5e5a7934cb differ
diff --git a/clock/Library/Artifacts/8d/8db2a425c4a18d272d95a37d7de466f8 b/clock/Library/Artifacts/8d/8db2a425c4a18d272d95a37d7de466f8
new file mode 100644
index 00000000..e22b7374
Binary files /dev/null and b/clock/Library/Artifacts/8d/8db2a425c4a18d272d95a37d7de466f8 differ
diff --git a/clock/Library/Artifacts/8e/8e2936a5c0b47fd8e65dfdd3b411db47 b/clock/Library/Artifacts/8e/8e2936a5c0b47fd8e65dfdd3b411db47
new file mode 100644
index 00000000..bd558705
Binary files /dev/null and b/clock/Library/Artifacts/8e/8e2936a5c0b47fd8e65dfdd3b411db47 differ
diff --git a/clock/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c b/clock/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c
new file mode 100644
index 00000000..8b3a729e
Binary files /dev/null and b/clock/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c differ
diff --git a/clock/Library/Artifacts/8e/8ea9040eea32abd9f7d2798abbe196ef b/clock/Library/Artifacts/8e/8ea9040eea32abd9f7d2798abbe196ef
new file mode 100644
index 00000000..934259d9
Binary files /dev/null and b/clock/Library/Artifacts/8e/8ea9040eea32abd9f7d2798abbe196ef differ
diff --git a/clock/Library/Artifacts/8e/8eaeee4ff94b0c6630bc8ea31cb1506e b/clock/Library/Artifacts/8e/8eaeee4ff94b0c6630bc8ea31cb1506e
new file mode 100644
index 00000000..1be47290
Binary files /dev/null and b/clock/Library/Artifacts/8e/8eaeee4ff94b0c6630bc8ea31cb1506e differ
diff --git a/clock/Library/Artifacts/8e/8ed049a13d5e96edec8ec6426293be51 b/clock/Library/Artifacts/8e/8ed049a13d5e96edec8ec6426293be51
new file mode 100644
index 00000000..8495e565
Binary files /dev/null and b/clock/Library/Artifacts/8e/8ed049a13d5e96edec8ec6426293be51 differ
diff --git a/clock/Library/Artifacts/8e/8ed4d07861749717781610120f183919 b/clock/Library/Artifacts/8e/8ed4d07861749717781610120f183919
new file mode 100644
index 00000000..3f413fc1
Binary files /dev/null and b/clock/Library/Artifacts/8e/8ed4d07861749717781610120f183919 differ
diff --git a/clock/Library/Artifacts/8f/8f06c3edb622429431900dd3e4c45992 b/clock/Library/Artifacts/8f/8f06c3edb622429431900dd3e4c45992
new file mode 100644
index 00000000..6dd926ab
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f06c3edb622429431900dd3e4c45992 differ
diff --git a/clock/Library/Artifacts/8f/8f1162c1c69698fa967d44c71abc1613 b/clock/Library/Artifacts/8f/8f1162c1c69698fa967d44c71abc1613
new file mode 100644
index 00000000..3346ae3b
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f1162c1c69698fa967d44c71abc1613 differ
diff --git a/clock/Library/Artifacts/8f/8f6ec7e4d83c4826e65b9d2eb6a2f179 b/clock/Library/Artifacts/8f/8f6ec7e4d83c4826e65b9d2eb6a2f179
new file mode 100644
index 00000000..57ea39b8
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f6ec7e4d83c4826e65b9d2eb6a2f179 differ
diff --git a/clock/Library/Artifacts/8f/8f6f2c40b96cd409337b00634fdd4c91 b/clock/Library/Artifacts/8f/8f6f2c40b96cd409337b00634fdd4c91
new file mode 100644
index 00000000..4c3b7d4b
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f6f2c40b96cd409337b00634fdd4c91 differ
diff --git a/clock/Library/Artifacts/8f/8f7a0e25ec7f9e7234485899c0f70a26 b/clock/Library/Artifacts/8f/8f7a0e25ec7f9e7234485899c0f70a26
new file mode 100644
index 00000000..0e0a3590
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f7a0e25ec7f9e7234485899c0f70a26 differ
diff --git a/clock/Library/Artifacts/8f/8f85d9a539bd1fe805c2914e2658a3cb b/clock/Library/Artifacts/8f/8f85d9a539bd1fe805c2914e2658a3cb
new file mode 100644
index 00000000..2eded967
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f85d9a539bd1fe805c2914e2658a3cb differ
diff --git a/clock/Library/Artifacts/8f/8f89d31e8f1dcb3addb7bf798cebe6d1 b/clock/Library/Artifacts/8f/8f89d31e8f1dcb3addb7bf798cebe6d1
new file mode 100644
index 00000000..9d3e49f6
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f89d31e8f1dcb3addb7bf798cebe6d1 differ
diff --git a/clock/Library/Artifacts/8f/8f9be8cf3253d3f9da81a740ddd84440 b/clock/Library/Artifacts/8f/8f9be8cf3253d3f9da81a740ddd84440
new file mode 100644
index 00000000..81f76e64
Binary files /dev/null and b/clock/Library/Artifacts/8f/8f9be8cf3253d3f9da81a740ddd84440 differ
diff --git a/clock/Library/Artifacts/8f/8fdc8ca03445101ef72447a0e0b5ba99 b/clock/Library/Artifacts/8f/8fdc8ca03445101ef72447a0e0b5ba99
new file mode 100644
index 00000000..65051cff
Binary files /dev/null and b/clock/Library/Artifacts/8f/8fdc8ca03445101ef72447a0e0b5ba99 differ
diff --git a/clock/Library/Artifacts/90/9001c19e8d74561bc174cf10aa13244c b/clock/Library/Artifacts/90/9001c19e8d74561bc174cf10aa13244c
new file mode 100644
index 00000000..53ca9a04
Binary files /dev/null and b/clock/Library/Artifacts/90/9001c19e8d74561bc174cf10aa13244c differ
diff --git a/clock/Library/Artifacts/90/902096c4dc1bd184818acfc8acbfb506 b/clock/Library/Artifacts/90/902096c4dc1bd184818acfc8acbfb506
new file mode 100644
index 00000000..30b1ac3a
Binary files /dev/null and b/clock/Library/Artifacts/90/902096c4dc1bd184818acfc8acbfb506 differ
diff --git a/clock/Library/Artifacts/90/90a801c8156efe8e4b2edd94420cb329 b/clock/Library/Artifacts/90/90a801c8156efe8e4b2edd94420cb329
new file mode 100644
index 00000000..adfb5358
Binary files /dev/null and b/clock/Library/Artifacts/90/90a801c8156efe8e4b2edd94420cb329 differ
diff --git a/clock/Library/Artifacts/90/90b2d2be8f32f23cade45d09698dc26f b/clock/Library/Artifacts/90/90b2d2be8f32f23cade45d09698dc26f
new file mode 100644
index 00000000..47f6d973
Binary files /dev/null and b/clock/Library/Artifacts/90/90b2d2be8f32f23cade45d09698dc26f differ
diff --git a/clock/Library/Artifacts/90/90e006669add24ca9754f951ccfc1327 b/clock/Library/Artifacts/90/90e006669add24ca9754f951ccfc1327
new file mode 100644
index 00000000..96f2ae9e
Binary files /dev/null and b/clock/Library/Artifacts/90/90e006669add24ca9754f951ccfc1327 differ
diff --git a/clock/Library/Artifacts/91/913eeca43e489be53e592ccd271097ee b/clock/Library/Artifacts/91/913eeca43e489be53e592ccd271097ee
new file mode 100644
index 00000000..dc946d23
Binary files /dev/null and b/clock/Library/Artifacts/91/913eeca43e489be53e592ccd271097ee differ
diff --git a/clock/Library/Artifacts/91/91443406745013cbe62f6c0ed3e29708 b/clock/Library/Artifacts/91/91443406745013cbe62f6c0ed3e29708
new file mode 100644
index 00000000..67c884ff
Binary files /dev/null and b/clock/Library/Artifacts/91/91443406745013cbe62f6c0ed3e29708 differ
diff --git a/clock/Library/Artifacts/91/9168a9e44a314106513ada4324fc3049 b/clock/Library/Artifacts/91/9168a9e44a314106513ada4324fc3049
new file mode 100644
index 00000000..9f0e3495
Binary files /dev/null and b/clock/Library/Artifacts/91/9168a9e44a314106513ada4324fc3049 differ
diff --git a/clock/Library/Artifacts/91/91b11d978901a14647da447d317db997 b/clock/Library/Artifacts/91/91b11d978901a14647da447d317db997
new file mode 100644
index 00000000..4966aa05
Binary files /dev/null and b/clock/Library/Artifacts/91/91b11d978901a14647da447d317db997 differ
diff --git a/clock/Library/Artifacts/91/91d75771f66957780a5e05521b3ba7fc b/clock/Library/Artifacts/91/91d75771f66957780a5e05521b3ba7fc
new file mode 100644
index 00000000..bfad9291
Binary files /dev/null and b/clock/Library/Artifacts/91/91d75771f66957780a5e05521b3ba7fc differ
diff --git a/clock/Library/Artifacts/91/91de3edf361190c37b27bca9a56d6e99 b/clock/Library/Artifacts/91/91de3edf361190c37b27bca9a56d6e99
new file mode 100644
index 00000000..75ba6938
Binary files /dev/null and b/clock/Library/Artifacts/91/91de3edf361190c37b27bca9a56d6e99 differ
diff --git a/clock/Library/Artifacts/92/922a52f8957606bda3c8cc01ac790829 b/clock/Library/Artifacts/92/922a52f8957606bda3c8cc01ac790829
new file mode 100644
index 00000000..a7f6bf87
Binary files /dev/null and b/clock/Library/Artifacts/92/922a52f8957606bda3c8cc01ac790829 differ
diff --git a/clock/Library/Artifacts/92/924affe10c1a15f4b64797be6d0d135e b/clock/Library/Artifacts/92/924affe10c1a15f4b64797be6d0d135e
new file mode 100644
index 00000000..7c67c4af
Binary files /dev/null and b/clock/Library/Artifacts/92/924affe10c1a15f4b64797be6d0d135e differ
diff --git a/clock/Library/Artifacts/92/927311d80efd63419ec9d7b80fa9fb0d b/clock/Library/Artifacts/92/927311d80efd63419ec9d7b80fa9fb0d
new file mode 100644
index 00000000..b477aea6
Binary files /dev/null and b/clock/Library/Artifacts/92/927311d80efd63419ec9d7b80fa9fb0d differ
diff --git a/clock/Library/Artifacts/93/9316f29a029ad785b583d86a93edb2f1 b/clock/Library/Artifacts/93/9316f29a029ad785b583d86a93edb2f1
new file mode 100644
index 00000000..85a337c9
Binary files /dev/null and b/clock/Library/Artifacts/93/9316f29a029ad785b583d86a93edb2f1 differ
diff --git a/clock/Library/Artifacts/93/931adf5b6a5fa8ce8dbbebcadc4d491f b/clock/Library/Artifacts/93/931adf5b6a5fa8ce8dbbebcadc4d491f
new file mode 100644
index 00000000..040eb3cd
Binary files /dev/null and b/clock/Library/Artifacts/93/931adf5b6a5fa8ce8dbbebcadc4d491f differ
diff --git a/clock/Library/Artifacts/93/9328b4cf18622b9ec19bd9da273118c2 b/clock/Library/Artifacts/93/9328b4cf18622b9ec19bd9da273118c2
new file mode 100644
index 00000000..eb8037d5
Binary files /dev/null and b/clock/Library/Artifacts/93/9328b4cf18622b9ec19bd9da273118c2 differ
diff --git a/clock/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 b/clock/Library/Artifacts/93/932e760195be1e29952b74e977f84c48
new file mode 100644
index 00000000..6132453d
Binary files /dev/null and b/clock/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 differ
diff --git a/clock/Library/Artifacts/93/937a7dd7e24e487e7d7310745988250a b/clock/Library/Artifacts/93/937a7dd7e24e487e7d7310745988250a
new file mode 100644
index 00000000..298c51e2
Binary files /dev/null and b/clock/Library/Artifacts/93/937a7dd7e24e487e7d7310745988250a differ
diff --git a/clock/Library/Artifacts/93/93ab5220d735924b6b4ebf46d73e9f2f b/clock/Library/Artifacts/93/93ab5220d735924b6b4ebf46d73e9f2f
new file mode 100644
index 00000000..d6c8b1f4
Binary files /dev/null and b/clock/Library/Artifacts/93/93ab5220d735924b6b4ebf46d73e9f2f differ
diff --git a/clock/Library/Artifacts/93/93fc3012d797b749abde15f373285520 b/clock/Library/Artifacts/93/93fc3012d797b749abde15f373285520
new file mode 100644
index 00000000..6b71348f
Binary files /dev/null and b/clock/Library/Artifacts/93/93fc3012d797b749abde15f373285520 differ
diff --git a/clock/Library/Artifacts/94/941cefc21987c872d48345e8f4d0283f b/clock/Library/Artifacts/94/941cefc21987c872d48345e8f4d0283f
new file mode 100644
index 00000000..a0662794
Binary files /dev/null and b/clock/Library/Artifacts/94/941cefc21987c872d48345e8f4d0283f differ
diff --git a/clock/Library/Artifacts/94/949a087c4f188e668737df72122331c6 b/clock/Library/Artifacts/94/949a087c4f188e668737df72122331c6
new file mode 100644
index 00000000..65d53128
Binary files /dev/null and b/clock/Library/Artifacts/94/949a087c4f188e668737df72122331c6 differ
diff --git a/clock/Library/Artifacts/95/9506d3525d1f82fc42bc9906657352f3 b/clock/Library/Artifacts/95/9506d3525d1f82fc42bc9906657352f3
new file mode 100644
index 00000000..0477aafd
Binary files /dev/null and b/clock/Library/Artifacts/95/9506d3525d1f82fc42bc9906657352f3 differ
diff --git a/clock/Library/Artifacts/95/951aa0839c8db8a9ae32042f12a3f249 b/clock/Library/Artifacts/95/951aa0839c8db8a9ae32042f12a3f249
new file mode 100644
index 00000000..362481fe
Binary files /dev/null and b/clock/Library/Artifacts/95/951aa0839c8db8a9ae32042f12a3f249 differ
diff --git a/clock/Library/Artifacts/95/951d3631ea362a25f53f9c7ee7c6f7fe b/clock/Library/Artifacts/95/951d3631ea362a25f53f9c7ee7c6f7fe
new file mode 100644
index 00000000..11061b86
Binary files /dev/null and b/clock/Library/Artifacts/95/951d3631ea362a25f53f9c7ee7c6f7fe differ
diff --git a/clock/Library/Artifacts/95/957eb55b3981e183dcf4c68cc07876c4 b/clock/Library/Artifacts/95/957eb55b3981e183dcf4c68cc07876c4
new file mode 100644
index 00000000..02087c0d
Binary files /dev/null and b/clock/Library/Artifacts/95/957eb55b3981e183dcf4c68cc07876c4 differ
diff --git a/clock/Library/Artifacts/95/95878c4c2c3aa2eeb07e6d298c624607 b/clock/Library/Artifacts/95/95878c4c2c3aa2eeb07e6d298c624607
new file mode 100644
index 00000000..dcb79e6a
Binary files /dev/null and b/clock/Library/Artifacts/95/95878c4c2c3aa2eeb07e6d298c624607 differ
diff --git a/clock/Library/Artifacts/95/95f88226fc4185ff98b509b3809c9877 b/clock/Library/Artifacts/95/95f88226fc4185ff98b509b3809c9877
new file mode 100644
index 00000000..f8ca6187
Binary files /dev/null and b/clock/Library/Artifacts/95/95f88226fc4185ff98b509b3809c9877 differ
diff --git a/clock/Library/Artifacts/96/9655d777f7d21df990f39f992738b623 b/clock/Library/Artifacts/96/9655d777f7d21df990f39f992738b623
new file mode 100644
index 00000000..a1b623f3
Binary files /dev/null and b/clock/Library/Artifacts/96/9655d777f7d21df990f39f992738b623 differ
diff --git a/clock/Library/Artifacts/96/966684d60169c2cee5097e4d356a5400 b/clock/Library/Artifacts/96/966684d60169c2cee5097e4d356a5400
new file mode 100644
index 00000000..a130a1a9
Binary files /dev/null and b/clock/Library/Artifacts/96/966684d60169c2cee5097e4d356a5400 differ
diff --git a/clock/Library/Artifacts/96/96c1a370285fff37eae4f50188c2404c b/clock/Library/Artifacts/96/96c1a370285fff37eae4f50188c2404c
new file mode 100644
index 00000000..dbbc1948
Binary files /dev/null and b/clock/Library/Artifacts/96/96c1a370285fff37eae4f50188c2404c differ
diff --git a/clock/Library/Artifacts/96/96d9c196f2fb0f9493e4c8bf40f31dde b/clock/Library/Artifacts/96/96d9c196f2fb0f9493e4c8bf40f31dde
new file mode 100644
index 00000000..67edaabe
Binary files /dev/null and b/clock/Library/Artifacts/96/96d9c196f2fb0f9493e4c8bf40f31dde differ
diff --git a/clock/Library/Artifacts/96/96ec37e4579b8bbcf986e87a9cc806c6 b/clock/Library/Artifacts/96/96ec37e4579b8bbcf986e87a9cc806c6
new file mode 100644
index 00000000..6d2873e2
Binary files /dev/null and b/clock/Library/Artifacts/96/96ec37e4579b8bbcf986e87a9cc806c6 differ
diff --git a/clock/Library/Artifacts/97/9701829542a88ccc2c1a319917764f87 b/clock/Library/Artifacts/97/9701829542a88ccc2c1a319917764f87
new file mode 100644
index 00000000..8d9c0d65
Binary files /dev/null and b/clock/Library/Artifacts/97/9701829542a88ccc2c1a319917764f87 differ
diff --git a/clock/Library/Artifacts/97/9772630751f8dfec8a2ddcc6f3bf038e b/clock/Library/Artifacts/97/9772630751f8dfec8a2ddcc6f3bf038e
new file mode 100644
index 00000000..8aa9b143
Binary files /dev/null and b/clock/Library/Artifacts/97/9772630751f8dfec8a2ddcc6f3bf038e differ
diff --git a/clock/Library/Artifacts/97/978b284383d679a3cc2f6107cacf3f4c b/clock/Library/Artifacts/97/978b284383d679a3cc2f6107cacf3f4c
new file mode 100644
index 00000000..84fbc45e
Binary files /dev/null and b/clock/Library/Artifacts/97/978b284383d679a3cc2f6107cacf3f4c differ
diff --git a/clock/Library/Artifacts/97/97dca3d9bb3442dacd4a825142830210 b/clock/Library/Artifacts/97/97dca3d9bb3442dacd4a825142830210
new file mode 100644
index 00000000..ed044eaf
Binary files /dev/null and b/clock/Library/Artifacts/97/97dca3d9bb3442dacd4a825142830210 differ
diff --git a/clock/Library/Artifacts/98/9830eeae0a0e0f1424e18f1e685b7fcf b/clock/Library/Artifacts/98/9830eeae0a0e0f1424e18f1e685b7fcf
new file mode 100644
index 00000000..bcfe292e
Binary files /dev/null and b/clock/Library/Artifacts/98/9830eeae0a0e0f1424e18f1e685b7fcf differ
diff --git a/clock/Library/Artifacts/98/985fdb00bb96060d44c80864d1e95da8 b/clock/Library/Artifacts/98/985fdb00bb96060d44c80864d1e95da8
new file mode 100644
index 00000000..d1d510aa
Binary files /dev/null and b/clock/Library/Artifacts/98/985fdb00bb96060d44c80864d1e95da8 differ
diff --git a/clock/Library/Artifacts/98/9877b09f0f698bd11da3bb573a337725 b/clock/Library/Artifacts/98/9877b09f0f698bd11da3bb573a337725
new file mode 100644
index 00000000..d8076fbd
Binary files /dev/null and b/clock/Library/Artifacts/98/9877b09f0f698bd11da3bb573a337725 differ
diff --git a/clock/Library/Artifacts/98/989e4560e28e675261877118f23e5af0 b/clock/Library/Artifacts/98/989e4560e28e675261877118f23e5af0
new file mode 100644
index 00000000..2514e9f5
Binary files /dev/null and b/clock/Library/Artifacts/98/989e4560e28e675261877118f23e5af0 differ
diff --git a/clock/Library/Artifacts/98/98cd9a4f40aa9c4e1095898ff374d125 b/clock/Library/Artifacts/98/98cd9a4f40aa9c4e1095898ff374d125
new file mode 100644
index 00000000..7fd364d6
Binary files /dev/null and b/clock/Library/Artifacts/98/98cd9a4f40aa9c4e1095898ff374d125 differ
diff --git a/clock/Library/Artifacts/98/98f2924b4063e98cf6c48427d29937f5 b/clock/Library/Artifacts/98/98f2924b4063e98cf6c48427d29937f5
new file mode 100644
index 00000000..28baf8a6
Binary files /dev/null and b/clock/Library/Artifacts/98/98f2924b4063e98cf6c48427d29937f5 differ
diff --git a/clock/Library/Artifacts/99/990e646dd11facc9b7a4f2a7abe28865 b/clock/Library/Artifacts/99/990e646dd11facc9b7a4f2a7abe28865
new file mode 100644
index 00000000..e5811d03
Binary files /dev/null and b/clock/Library/Artifacts/99/990e646dd11facc9b7a4f2a7abe28865 differ
diff --git a/clock/Library/Artifacts/99/99245257a042b37cf992fa69d0fa8d00 b/clock/Library/Artifacts/99/99245257a042b37cf992fa69d0fa8d00
new file mode 100644
index 00000000..cebf23ba
Binary files /dev/null and b/clock/Library/Artifacts/99/99245257a042b37cf992fa69d0fa8d00 differ
diff --git a/clock/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 b/clock/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6
new file mode 100644
index 00000000..50551e02
Binary files /dev/null and b/clock/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 differ
diff --git a/clock/Library/Artifacts/99/99d7d6b8c9787ea2267de27ee2f2d314 b/clock/Library/Artifacts/99/99d7d6b8c9787ea2267de27ee2f2d314
new file mode 100644
index 00000000..9e35fce0
Binary files /dev/null and b/clock/Library/Artifacts/99/99d7d6b8c9787ea2267de27ee2f2d314 differ
diff --git a/clock/Library/Artifacts/99/99f8d778cfc11ebe31eadb1f242fc8cf b/clock/Library/Artifacts/99/99f8d778cfc11ebe31eadb1f242fc8cf
new file mode 100644
index 00000000..1fa7678e
Binary files /dev/null and b/clock/Library/Artifacts/99/99f8d778cfc11ebe31eadb1f242fc8cf differ
diff --git a/clock/Library/Artifacts/9a/9a000842ade745d164f6a7d44237383b b/clock/Library/Artifacts/9a/9a000842ade745d164f6a7d44237383b
new file mode 100644
index 00000000..feeca842
Binary files /dev/null and b/clock/Library/Artifacts/9a/9a000842ade745d164f6a7d44237383b differ
diff --git a/clock/Library/Artifacts/9a/9a1bab4ce58ca8af41670ba985cd88bf b/clock/Library/Artifacts/9a/9a1bab4ce58ca8af41670ba985cd88bf
new file mode 100644
index 00000000..ccf43fc3
Binary files /dev/null and b/clock/Library/Artifacts/9a/9a1bab4ce58ca8af41670ba985cd88bf differ
diff --git a/clock/Library/Artifacts/9a/9aa74799c54b6c5cba6edf7f063f1c7f b/clock/Library/Artifacts/9a/9aa74799c54b6c5cba6edf7f063f1c7f
new file mode 100644
index 00000000..7e4b4aee
Binary files /dev/null and b/clock/Library/Artifacts/9a/9aa74799c54b6c5cba6edf7f063f1c7f differ
diff --git a/clock/Library/Artifacts/9a/9ae451c273258a94141dd171fcace677 b/clock/Library/Artifacts/9a/9ae451c273258a94141dd171fcace677
new file mode 100644
index 00000000..2a5fccde
Binary files /dev/null and b/clock/Library/Artifacts/9a/9ae451c273258a94141dd171fcace677 differ
diff --git a/clock/Library/Artifacts/9a/9ae477cd90913f228c8594114c3d4a6a b/clock/Library/Artifacts/9a/9ae477cd90913f228c8594114c3d4a6a
new file mode 100644
index 00000000..f0439f80
Binary files /dev/null and b/clock/Library/Artifacts/9a/9ae477cd90913f228c8594114c3d4a6a differ
diff --git a/clock/Library/Artifacts/9b/9b53f960e79c80bf3500c545ee4e1a8e b/clock/Library/Artifacts/9b/9b53f960e79c80bf3500c545ee4e1a8e
new file mode 100644
index 00000000..0dadc999
Binary files /dev/null and b/clock/Library/Artifacts/9b/9b53f960e79c80bf3500c545ee4e1a8e differ
diff --git a/clock/Library/Artifacts/9b/9b86cdc3dcf63bf9d4fc5ac666b88d83 b/clock/Library/Artifacts/9b/9b86cdc3dcf63bf9d4fc5ac666b88d83
new file mode 100644
index 00000000..d0fc594c
Binary files /dev/null and b/clock/Library/Artifacts/9b/9b86cdc3dcf63bf9d4fc5ac666b88d83 differ
diff --git a/clock/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f b/clock/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f
new file mode 100644
index 00000000..9353a9da
Binary files /dev/null and b/clock/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f differ
diff --git a/clock/Library/Artifacts/9c/9c4a7df6dbbc3d62bf879ed1acfbfdce b/clock/Library/Artifacts/9c/9c4a7df6dbbc3d62bf879ed1acfbfdce
new file mode 100644
index 00000000..bd835769
Binary files /dev/null and b/clock/Library/Artifacts/9c/9c4a7df6dbbc3d62bf879ed1acfbfdce differ
diff --git a/clock/Library/Artifacts/9c/9c5b17de2affcef01ecedac2e2b08e02 b/clock/Library/Artifacts/9c/9c5b17de2affcef01ecedac2e2b08e02
new file mode 100644
index 00000000..52397355
Binary files /dev/null and b/clock/Library/Artifacts/9c/9c5b17de2affcef01ecedac2e2b08e02 differ
diff --git a/clock/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 b/clock/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9
new file mode 100644
index 00000000..07874f82
Binary files /dev/null and b/clock/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 differ
diff --git a/clock/Library/Artifacts/9c/9cc14f696c65724edbe7ff5daae120b1 b/clock/Library/Artifacts/9c/9cc14f696c65724edbe7ff5daae120b1
new file mode 100644
index 00000000..b2f9702b
Binary files /dev/null and b/clock/Library/Artifacts/9c/9cc14f696c65724edbe7ff5daae120b1 differ
diff --git a/clock/Library/Artifacts/9d/9d00d4b9c91eab0ac1889551d228e687 b/clock/Library/Artifacts/9d/9d00d4b9c91eab0ac1889551d228e687
new file mode 100644
index 00000000..9060053d
Binary files /dev/null and b/clock/Library/Artifacts/9d/9d00d4b9c91eab0ac1889551d228e687 differ
diff --git a/clock/Library/Artifacts/9d/9d9605f508939522e621530ffaddae6e b/clock/Library/Artifacts/9d/9d9605f508939522e621530ffaddae6e
new file mode 100644
index 00000000..5dad2e50
Binary files /dev/null and b/clock/Library/Artifacts/9d/9d9605f508939522e621530ffaddae6e differ
diff --git a/clock/Library/Artifacts/9d/9dca7ebadd566ab4efb4830964b94fb4 b/clock/Library/Artifacts/9d/9dca7ebadd566ab4efb4830964b94fb4
new file mode 100644
index 00000000..1d64a493
Binary files /dev/null and b/clock/Library/Artifacts/9d/9dca7ebadd566ab4efb4830964b94fb4 differ
diff --git a/clock/Library/Artifacts/9d/9de22f3b0c61608da36b871d5a42da02 b/clock/Library/Artifacts/9d/9de22f3b0c61608da36b871d5a42da02
new file mode 100644
index 00000000..c248d3b1
Binary files /dev/null and b/clock/Library/Artifacts/9d/9de22f3b0c61608da36b871d5a42da02 differ
diff --git a/clock/Library/Artifacts/9d/9df7213b973dec60c03cd58c44b5dc9f b/clock/Library/Artifacts/9d/9df7213b973dec60c03cd58c44b5dc9f
new file mode 100644
index 00000000..7da3b82f
Binary files /dev/null and b/clock/Library/Artifacts/9d/9df7213b973dec60c03cd58c44b5dc9f differ
diff --git a/clock/Library/Artifacts/9e/9e48e56f29ece089798132c5d1e48d69 b/clock/Library/Artifacts/9e/9e48e56f29ece089798132c5d1e48d69
new file mode 100644
index 00000000..67d06fd8
Binary files /dev/null and b/clock/Library/Artifacts/9e/9e48e56f29ece089798132c5d1e48d69 differ
diff --git a/clock/Library/Artifacts/9e/9e872397ecc4c90474092af10f4b8631 b/clock/Library/Artifacts/9e/9e872397ecc4c90474092af10f4b8631
new file mode 100644
index 00000000..f29b9f41
Binary files /dev/null and b/clock/Library/Artifacts/9e/9e872397ecc4c90474092af10f4b8631 differ
diff --git a/clock/Library/Artifacts/9e/9e9b19e0dc7b697eaa2e966231913608 b/clock/Library/Artifacts/9e/9e9b19e0dc7b697eaa2e966231913608
new file mode 100644
index 00000000..46f07db2
Binary files /dev/null and b/clock/Library/Artifacts/9e/9e9b19e0dc7b697eaa2e966231913608 differ
diff --git a/clock/Library/Artifacts/9e/9ea12dbb089eb63d726b9ef4e29d66ae b/clock/Library/Artifacts/9e/9ea12dbb089eb63d726b9ef4e29d66ae
new file mode 100644
index 00000000..88ce6bcc
Binary files /dev/null and b/clock/Library/Artifacts/9e/9ea12dbb089eb63d726b9ef4e29d66ae differ
diff --git a/clock/Library/Artifacts/9e/9eaf04606b6d06625702b94ddaeb1cb9 b/clock/Library/Artifacts/9e/9eaf04606b6d06625702b94ddaeb1cb9
new file mode 100644
index 00000000..cad2e5a2
Binary files /dev/null and b/clock/Library/Artifacts/9e/9eaf04606b6d06625702b94ddaeb1cb9 differ
diff --git a/clock/Library/Artifacts/9e/9edaaa017cce5629d9b2337955759f14 b/clock/Library/Artifacts/9e/9edaaa017cce5629d9b2337955759f14
new file mode 100644
index 00000000..e96ace1c
Binary files /dev/null and b/clock/Library/Artifacts/9e/9edaaa017cce5629d9b2337955759f14 differ
diff --git a/clock/Library/Artifacts/9f/9f163d8b92793919e0fd02f31d750291 b/clock/Library/Artifacts/9f/9f163d8b92793919e0fd02f31d750291
new file mode 100644
index 00000000..bb73e6f9
Binary files /dev/null and b/clock/Library/Artifacts/9f/9f163d8b92793919e0fd02f31d750291 differ
diff --git a/clock/Library/Artifacts/9f/9f250396c6b26457294992da6b46795d b/clock/Library/Artifacts/9f/9f250396c6b26457294992da6b46795d
new file mode 100644
index 00000000..257b4007
Binary files /dev/null and b/clock/Library/Artifacts/9f/9f250396c6b26457294992da6b46795d differ
diff --git a/clock/Library/Artifacts/9f/9f26decad39c2fe30376fcf0b082aa26 b/clock/Library/Artifacts/9f/9f26decad39c2fe30376fcf0b082aa26
new file mode 100644
index 00000000..854bb9a1
Binary files /dev/null and b/clock/Library/Artifacts/9f/9f26decad39c2fe30376fcf0b082aa26 differ
diff --git a/clock/Library/Artifacts/9f/9fb725dc431579409c80e77bd220f758 b/clock/Library/Artifacts/9f/9fb725dc431579409c80e77bd220f758
new file mode 100644
index 00000000..78747e68
Binary files /dev/null and b/clock/Library/Artifacts/9f/9fb725dc431579409c80e77bd220f758 differ
diff --git a/clock/Library/Artifacts/9f/9fd9c601bbe8007c431f686009f560c5 b/clock/Library/Artifacts/9f/9fd9c601bbe8007c431f686009f560c5
new file mode 100644
index 00000000..d080eebb
Binary files /dev/null and b/clock/Library/Artifacts/9f/9fd9c601bbe8007c431f686009f560c5 differ
diff --git a/clock/Library/Artifacts/a0/a02002ccdb221224f3cd6e578787fed2 b/clock/Library/Artifacts/a0/a02002ccdb221224f3cd6e578787fed2
new file mode 100644
index 00000000..ab461c60
Binary files /dev/null and b/clock/Library/Artifacts/a0/a02002ccdb221224f3cd6e578787fed2 differ
diff --git a/clock/Library/Artifacts/a0/a02104b5cfa45a3c4a5d652c126994fc b/clock/Library/Artifacts/a0/a02104b5cfa45a3c4a5d652c126994fc
new file mode 100644
index 00000000..fc863acd
Binary files /dev/null and b/clock/Library/Artifacts/a0/a02104b5cfa45a3c4a5d652c126994fc differ
diff --git a/clock/Library/Artifacts/a0/a03f4c8bf23ada20894d41312957cd77 b/clock/Library/Artifacts/a0/a03f4c8bf23ada20894d41312957cd77
new file mode 100644
index 00000000..05cd9b01
Binary files /dev/null and b/clock/Library/Artifacts/a0/a03f4c8bf23ada20894d41312957cd77 differ
diff --git a/clock/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa b/clock/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa
new file mode 100644
index 00000000..d42e38f8
Binary files /dev/null and b/clock/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa differ
diff --git a/clock/Library/Artifacts/a0/a059af6fd50870a958c4fe256a9eee7d b/clock/Library/Artifacts/a0/a059af6fd50870a958c4fe256a9eee7d
new file mode 100644
index 00000000..b4e5c361
Binary files /dev/null and b/clock/Library/Artifacts/a0/a059af6fd50870a958c4fe256a9eee7d differ
diff --git a/clock/Library/Artifacts/a0/a0d592eb920c14a067e276ef6bb42334 b/clock/Library/Artifacts/a0/a0d592eb920c14a067e276ef6bb42334
new file mode 100644
index 00000000..084d1499
Binary files /dev/null and b/clock/Library/Artifacts/a0/a0d592eb920c14a067e276ef6bb42334 differ
diff --git a/clock/Library/Artifacts/a0/a0de831d2731b4ff7aa9a0d4e01fbb3d b/clock/Library/Artifacts/a0/a0de831d2731b4ff7aa9a0d4e01fbb3d
new file mode 100644
index 00000000..35f22ac1
Binary files /dev/null and b/clock/Library/Artifacts/a0/a0de831d2731b4ff7aa9a0d4e01fbb3d differ
diff --git a/clock/Library/Artifacts/a1/a158e007183ce99a95736066ddccc8e8 b/clock/Library/Artifacts/a1/a158e007183ce99a95736066ddccc8e8
new file mode 100644
index 00000000..d9f75bf1
Binary files /dev/null and b/clock/Library/Artifacts/a1/a158e007183ce99a95736066ddccc8e8 differ
diff --git a/clock/Library/Artifacts/a1/a1781c2f87bd490b70b75c6e01da62b9 b/clock/Library/Artifacts/a1/a1781c2f87bd490b70b75c6e01da62b9
new file mode 100644
index 00000000..f92cbc45
Binary files /dev/null and b/clock/Library/Artifacts/a1/a1781c2f87bd490b70b75c6e01da62b9 differ
diff --git a/clock/Library/Artifacts/a1/a1dc18178e9a2e0230b7df4871944b98 b/clock/Library/Artifacts/a1/a1dc18178e9a2e0230b7df4871944b98
new file mode 100644
index 00000000..28ae7e86
Binary files /dev/null and b/clock/Library/Artifacts/a1/a1dc18178e9a2e0230b7df4871944b98 differ
diff --git a/clock/Library/Artifacts/a1/a1e7dc24ed59d8c99285661115d3f738 b/clock/Library/Artifacts/a1/a1e7dc24ed59d8c99285661115d3f738
new file mode 100644
index 00000000..c61aca79
Binary files /dev/null and b/clock/Library/Artifacts/a1/a1e7dc24ed59d8c99285661115d3f738 differ
diff --git a/clock/Library/Artifacts/a2/a23e91ca768ccaea292ecd85388feae7 b/clock/Library/Artifacts/a2/a23e91ca768ccaea292ecd85388feae7
new file mode 100644
index 00000000..a7cca5a0
Binary files /dev/null and b/clock/Library/Artifacts/a2/a23e91ca768ccaea292ecd85388feae7 differ
diff --git a/clock/Library/Artifacts/a2/a24aee6a34af41cab397c2f14e3d5de3 b/clock/Library/Artifacts/a2/a24aee6a34af41cab397c2f14e3d5de3
new file mode 100644
index 00000000..f18e2fe2
Binary files /dev/null and b/clock/Library/Artifacts/a2/a24aee6a34af41cab397c2f14e3d5de3 differ
diff --git a/clock/Library/Artifacts/a2/a256e18f9f9ae073b6d5e6b307b841b0 b/clock/Library/Artifacts/a2/a256e18f9f9ae073b6d5e6b307b841b0
new file mode 100644
index 00000000..6376d7f5
Binary files /dev/null and b/clock/Library/Artifacts/a2/a256e18f9f9ae073b6d5e6b307b841b0 differ
diff --git a/clock/Library/Artifacts/a2/a2735d509cf3e9cd853b32f9fd62e5f8 b/clock/Library/Artifacts/a2/a2735d509cf3e9cd853b32f9fd62e5f8
new file mode 100644
index 00000000..0dac17fd
Binary files /dev/null and b/clock/Library/Artifacts/a2/a2735d509cf3e9cd853b32f9fd62e5f8 differ
diff --git a/clock/Library/Artifacts/a2/a2a93810122f47ba931e2a824f41d34f b/clock/Library/Artifacts/a2/a2a93810122f47ba931e2a824f41d34f
new file mode 100644
index 00000000..f2a221f4
Binary files /dev/null and b/clock/Library/Artifacts/a2/a2a93810122f47ba931e2a824f41d34f differ
diff --git a/clock/Library/Artifacts/a2/a2d74b58a77383dc068a26576cd7f071 b/clock/Library/Artifacts/a2/a2d74b58a77383dc068a26576cd7f071
new file mode 100644
index 00000000..514da9bc
Binary files /dev/null and b/clock/Library/Artifacts/a2/a2d74b58a77383dc068a26576cd7f071 differ
diff --git a/clock/Library/Artifacts/a3/a317acce962c8b6dba153a9f34d65fdb b/clock/Library/Artifacts/a3/a317acce962c8b6dba153a9f34d65fdb
new file mode 100644
index 00000000..68ebdbe7
Binary files /dev/null and b/clock/Library/Artifacts/a3/a317acce962c8b6dba153a9f34d65fdb differ
diff --git a/clock/Library/Artifacts/a3/a333d4246dbfb34ec4ef4bcaf928d4cd b/clock/Library/Artifacts/a3/a333d4246dbfb34ec4ef4bcaf928d4cd
new file mode 100644
index 00000000..95eac653
Binary files /dev/null and b/clock/Library/Artifacts/a3/a333d4246dbfb34ec4ef4bcaf928d4cd differ
diff --git a/clock/Library/Artifacts/a3/a3479aca78afee95d59bba7696828677 b/clock/Library/Artifacts/a3/a3479aca78afee95d59bba7696828677
new file mode 100644
index 00000000..7034159b
Binary files /dev/null and b/clock/Library/Artifacts/a3/a3479aca78afee95d59bba7696828677 differ
diff --git a/clock/Library/Artifacts/a3/a3b464fe2cc64432e9c3e572acbdc673 b/clock/Library/Artifacts/a3/a3b464fe2cc64432e9c3e572acbdc673
new file mode 100644
index 00000000..8843032b
Binary files /dev/null and b/clock/Library/Artifacts/a3/a3b464fe2cc64432e9c3e572acbdc673 differ
diff --git a/clock/Library/Artifacts/a3/a3b7d6f931e09d5355cb5eac74acb263 b/clock/Library/Artifacts/a3/a3b7d6f931e09d5355cb5eac74acb263
new file mode 100644
index 00000000..37666c28
Binary files /dev/null and b/clock/Library/Artifacts/a3/a3b7d6f931e09d5355cb5eac74acb263 differ
diff --git a/clock/Library/Artifacts/a3/a3c88e857239439c46c03110af1360bb b/clock/Library/Artifacts/a3/a3c88e857239439c46c03110af1360bb
new file mode 100644
index 00000000..beff5bb5
Binary files /dev/null and b/clock/Library/Artifacts/a3/a3c88e857239439c46c03110af1360bb differ
diff --git a/clock/Library/Artifacts/a3/a3eba622304eacd1589b0e2e78f814a2 b/clock/Library/Artifacts/a3/a3eba622304eacd1589b0e2e78f814a2
new file mode 100644
index 00000000..620d19d9
Binary files /dev/null and b/clock/Library/Artifacts/a3/a3eba622304eacd1589b0e2e78f814a2 differ
diff --git a/clock/Library/Artifacts/a4/a44a4bcbc6341cc66450ccb9bc522296 b/clock/Library/Artifacts/a4/a44a4bcbc6341cc66450ccb9bc522296
new file mode 100644
index 00000000..b635a08d
Binary files /dev/null and b/clock/Library/Artifacts/a4/a44a4bcbc6341cc66450ccb9bc522296 differ
diff --git a/clock/Library/Artifacts/a5/a52c2068d6390a3c3707b5a50c53b931 b/clock/Library/Artifacts/a5/a52c2068d6390a3c3707b5a50c53b931
new file mode 100644
index 00000000..54ef3d5e
Binary files /dev/null and b/clock/Library/Artifacts/a5/a52c2068d6390a3c3707b5a50c53b931 differ
diff --git a/clock/Library/Artifacts/a5/a54011037a33c70f649aef41c1623436 b/clock/Library/Artifacts/a5/a54011037a33c70f649aef41c1623436
new file mode 100644
index 00000000..720a5f4c
Binary files /dev/null and b/clock/Library/Artifacts/a5/a54011037a33c70f649aef41c1623436 differ
diff --git a/clock/Library/Artifacts/a5/a566825548cd5cb9cc5f5be9ff07a79f b/clock/Library/Artifacts/a5/a566825548cd5cb9cc5f5be9ff07a79f
new file mode 100644
index 00000000..dee4b09d
Binary files /dev/null and b/clock/Library/Artifacts/a5/a566825548cd5cb9cc5f5be9ff07a79f differ
diff --git a/clock/Library/Artifacts/a6/a6164b18e187e4710a7ff41414913567 b/clock/Library/Artifacts/a6/a6164b18e187e4710a7ff41414913567
new file mode 100644
index 00000000..3e27bd32
Binary files /dev/null and b/clock/Library/Artifacts/a6/a6164b18e187e4710a7ff41414913567 differ
diff --git a/clock/Library/Artifacts/a6/a69aa3f1b432aa4a0ea02ec425b53c8a b/clock/Library/Artifacts/a6/a69aa3f1b432aa4a0ea02ec425b53c8a
new file mode 100644
index 00000000..42c37a4e
Binary files /dev/null and b/clock/Library/Artifacts/a6/a69aa3f1b432aa4a0ea02ec425b53c8a differ
diff --git a/clock/Library/Artifacts/a6/a69bc184bed6bf694f502227ca69b3f9 b/clock/Library/Artifacts/a6/a69bc184bed6bf694f502227ca69b3f9
new file mode 100644
index 00000000..27553307
Binary files /dev/null and b/clock/Library/Artifacts/a6/a69bc184bed6bf694f502227ca69b3f9 differ
diff --git a/clock/Library/Artifacts/a6/a6f901a54da7685e7f1bf013b4ee5243 b/clock/Library/Artifacts/a6/a6f901a54da7685e7f1bf013b4ee5243
new file mode 100644
index 00000000..da456c05
Binary files /dev/null and b/clock/Library/Artifacts/a6/a6f901a54da7685e7f1bf013b4ee5243 differ
diff --git a/clock/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b b/clock/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b
new file mode 100644
index 00000000..198cc8c8
Binary files /dev/null and b/clock/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b differ
diff --git a/clock/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 b/clock/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3
new file mode 100644
index 00000000..93e3e484
Binary files /dev/null and b/clock/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 differ
diff --git a/clock/Library/Artifacts/a7/a76d675763beb87b43397bce5b3d1cb0 b/clock/Library/Artifacts/a7/a76d675763beb87b43397bce5b3d1cb0
new file mode 100644
index 00000000..d8044b8e
Binary files /dev/null and b/clock/Library/Artifacts/a7/a76d675763beb87b43397bce5b3d1cb0 differ
diff --git a/clock/Library/Artifacts/a7/a78f7fc03c887bfb26683f91e11d729a b/clock/Library/Artifacts/a7/a78f7fc03c887bfb26683f91e11d729a
new file mode 100644
index 00000000..04a054e4
Binary files /dev/null and b/clock/Library/Artifacts/a7/a78f7fc03c887bfb26683f91e11d729a differ
diff --git a/clock/Library/Artifacts/a7/a7a3308d16e89ec0c1e41fd3bae698f2 b/clock/Library/Artifacts/a7/a7a3308d16e89ec0c1e41fd3bae698f2
new file mode 100644
index 00000000..8f1fa3da
Binary files /dev/null and b/clock/Library/Artifacts/a7/a7a3308d16e89ec0c1e41fd3bae698f2 differ
diff --git a/clock/Library/Artifacts/a7/a7b34c91a8a78c037ebdb06cf5d01c96 b/clock/Library/Artifacts/a7/a7b34c91a8a78c037ebdb06cf5d01c96
new file mode 100644
index 00000000..864d7aae
Binary files /dev/null and b/clock/Library/Artifacts/a7/a7b34c91a8a78c037ebdb06cf5d01c96 differ
diff --git a/clock/Library/Artifacts/a7/a7b5b8492aff69aba02ee436416d1fb7 b/clock/Library/Artifacts/a7/a7b5b8492aff69aba02ee436416d1fb7
new file mode 100644
index 00000000..692cce0c
Binary files /dev/null and b/clock/Library/Artifacts/a7/a7b5b8492aff69aba02ee436416d1fb7 differ
diff --git a/clock/Library/Artifacts/a7/a7bb6da55a09854383ac13ea3ef2d334 b/clock/Library/Artifacts/a7/a7bb6da55a09854383ac13ea3ef2d334
new file mode 100644
index 00000000..8d53a966
Binary files /dev/null and b/clock/Library/Artifacts/a7/a7bb6da55a09854383ac13ea3ef2d334 differ
diff --git a/clock/Library/Artifacts/a7/a7edc2c26112553198ecb5cdf56dd6fc b/clock/Library/Artifacts/a7/a7edc2c26112553198ecb5cdf56dd6fc
new file mode 100644
index 00000000..26257670
Binary files /dev/null and b/clock/Library/Artifacts/a7/a7edc2c26112553198ecb5cdf56dd6fc differ
diff --git a/clock/Library/Artifacts/a8/a81b0a8b3265058bea1c9a09066552fc b/clock/Library/Artifacts/a8/a81b0a8b3265058bea1c9a09066552fc
new file mode 100644
index 00000000..7b7dd47f
Binary files /dev/null and b/clock/Library/Artifacts/a8/a81b0a8b3265058bea1c9a09066552fc differ
diff --git a/clock/Library/Artifacts/a8/a84e23c667fbd67f33440421196770ae b/clock/Library/Artifacts/a8/a84e23c667fbd67f33440421196770ae
new file mode 100644
index 00000000..90bbc8fb
Binary files /dev/null and b/clock/Library/Artifacts/a8/a84e23c667fbd67f33440421196770ae differ
diff --git a/clock/Library/Artifacts/a8/a881f2843091739e1637e8f2ec9a90b2 b/clock/Library/Artifacts/a8/a881f2843091739e1637e8f2ec9a90b2
new file mode 100644
index 00000000..38411475
Binary files /dev/null and b/clock/Library/Artifacts/a8/a881f2843091739e1637e8f2ec9a90b2 differ
diff --git a/clock/Library/Artifacts/a8/a88494b55a05354c9bb057712c75ed82 b/clock/Library/Artifacts/a8/a88494b55a05354c9bb057712c75ed82
new file mode 100644
index 00000000..150b61c9
Binary files /dev/null and b/clock/Library/Artifacts/a8/a88494b55a05354c9bb057712c75ed82 differ
diff --git a/clock/Library/Artifacts/a8/a8e8e217f647e860b3fe5dc21aa4b0f3 b/clock/Library/Artifacts/a8/a8e8e217f647e860b3fe5dc21aa4b0f3
new file mode 100644
index 00000000..dbfe457f
Binary files /dev/null and b/clock/Library/Artifacts/a8/a8e8e217f647e860b3fe5dc21aa4b0f3 differ
diff --git a/clock/Library/Artifacts/a9/a95fc36c1d6e4efb7f6eb9def5c3eced b/clock/Library/Artifacts/a9/a95fc36c1d6e4efb7f6eb9def5c3eced
new file mode 100644
index 00000000..b91bb726
Binary files /dev/null and b/clock/Library/Artifacts/a9/a95fc36c1d6e4efb7f6eb9def5c3eced differ
diff --git a/clock/Library/Artifacts/a9/a97e50ddea3eae95875b436841a14fb4 b/clock/Library/Artifacts/a9/a97e50ddea3eae95875b436841a14fb4
new file mode 100644
index 00000000..a3e3315e
Binary files /dev/null and b/clock/Library/Artifacts/a9/a97e50ddea3eae95875b436841a14fb4 differ
diff --git a/clock/Library/Artifacts/a9/a9960fe014a524de9ba59b7203e781a8 b/clock/Library/Artifacts/a9/a9960fe014a524de9ba59b7203e781a8
new file mode 100644
index 00000000..8c677db8
Binary files /dev/null and b/clock/Library/Artifacts/a9/a9960fe014a524de9ba59b7203e781a8 differ
diff --git a/clock/Library/Artifacts/a9/a9d2c568bdb9481f792a66aa5f7d64f4 b/clock/Library/Artifacts/a9/a9d2c568bdb9481f792a66aa5f7d64f4
new file mode 100644
index 00000000..963464f4
Binary files /dev/null and b/clock/Library/Artifacts/a9/a9d2c568bdb9481f792a66aa5f7d64f4 differ
diff --git a/clock/Library/Artifacts/a9/a9e10e6d590dda4e446732112378af5c b/clock/Library/Artifacts/a9/a9e10e6d590dda4e446732112378af5c
new file mode 100644
index 00000000..5c2074f0
Binary files /dev/null and b/clock/Library/Artifacts/a9/a9e10e6d590dda4e446732112378af5c differ
diff --git a/clock/Library/Artifacts/aa/aa130bb95467c8aa88362e4016f0655f b/clock/Library/Artifacts/aa/aa130bb95467c8aa88362e4016f0655f
new file mode 100644
index 00000000..2e48b299
Binary files /dev/null and b/clock/Library/Artifacts/aa/aa130bb95467c8aa88362e4016f0655f differ
diff --git a/clock/Library/Artifacts/aa/aa3da944582aab8ddcd06b352a05a4a6 b/clock/Library/Artifacts/aa/aa3da944582aab8ddcd06b352a05a4a6
new file mode 100644
index 00000000..c6f44435
Binary files /dev/null and b/clock/Library/Artifacts/aa/aa3da944582aab8ddcd06b352a05a4a6 differ
diff --git a/clock/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 b/clock/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40
new file mode 100644
index 00000000..f8e19c89
Binary files /dev/null and b/clock/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 differ
diff --git a/clock/Library/Artifacts/aa/aad13f1c587876190720963d18383e39 b/clock/Library/Artifacts/aa/aad13f1c587876190720963d18383e39
new file mode 100644
index 00000000..03581d28
Binary files /dev/null and b/clock/Library/Artifacts/aa/aad13f1c587876190720963d18383e39 differ
diff --git a/clock/Library/Artifacts/aa/aad1c70ab71c74bf6dca74929f98d8c0 b/clock/Library/Artifacts/aa/aad1c70ab71c74bf6dca74929f98d8c0
new file mode 100644
index 00000000..0feca725
Binary files /dev/null and b/clock/Library/Artifacts/aa/aad1c70ab71c74bf6dca74929f98d8c0 differ
diff --git a/clock/Library/Artifacts/aa/aafbf0697069540f3ead3fe1fe4b8fed b/clock/Library/Artifacts/aa/aafbf0697069540f3ead3fe1fe4b8fed
new file mode 100644
index 00000000..f1d9e9ae
Binary files /dev/null and b/clock/Library/Artifacts/aa/aafbf0697069540f3ead3fe1fe4b8fed differ
diff --git a/clock/Library/Artifacts/ab/ab1922186de0c85f2fa0b908b91492e2 b/clock/Library/Artifacts/ab/ab1922186de0c85f2fa0b908b91492e2
new file mode 100644
index 00000000..19ef85e8
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab1922186de0c85f2fa0b908b91492e2 differ
diff --git a/clock/Library/Artifacts/ab/ab3ff10a119eba99a0aafb4db933d754 b/clock/Library/Artifacts/ab/ab3ff10a119eba99a0aafb4db933d754
new file mode 100644
index 00000000..dcd70df6
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab3ff10a119eba99a0aafb4db933d754 differ
diff --git a/clock/Library/Artifacts/ab/ab48e32f93e71cc83b4eea24d0702ed1 b/clock/Library/Artifacts/ab/ab48e32f93e71cc83b4eea24d0702ed1
new file mode 100644
index 00000000..fed5d33f
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab48e32f93e71cc83b4eea24d0702ed1 differ
diff --git a/clock/Library/Artifacts/ab/ab734d33b53c6aa65fcdf38cdd341160 b/clock/Library/Artifacts/ab/ab734d33b53c6aa65fcdf38cdd341160
new file mode 100644
index 00000000..f6a2986f
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab734d33b53c6aa65fcdf38cdd341160 differ
diff --git a/clock/Library/Artifacts/ab/ab81ceae428ff67984da5559cfa47feb b/clock/Library/Artifacts/ab/ab81ceae428ff67984da5559cfa47feb
new file mode 100644
index 00000000..9c5e84fe
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab81ceae428ff67984da5559cfa47feb differ
diff --git a/clock/Library/Artifacts/ab/ab8cfa5560aa63fb30f53d867b335130 b/clock/Library/Artifacts/ab/ab8cfa5560aa63fb30f53d867b335130
new file mode 100644
index 00000000..5dfa4d80
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab8cfa5560aa63fb30f53d867b335130 differ
diff --git a/clock/Library/Artifacts/ab/ab8d56365d122860fad45e4c1237734e b/clock/Library/Artifacts/ab/ab8d56365d122860fad45e4c1237734e
new file mode 100644
index 00000000..08e89833
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab8d56365d122860fad45e4c1237734e differ
diff --git a/clock/Library/Artifacts/ab/ab91045955d8d8d38c97d502f926da4b b/clock/Library/Artifacts/ab/ab91045955d8d8d38c97d502f926da4b
new file mode 100644
index 00000000..e19aafe4
Binary files /dev/null and b/clock/Library/Artifacts/ab/ab91045955d8d8d38c97d502f926da4b differ
diff --git a/clock/Library/Artifacts/ab/abc088bfbec2b4456697e5792f266653 b/clock/Library/Artifacts/ab/abc088bfbec2b4456697e5792f266653
new file mode 100644
index 00000000..4b50ab01
Binary files /dev/null and b/clock/Library/Artifacts/ab/abc088bfbec2b4456697e5792f266653 differ
diff --git a/clock/Library/Artifacts/ab/abcdaa363a1ecdcb8ae1fafcf3b51969 b/clock/Library/Artifacts/ab/abcdaa363a1ecdcb8ae1fafcf3b51969
new file mode 100644
index 00000000..7cb59f42
Binary files /dev/null and b/clock/Library/Artifacts/ab/abcdaa363a1ecdcb8ae1fafcf3b51969 differ
diff --git a/clock/Library/Artifacts/ab/abf0f2bc37e7f80c537d3f8379acc404 b/clock/Library/Artifacts/ab/abf0f2bc37e7f80c537d3f8379acc404
new file mode 100644
index 00000000..224a6a3f
Binary files /dev/null and b/clock/Library/Artifacts/ab/abf0f2bc37e7f80c537d3f8379acc404 differ
diff --git a/clock/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b b/clock/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b
new file mode 100644
index 00000000..5ad8c1f2
Binary files /dev/null and b/clock/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b differ
diff --git a/clock/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c b/clock/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c
new file mode 100644
index 00000000..8d1da09e
Binary files /dev/null and b/clock/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c differ
diff --git a/clock/Library/Artifacts/ac/ac045016faba8936f543b141eedc872d b/clock/Library/Artifacts/ac/ac045016faba8936f543b141eedc872d
new file mode 100644
index 00000000..f9962d30
Binary files /dev/null and b/clock/Library/Artifacts/ac/ac045016faba8936f543b141eedc872d differ
diff --git a/clock/Library/Artifacts/ac/ac1fd182ce3a158abada56e8d5302d2b b/clock/Library/Artifacts/ac/ac1fd182ce3a158abada56e8d5302d2b
new file mode 100644
index 00000000..ef8db180
Binary files /dev/null and b/clock/Library/Artifacts/ac/ac1fd182ce3a158abada56e8d5302d2b differ
diff --git a/clock/Library/Artifacts/ac/ac3da59e245d07f3257aa3d60ca9953c b/clock/Library/Artifacts/ac/ac3da59e245d07f3257aa3d60ca9953c
new file mode 100644
index 00000000..a34e9fc1
Binary files /dev/null and b/clock/Library/Artifacts/ac/ac3da59e245d07f3257aa3d60ca9953c differ
diff --git a/clock/Library/Artifacts/ac/ac5a9307bef24f9a64b5bed5d2f280cf b/clock/Library/Artifacts/ac/ac5a9307bef24f9a64b5bed5d2f280cf
new file mode 100644
index 00000000..48d435d4
Binary files /dev/null and b/clock/Library/Artifacts/ac/ac5a9307bef24f9a64b5bed5d2f280cf differ
diff --git a/clock/Library/Artifacts/ac/ac6c9eaca624194b7a8f9224a49f071c b/clock/Library/Artifacts/ac/ac6c9eaca624194b7a8f9224a49f071c
new file mode 100644
index 00000000..b5e0b931
Binary files /dev/null and b/clock/Library/Artifacts/ac/ac6c9eaca624194b7a8f9224a49f071c differ
diff --git a/clock/Library/Artifacts/ac/acb208dd90005c73b776c98d73bbda49 b/clock/Library/Artifacts/ac/acb208dd90005c73b776c98d73bbda49
new file mode 100644
index 00000000..0de7e3e3
Binary files /dev/null and b/clock/Library/Artifacts/ac/acb208dd90005c73b776c98d73bbda49 differ
diff --git a/clock/Library/Artifacts/ac/acd9e0bff314d33217ff3aade43fd5d8 b/clock/Library/Artifacts/ac/acd9e0bff314d33217ff3aade43fd5d8
new file mode 100644
index 00000000..dfc002f2
Binary files /dev/null and b/clock/Library/Artifacts/ac/acd9e0bff314d33217ff3aade43fd5d8 differ
diff --git a/clock/Library/Artifacts/ac/acf93eab434b489bdc77702286967b36 b/clock/Library/Artifacts/ac/acf93eab434b489bdc77702286967b36
new file mode 100644
index 00000000..2187aecf
Binary files /dev/null and b/clock/Library/Artifacts/ac/acf93eab434b489bdc77702286967b36 differ
diff --git a/clock/Library/Artifacts/ad/ad1301e014dd1873784a9273b883c4f8 b/clock/Library/Artifacts/ad/ad1301e014dd1873784a9273b883c4f8
new file mode 100644
index 00000000..0d4c371f
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad1301e014dd1873784a9273b883c4f8 differ
diff --git a/clock/Library/Artifacts/ad/ad1cf960ddecc0c3cce66942f4107f9e b/clock/Library/Artifacts/ad/ad1cf960ddecc0c3cce66942f4107f9e
new file mode 100644
index 00000000..fd1338a1
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad1cf960ddecc0c3cce66942f4107f9e differ
diff --git a/clock/Library/Artifacts/ad/ad39227fe401bbf979e0138ef785c582 b/clock/Library/Artifacts/ad/ad39227fe401bbf979e0138ef785c582
new file mode 100644
index 00000000..f92754c9
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad39227fe401bbf979e0138ef785c582 differ
diff --git a/clock/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee b/clock/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee
new file mode 100644
index 00000000..30d7a97e
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee differ
diff --git a/clock/Library/Artifacts/ad/ad5704c4a71b2bf2f859491dcf5297ff b/clock/Library/Artifacts/ad/ad5704c4a71b2bf2f859491dcf5297ff
new file mode 100644
index 00000000..2f898eed
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad5704c4a71b2bf2f859491dcf5297ff differ
diff --git a/clock/Library/Artifacts/ad/ad78a8b631e32d7e83b60e5ce52cf329 b/clock/Library/Artifacts/ad/ad78a8b631e32d7e83b60e5ce52cf329
new file mode 100644
index 00000000..f8516091
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad78a8b631e32d7e83b60e5ce52cf329 differ
diff --git a/clock/Library/Artifacts/ad/ad7e114d81adfbc4df800e4d966142b8 b/clock/Library/Artifacts/ad/ad7e114d81adfbc4df800e4d966142b8
new file mode 100644
index 00000000..daafc29f
Binary files /dev/null and b/clock/Library/Artifacts/ad/ad7e114d81adfbc4df800e4d966142b8 differ
diff --git a/clock/Library/Artifacts/ad/adacb00720bf0a4bd0f83d0411c5effc b/clock/Library/Artifacts/ad/adacb00720bf0a4bd0f83d0411c5effc
new file mode 100644
index 00000000..614438e4
Binary files /dev/null and b/clock/Library/Artifacts/ad/adacb00720bf0a4bd0f83d0411c5effc differ
diff --git a/clock/Library/Artifacts/ad/adba21b97acc8979c225b9a1829f51c0 b/clock/Library/Artifacts/ad/adba21b97acc8979c225b9a1829f51c0
new file mode 100644
index 00000000..80e8da16
Binary files /dev/null and b/clock/Library/Artifacts/ad/adba21b97acc8979c225b9a1829f51c0 differ
diff --git a/clock/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b b/clock/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b
new file mode 100644
index 00000000..6db21493
Binary files /dev/null and b/clock/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b differ
diff --git a/clock/Library/Artifacts/ae/ae178c53dfdc6106c4f74b5d0c9af237 b/clock/Library/Artifacts/ae/ae178c53dfdc6106c4f74b5d0c9af237
new file mode 100644
index 00000000..b418f5d2
Binary files /dev/null and b/clock/Library/Artifacts/ae/ae178c53dfdc6106c4f74b5d0c9af237 differ
diff --git a/clock/Library/Artifacts/ae/ae20ebc0627d9fb0e0d7b7c0ef308d5d b/clock/Library/Artifacts/ae/ae20ebc0627d9fb0e0d7b7c0ef308d5d
new file mode 100644
index 00000000..8d8b3202
Binary files /dev/null and b/clock/Library/Artifacts/ae/ae20ebc0627d9fb0e0d7b7c0ef308d5d differ
diff --git a/clock/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f b/clock/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f
new file mode 100644
index 00000000..46e2da41
Binary files /dev/null and b/clock/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f differ
diff --git a/clock/Library/Artifacts/ae/ae629ad937e874df997d94f7aeb851cc b/clock/Library/Artifacts/ae/ae629ad937e874df997d94f7aeb851cc
new file mode 100644
index 00000000..e1a68bf7
Binary files /dev/null and b/clock/Library/Artifacts/ae/ae629ad937e874df997d94f7aeb851cc differ
diff --git a/clock/Library/Artifacts/ae/ae6c3ceae1766c86fe5737211e78896a b/clock/Library/Artifacts/ae/ae6c3ceae1766c86fe5737211e78896a
new file mode 100644
index 00000000..ffa4c580
Binary files /dev/null and b/clock/Library/Artifacts/ae/ae6c3ceae1766c86fe5737211e78896a differ
diff --git a/clock/Library/Artifacts/ae/aec6a93d6ed49311ab0ae985341cc507 b/clock/Library/Artifacts/ae/aec6a93d6ed49311ab0ae985341cc507
new file mode 100644
index 00000000..94c261d1
Binary files /dev/null and b/clock/Library/Artifacts/ae/aec6a93d6ed49311ab0ae985341cc507 differ
diff --git a/clock/Library/Artifacts/ae/aeedf3d723c279cec1eadfd53ac3f9c6 b/clock/Library/Artifacts/ae/aeedf3d723c279cec1eadfd53ac3f9c6
new file mode 100644
index 00000000..3649e261
Binary files /dev/null and b/clock/Library/Artifacts/ae/aeedf3d723c279cec1eadfd53ac3f9c6 differ
diff --git a/clock/Library/Artifacts/ae/aef079c9d3aff65a19cd97a1c70175ec b/clock/Library/Artifacts/ae/aef079c9d3aff65a19cd97a1c70175ec
new file mode 100644
index 00000000..a45883f0
Binary files /dev/null and b/clock/Library/Artifacts/ae/aef079c9d3aff65a19cd97a1c70175ec differ
diff --git a/clock/Library/Artifacts/af/af111f9fe3960cc6a8968b3e517398c9 b/clock/Library/Artifacts/af/af111f9fe3960cc6a8968b3e517398c9
new file mode 100644
index 00000000..55ba0ab1
Binary files /dev/null and b/clock/Library/Artifacts/af/af111f9fe3960cc6a8968b3e517398c9 differ
diff --git a/clock/Library/Artifacts/af/af1926b0acc509a29ac2a0aa2f1a0973 b/clock/Library/Artifacts/af/af1926b0acc509a29ac2a0aa2f1a0973
new file mode 100644
index 00000000..f64607a2
Binary files /dev/null and b/clock/Library/Artifacts/af/af1926b0acc509a29ac2a0aa2f1a0973 differ
diff --git a/clock/Library/Artifacts/af/af27c1c0c9abd056abd11d177ab92b28 b/clock/Library/Artifacts/af/af27c1c0c9abd056abd11d177ab92b28
new file mode 100644
index 00000000..a128dc6b
Binary files /dev/null and b/clock/Library/Artifacts/af/af27c1c0c9abd056abd11d177ab92b28 differ
diff --git a/clock/Library/Artifacts/af/af45b10a2df72ae51636b5b6b234dc7f b/clock/Library/Artifacts/af/af45b10a2df72ae51636b5b6b234dc7f
new file mode 100644
index 00000000..09048064
Binary files /dev/null and b/clock/Library/Artifacts/af/af45b10a2df72ae51636b5b6b234dc7f differ
diff --git a/clock/Library/Artifacts/b0/b012f235ad5be63bcae6f4fd5e401099 b/clock/Library/Artifacts/b0/b012f235ad5be63bcae6f4fd5e401099
new file mode 100644
index 00000000..67dd2fdf
Binary files /dev/null and b/clock/Library/Artifacts/b0/b012f235ad5be63bcae6f4fd5e401099 differ
diff --git a/clock/Library/Artifacts/b0/b0328bc0cf534caab641168f5606d75e b/clock/Library/Artifacts/b0/b0328bc0cf534caab641168f5606d75e
new file mode 100644
index 00000000..c428f294
Binary files /dev/null and b/clock/Library/Artifacts/b0/b0328bc0cf534caab641168f5606d75e differ
diff --git a/clock/Library/Artifacts/b0/b050b81a993066132a7f23d774d46afc b/clock/Library/Artifacts/b0/b050b81a993066132a7f23d774d46afc
new file mode 100644
index 00000000..e335f4a0
Binary files /dev/null and b/clock/Library/Artifacts/b0/b050b81a993066132a7f23d774d46afc differ
diff --git a/clock/Library/Artifacts/b0/b056a021fb76e7347f7bd198eae66d1b b/clock/Library/Artifacts/b0/b056a021fb76e7347f7bd198eae66d1b
new file mode 100644
index 00000000..a2be39d1
Binary files /dev/null and b/clock/Library/Artifacts/b0/b056a021fb76e7347f7bd198eae66d1b differ
diff --git a/clock/Library/Artifacts/b0/b064320f1a2a0b9ba5b339b27a7b49f7 b/clock/Library/Artifacts/b0/b064320f1a2a0b9ba5b339b27a7b49f7
new file mode 100644
index 00000000..ad128003
Binary files /dev/null and b/clock/Library/Artifacts/b0/b064320f1a2a0b9ba5b339b27a7b49f7 differ
diff --git a/clock/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be b/clock/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be
new file mode 100644
index 00000000..10950b94
Binary files /dev/null and b/clock/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be differ
diff --git a/clock/Library/Artifacts/b0/b08babe249006fba562319547432b014 b/clock/Library/Artifacts/b0/b08babe249006fba562319547432b014
new file mode 100644
index 00000000..8ac47b5c
Binary files /dev/null and b/clock/Library/Artifacts/b0/b08babe249006fba562319547432b014 differ
diff --git a/clock/Library/Artifacts/b0/b09f690028c4eea5fb5d8d0983a6f467 b/clock/Library/Artifacts/b0/b09f690028c4eea5fb5d8d0983a6f467
new file mode 100644
index 00000000..a7a3a120
Binary files /dev/null and b/clock/Library/Artifacts/b0/b09f690028c4eea5fb5d8d0983a6f467 differ
diff --git a/clock/Library/Artifacts/b0/b0ee2c03f786b0475b73723d24f838a9 b/clock/Library/Artifacts/b0/b0ee2c03f786b0475b73723d24f838a9
new file mode 100644
index 00000000..b066e7b5
Binary files /dev/null and b/clock/Library/Artifacts/b0/b0ee2c03f786b0475b73723d24f838a9 differ
diff --git a/clock/Library/Artifacts/b0/b0fda695c176e4c176221bdfc5577af3 b/clock/Library/Artifacts/b0/b0fda695c176e4c176221bdfc5577af3
new file mode 100644
index 00000000..1f17678e
Binary files /dev/null and b/clock/Library/Artifacts/b0/b0fda695c176e4c176221bdfc5577af3 differ
diff --git a/clock/Library/Artifacts/b1/b1122c6eb0fc05f5f97c13695d79d02f b/clock/Library/Artifacts/b1/b1122c6eb0fc05f5f97c13695d79d02f
new file mode 100644
index 00000000..822d8622
Binary files /dev/null and b/clock/Library/Artifacts/b1/b1122c6eb0fc05f5f97c13695d79d02f differ
diff --git a/clock/Library/Artifacts/b1/b13a5e326b7208114af37e0362122314 b/clock/Library/Artifacts/b1/b13a5e326b7208114af37e0362122314
new file mode 100644
index 00000000..bceb7e35
Binary files /dev/null and b/clock/Library/Artifacts/b1/b13a5e326b7208114af37e0362122314 differ
diff --git a/clock/Library/Artifacts/b1/b159926bf408aee8fc881e000e1f77a5 b/clock/Library/Artifacts/b1/b159926bf408aee8fc881e000e1f77a5
new file mode 100644
index 00000000..2bc13ea4
Binary files /dev/null and b/clock/Library/Artifacts/b1/b159926bf408aee8fc881e000e1f77a5 differ
diff --git a/clock/Library/Artifacts/b1/b1d8b882578f0d9cbed899be1d3557fd b/clock/Library/Artifacts/b1/b1d8b882578f0d9cbed899be1d3557fd
new file mode 100644
index 00000000..4568b04d
Binary files /dev/null and b/clock/Library/Artifacts/b1/b1d8b882578f0d9cbed899be1d3557fd differ
diff --git a/clock/Library/Artifacts/b1/b1e877e3da2dba5c46f2d1567792681f b/clock/Library/Artifacts/b1/b1e877e3da2dba5c46f2d1567792681f
new file mode 100644
index 00000000..fa6adcb9
Binary files /dev/null and b/clock/Library/Artifacts/b1/b1e877e3da2dba5c46f2d1567792681f differ
diff --git a/clock/Library/Artifacts/b2/b20ced8b0fc79a4d868d3c8dcfacd025 b/clock/Library/Artifacts/b2/b20ced8b0fc79a4d868d3c8dcfacd025
new file mode 100644
index 00000000..f5c9c90b
Binary files /dev/null and b/clock/Library/Artifacts/b2/b20ced8b0fc79a4d868d3c8dcfacd025 differ
diff --git a/clock/Library/Artifacts/b2/b21210292f2681800f7c32ea432e8966 b/clock/Library/Artifacts/b2/b21210292f2681800f7c32ea432e8966
new file mode 100644
index 00000000..9af1c129
Binary files /dev/null and b/clock/Library/Artifacts/b2/b21210292f2681800f7c32ea432e8966 differ
diff --git a/clock/Library/Artifacts/b2/b222738e48bf277db92916329368d39a b/clock/Library/Artifacts/b2/b222738e48bf277db92916329368d39a
new file mode 100644
index 00000000..f9a62dc6
Binary files /dev/null and b/clock/Library/Artifacts/b2/b222738e48bf277db92916329368d39a differ
diff --git a/clock/Library/Artifacts/b2/b24bfc70101c093f6eba77acd2c1a261 b/clock/Library/Artifacts/b2/b24bfc70101c093f6eba77acd2c1a261
new file mode 100644
index 00000000..174925dc
Binary files /dev/null and b/clock/Library/Artifacts/b2/b24bfc70101c093f6eba77acd2c1a261 differ
diff --git a/clock/Library/Artifacts/b2/b26a9c9528b69a2495eb51328654ed7b b/clock/Library/Artifacts/b2/b26a9c9528b69a2495eb51328654ed7b
new file mode 100644
index 00000000..6ff7f3b8
Binary files /dev/null and b/clock/Library/Artifacts/b2/b26a9c9528b69a2495eb51328654ed7b differ
diff --git a/clock/Library/Artifacts/b2/b2d53af81d2c670fd0873b14d7745e2a b/clock/Library/Artifacts/b2/b2d53af81d2c670fd0873b14d7745e2a
new file mode 100644
index 00000000..cbaab1e9
Binary files /dev/null and b/clock/Library/Artifacts/b2/b2d53af81d2c670fd0873b14d7745e2a differ
diff --git a/clock/Library/Artifacts/b2/b2eedd90237426216343f8e6eee9feb7 b/clock/Library/Artifacts/b2/b2eedd90237426216343f8e6eee9feb7
new file mode 100644
index 00000000..accd1749
Binary files /dev/null and b/clock/Library/Artifacts/b2/b2eedd90237426216343f8e6eee9feb7 differ
diff --git a/clock/Library/Artifacts/b3/b35ef6b1d7bd08fa9aefc3c5e7e93dd4 b/clock/Library/Artifacts/b3/b35ef6b1d7bd08fa9aefc3c5e7e93dd4
new file mode 100644
index 00000000..6efb4a0e
Binary files /dev/null and b/clock/Library/Artifacts/b3/b35ef6b1d7bd08fa9aefc3c5e7e93dd4 differ
diff --git a/clock/Library/Artifacts/b3/b3b1c3f5f96f9395c6947701060e5bb1 b/clock/Library/Artifacts/b3/b3b1c3f5f96f9395c6947701060e5bb1
new file mode 100644
index 00000000..67fef8c9
Binary files /dev/null and b/clock/Library/Artifacts/b3/b3b1c3f5f96f9395c6947701060e5bb1 differ
diff --git a/clock/Library/Artifacts/b3/b3eb60535ee6d6990c81eed5ebb19e73 b/clock/Library/Artifacts/b3/b3eb60535ee6d6990c81eed5ebb19e73
new file mode 100644
index 00000000..373222e1
Binary files /dev/null and b/clock/Library/Artifacts/b3/b3eb60535ee6d6990c81eed5ebb19e73 differ
diff --git a/clock/Library/Artifacts/b3/b3eeb948ad3f62b0d499700223e2000a b/clock/Library/Artifacts/b3/b3eeb948ad3f62b0d499700223e2000a
new file mode 100644
index 00000000..d727329c
Binary files /dev/null and b/clock/Library/Artifacts/b3/b3eeb948ad3f62b0d499700223e2000a differ
diff --git a/clock/Library/Artifacts/b4/b4097ee2f054b38a44fc8914831548a8 b/clock/Library/Artifacts/b4/b4097ee2f054b38a44fc8914831548a8
new file mode 100644
index 00000000..4085c262
Binary files /dev/null and b/clock/Library/Artifacts/b4/b4097ee2f054b38a44fc8914831548a8 differ
diff --git a/clock/Library/Artifacts/b4/b42f63c3ed5931e22cf638a42580b626 b/clock/Library/Artifacts/b4/b42f63c3ed5931e22cf638a42580b626
new file mode 100644
index 00000000..97ced366
Binary files /dev/null and b/clock/Library/Artifacts/b4/b42f63c3ed5931e22cf638a42580b626 differ
diff --git a/clock/Library/Artifacts/b4/b4452684cb2bdbfda12f2744cfe777bc b/clock/Library/Artifacts/b4/b4452684cb2bdbfda12f2744cfe777bc
new file mode 100644
index 00000000..5f1406c2
Binary files /dev/null and b/clock/Library/Artifacts/b4/b4452684cb2bdbfda12f2744cfe777bc differ
diff --git a/clock/Library/Artifacts/b4/b47544da2d02198d2b4c7e885362e19d b/clock/Library/Artifacts/b4/b47544da2d02198d2b4c7e885362e19d
new file mode 100644
index 00000000..9f3a006b
Binary files /dev/null and b/clock/Library/Artifacts/b4/b47544da2d02198d2b4c7e885362e19d differ
diff --git a/clock/Library/Artifacts/b4/b4b7aef2330ee117399c2f4fad91a2d0 b/clock/Library/Artifacts/b4/b4b7aef2330ee117399c2f4fad91a2d0
new file mode 100644
index 00000000..286264dd
Binary files /dev/null and b/clock/Library/Artifacts/b4/b4b7aef2330ee117399c2f4fad91a2d0 differ
diff --git a/clock/Library/Artifacts/b4/b4dc65702c2cccb92e71e0daa3ab517d b/clock/Library/Artifacts/b4/b4dc65702c2cccb92e71e0daa3ab517d
new file mode 100644
index 00000000..5c0b64a3
Binary files /dev/null and b/clock/Library/Artifacts/b4/b4dc65702c2cccb92e71e0daa3ab517d differ
diff --git a/clock/Library/Artifacts/b5/b5063bd84106498f004a6823a08ec28c b/clock/Library/Artifacts/b5/b5063bd84106498f004a6823a08ec28c
new file mode 100644
index 00000000..b6b410e6
Binary files /dev/null and b/clock/Library/Artifacts/b5/b5063bd84106498f004a6823a08ec28c differ
diff --git a/clock/Library/Artifacts/b5/b52d81884cc76f118ae74d0fba4b4eea b/clock/Library/Artifacts/b5/b52d81884cc76f118ae74d0fba4b4eea
new file mode 100644
index 00000000..c8795968
Binary files /dev/null and b/clock/Library/Artifacts/b5/b52d81884cc76f118ae74d0fba4b4eea differ
diff --git a/clock/Library/Artifacts/b5/b5e3051b6ac281922145f6770fc37163 b/clock/Library/Artifacts/b5/b5e3051b6ac281922145f6770fc37163
new file mode 100644
index 00000000..90b7b869
Binary files /dev/null and b/clock/Library/Artifacts/b5/b5e3051b6ac281922145f6770fc37163 differ
diff --git a/clock/Library/Artifacts/b5/b5f40cb242f00f443662fe9b6a9b19f7 b/clock/Library/Artifacts/b5/b5f40cb242f00f443662fe9b6a9b19f7
new file mode 100644
index 00000000..5f2e2b27
Binary files /dev/null and b/clock/Library/Artifacts/b5/b5f40cb242f00f443662fe9b6a9b19f7 differ
diff --git a/clock/Library/Artifacts/b6/b6490ac94fa28bcac15533002d23d8f1 b/clock/Library/Artifacts/b6/b6490ac94fa28bcac15533002d23d8f1
new file mode 100644
index 00000000..5e6b137d
Binary files /dev/null and b/clock/Library/Artifacts/b6/b6490ac94fa28bcac15533002d23d8f1 differ
diff --git a/clock/Library/Artifacts/b6/b67a24e61f177e8d18249015067a8ab6 b/clock/Library/Artifacts/b6/b67a24e61f177e8d18249015067a8ab6
new file mode 100644
index 00000000..1af67981
Binary files /dev/null and b/clock/Library/Artifacts/b6/b67a24e61f177e8d18249015067a8ab6 differ
diff --git a/clock/Library/Artifacts/b6/b67a8215381f3b08a02d7de3990e832a b/clock/Library/Artifacts/b6/b67a8215381f3b08a02d7de3990e832a
new file mode 100644
index 00000000..62891ede
Binary files /dev/null and b/clock/Library/Artifacts/b6/b67a8215381f3b08a02d7de3990e832a differ
diff --git a/clock/Library/Artifacts/b6/b6c2a88f7065353e7e3d7c2996fc5406 b/clock/Library/Artifacts/b6/b6c2a88f7065353e7e3d7c2996fc5406
new file mode 100644
index 00000000..bcbd71ce
Binary files /dev/null and b/clock/Library/Artifacts/b6/b6c2a88f7065353e7e3d7c2996fc5406 differ
diff --git a/clock/Library/Artifacts/b6/b6ce372b8f390ef35ed851fc045f1368 b/clock/Library/Artifacts/b6/b6ce372b8f390ef35ed851fc045f1368
new file mode 100644
index 00000000..e1c53d6a
Binary files /dev/null and b/clock/Library/Artifacts/b6/b6ce372b8f390ef35ed851fc045f1368 differ
diff --git a/clock/Library/Artifacts/b7/b70147325a554290019d3a6a7bdf0949 b/clock/Library/Artifacts/b7/b70147325a554290019d3a6a7bdf0949
new file mode 100644
index 00000000..e17f5e49
Binary files /dev/null and b/clock/Library/Artifacts/b7/b70147325a554290019d3a6a7bdf0949 differ
diff --git a/clock/Library/Artifacts/b7/b71b55c431f0d4ca303fe1278298d80a b/clock/Library/Artifacts/b7/b71b55c431f0d4ca303fe1278298d80a
new file mode 100644
index 00000000..57b42419
Binary files /dev/null and b/clock/Library/Artifacts/b7/b71b55c431f0d4ca303fe1278298d80a differ
diff --git a/clock/Library/Artifacts/b7/b7334838224bcd7a56f8008ba54e48bb b/clock/Library/Artifacts/b7/b7334838224bcd7a56f8008ba54e48bb
new file mode 100644
index 00000000..6bb11cf2
Binary files /dev/null and b/clock/Library/Artifacts/b7/b7334838224bcd7a56f8008ba54e48bb differ
diff --git a/clock/Library/Artifacts/b7/b74d2ca43edbe5c9f38de2faddee604e b/clock/Library/Artifacts/b7/b74d2ca43edbe5c9f38de2faddee604e
new file mode 100644
index 00000000..f02d5835
Binary files /dev/null and b/clock/Library/Artifacts/b7/b74d2ca43edbe5c9f38de2faddee604e differ
diff --git a/clock/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb b/clock/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb
new file mode 100644
index 00000000..43174c3f
Binary files /dev/null and b/clock/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb differ
diff --git a/clock/Library/Artifacts/b7/b7c1235e76d578a7de744099117731fb b/clock/Library/Artifacts/b7/b7c1235e76d578a7de744099117731fb
new file mode 100644
index 00000000..1150edc8
Binary files /dev/null and b/clock/Library/Artifacts/b7/b7c1235e76d578a7de744099117731fb differ
diff --git a/clock/Library/Artifacts/b7/b7d6e3cc87b129c0c19062b30f842df6 b/clock/Library/Artifacts/b7/b7d6e3cc87b129c0c19062b30f842df6
new file mode 100644
index 00000000..280f3928
Binary files /dev/null and b/clock/Library/Artifacts/b7/b7d6e3cc87b129c0c19062b30f842df6 differ
diff --git a/clock/Library/Artifacts/b8/b8041f7bd21eee191980dd9f5e519aff b/clock/Library/Artifacts/b8/b8041f7bd21eee191980dd9f5e519aff
new file mode 100644
index 00000000..1083b3e2
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8041f7bd21eee191980dd9f5e519aff differ
diff --git a/clock/Library/Artifacts/b8/b81e53003a33942f4622b21e35477888 b/clock/Library/Artifacts/b8/b81e53003a33942f4622b21e35477888
new file mode 100644
index 00000000..790e9703
Binary files /dev/null and b/clock/Library/Artifacts/b8/b81e53003a33942f4622b21e35477888 differ
diff --git a/clock/Library/Artifacts/b8/b84e1feab7218e5403105a9974153bfb b/clock/Library/Artifacts/b8/b84e1feab7218e5403105a9974153bfb
new file mode 100644
index 00000000..dadd7584
Binary files /dev/null and b/clock/Library/Artifacts/b8/b84e1feab7218e5403105a9974153bfb differ
diff --git a/clock/Library/Artifacts/b8/b886b19637bd6d161ae284509b0689d7 b/clock/Library/Artifacts/b8/b886b19637bd6d161ae284509b0689d7
new file mode 100644
index 00000000..732af089
Binary files /dev/null and b/clock/Library/Artifacts/b8/b886b19637bd6d161ae284509b0689d7 differ
diff --git a/clock/Library/Artifacts/b8/b89edc64422d9dfde5c6c5eda089a204 b/clock/Library/Artifacts/b8/b89edc64422d9dfde5c6c5eda089a204
new file mode 100644
index 00000000..0c30c809
Binary files /dev/null and b/clock/Library/Artifacts/b8/b89edc64422d9dfde5c6c5eda089a204 differ
diff --git a/clock/Library/Artifacts/b8/b8aaac0250bbbbe471f4db1f79214a0f b/clock/Library/Artifacts/b8/b8aaac0250bbbbe471f4db1f79214a0f
new file mode 100644
index 00000000..054b6de2
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8aaac0250bbbbe471f4db1f79214a0f differ
diff --git a/clock/Library/Artifacts/b8/b8b2360614249041d35cc3fe8f4c87ea b/clock/Library/Artifacts/b8/b8b2360614249041d35cc3fe8f4c87ea
new file mode 100644
index 00000000..be9416ac
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8b2360614249041d35cc3fe8f4c87ea differ
diff --git a/clock/Library/Artifacts/b8/b8ced4d0b2aacb77831d52ed263334be b/clock/Library/Artifacts/b8/b8ced4d0b2aacb77831d52ed263334be
new file mode 100644
index 00000000..89d00002
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8ced4d0b2aacb77831d52ed263334be differ
diff --git a/clock/Library/Artifacts/b8/b8d8c2118de6a342ab5fa641a19c3490 b/clock/Library/Artifacts/b8/b8d8c2118de6a342ab5fa641a19c3490
new file mode 100644
index 00000000..393f6efe
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8d8c2118de6a342ab5fa641a19c3490 differ
diff --git a/clock/Library/Artifacts/b8/b8e8c05d0d49c58de18374b3a497248b b/clock/Library/Artifacts/b8/b8e8c05d0d49c58de18374b3a497248b
new file mode 100644
index 00000000..e1922f0c
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8e8c05d0d49c58de18374b3a497248b differ
diff --git a/clock/Library/Artifacts/b8/b8fe05ba31bef49597e07dcca2627e0a b/clock/Library/Artifacts/b8/b8fe05ba31bef49597e07dcca2627e0a
new file mode 100644
index 00000000..878f535a
Binary files /dev/null and b/clock/Library/Artifacts/b8/b8fe05ba31bef49597e07dcca2627e0a differ
diff --git a/clock/Library/Artifacts/b9/b903c62c7a9bb5d5b20768f6a60213ec b/clock/Library/Artifacts/b9/b903c62c7a9bb5d5b20768f6a60213ec
new file mode 100644
index 00000000..0499dc9c
Binary files /dev/null and b/clock/Library/Artifacts/b9/b903c62c7a9bb5d5b20768f6a60213ec differ
diff --git a/clock/Library/Artifacts/b9/b95b0145b3799f4e263510b0fd1c3b38 b/clock/Library/Artifacts/b9/b95b0145b3799f4e263510b0fd1c3b38
new file mode 100644
index 00000000..7bd417b6
Binary files /dev/null and b/clock/Library/Artifacts/b9/b95b0145b3799f4e263510b0fd1c3b38 differ
diff --git a/clock/Library/Artifacts/b9/b974c93676e5405643557a73c0c20ec6 b/clock/Library/Artifacts/b9/b974c93676e5405643557a73c0c20ec6
new file mode 100644
index 00000000..0bfa83b1
Binary files /dev/null and b/clock/Library/Artifacts/b9/b974c93676e5405643557a73c0c20ec6 differ
diff --git a/clock/Library/Artifacts/b9/b979a1d8b143fa558129eb071d23c579 b/clock/Library/Artifacts/b9/b979a1d8b143fa558129eb071d23c579
new file mode 100644
index 00000000..b83d7c9e
Binary files /dev/null and b/clock/Library/Artifacts/b9/b979a1d8b143fa558129eb071d23c579 differ
diff --git a/clock/Library/Artifacts/b9/b9888c41db9d61d02b3758cb3c92720a b/clock/Library/Artifacts/b9/b9888c41db9d61d02b3758cb3c92720a
new file mode 100644
index 00000000..a10a3b05
Binary files /dev/null and b/clock/Library/Artifacts/b9/b9888c41db9d61d02b3758cb3c92720a differ
diff --git a/clock/Library/Artifacts/b9/b9c435eea0694727dbbd821adec004be b/clock/Library/Artifacts/b9/b9c435eea0694727dbbd821adec004be
new file mode 100644
index 00000000..b9f5d9f3
Binary files /dev/null and b/clock/Library/Artifacts/b9/b9c435eea0694727dbbd821adec004be differ
diff --git a/clock/Library/Artifacts/b9/b9d4f7529b211b2396abaeca5ce116f1 b/clock/Library/Artifacts/b9/b9d4f7529b211b2396abaeca5ce116f1
new file mode 100644
index 00000000..8933f54a
Binary files /dev/null and b/clock/Library/Artifacts/b9/b9d4f7529b211b2396abaeca5ce116f1 differ
diff --git a/clock/Library/Artifacts/b9/b9f64d315caffbf913365ec0aa9db228 b/clock/Library/Artifacts/b9/b9f64d315caffbf913365ec0aa9db228
new file mode 100644
index 00000000..5788281a
Binary files /dev/null and b/clock/Library/Artifacts/b9/b9f64d315caffbf913365ec0aa9db228 differ
diff --git a/clock/Library/Artifacts/ba/ba695e50005c90e6f7cee8d51038f2a4 b/clock/Library/Artifacts/ba/ba695e50005c90e6f7cee8d51038f2a4
new file mode 100644
index 00000000..b5adf7f6
Binary files /dev/null and b/clock/Library/Artifacts/ba/ba695e50005c90e6f7cee8d51038f2a4 differ
diff --git a/clock/Library/Artifacts/bb/bb08dd988e0f3775f6134a10accf232c b/clock/Library/Artifacts/bb/bb08dd988e0f3775f6134a10accf232c
new file mode 100644
index 00000000..608ce5fb
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb08dd988e0f3775f6134a10accf232c differ
diff --git a/clock/Library/Artifacts/bb/bb0ac3050d7c353564dd6d0f1898e3a3 b/clock/Library/Artifacts/bb/bb0ac3050d7c353564dd6d0f1898e3a3
new file mode 100644
index 00000000..c9fce9e0
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb0ac3050d7c353564dd6d0f1898e3a3 differ
diff --git a/clock/Library/Artifacts/bb/bb1e5f5fd3608cdf8c46d9ade7fcbc58 b/clock/Library/Artifacts/bb/bb1e5f5fd3608cdf8c46d9ade7fcbc58
new file mode 100644
index 00000000..59afc53f
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb1e5f5fd3608cdf8c46d9ade7fcbc58 differ
diff --git a/clock/Library/Artifacts/bb/bb26e4e1de701998ebb7b1c5e9639334 b/clock/Library/Artifacts/bb/bb26e4e1de701998ebb7b1c5e9639334
new file mode 100644
index 00000000..b0f35be7
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb26e4e1de701998ebb7b1c5e9639334 differ
diff --git a/clock/Library/Artifacts/bb/bb27d6081b45229fd51bbb3d096fb817 b/clock/Library/Artifacts/bb/bb27d6081b45229fd51bbb3d096fb817
new file mode 100644
index 00000000..7a1de11f
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb27d6081b45229fd51bbb3d096fb817 differ
diff --git a/clock/Library/Artifacts/bb/bb5914454fb50606b7d058a6f2adcce4 b/clock/Library/Artifacts/bb/bb5914454fb50606b7d058a6f2adcce4
new file mode 100644
index 00000000..9df423aa
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb5914454fb50606b7d058a6f2adcce4 differ
diff --git a/clock/Library/Artifacts/bb/bb8c9576fdd256846209c75de25c97a4 b/clock/Library/Artifacts/bb/bb8c9576fdd256846209c75de25c97a4
new file mode 100644
index 00000000..65e18969
Binary files /dev/null and b/clock/Library/Artifacts/bb/bb8c9576fdd256846209c75de25c97a4 differ
diff --git a/clock/Library/Artifacts/bb/bba3c58ae1a18dc8ce70d6416fd661fe b/clock/Library/Artifacts/bb/bba3c58ae1a18dc8ce70d6416fd661fe
new file mode 100644
index 00000000..40adcc42
Binary files /dev/null and b/clock/Library/Artifacts/bb/bba3c58ae1a18dc8ce70d6416fd661fe differ
diff --git a/clock/Library/Artifacts/bb/bbc8a4df6b156da492e5aaaac0bb9d34 b/clock/Library/Artifacts/bb/bbc8a4df6b156da492e5aaaac0bb9d34
new file mode 100644
index 00000000..72db662c
Binary files /dev/null and b/clock/Library/Artifacts/bb/bbc8a4df6b156da492e5aaaac0bb9d34 differ
diff --git a/clock/Library/Artifacts/bc/bc726ceae0776861821076de0ef14b03 b/clock/Library/Artifacts/bc/bc726ceae0776861821076de0ef14b03
new file mode 100644
index 00000000..99696147
Binary files /dev/null and b/clock/Library/Artifacts/bc/bc726ceae0776861821076de0ef14b03 differ
diff --git a/clock/Library/Artifacts/bc/bc81a08df662d5ae06f683b147c5d41b b/clock/Library/Artifacts/bc/bc81a08df662d5ae06f683b147c5d41b
new file mode 100644
index 00000000..4c9f1088
Binary files /dev/null and b/clock/Library/Artifacts/bc/bc81a08df662d5ae06f683b147c5d41b differ
diff --git a/clock/Library/Artifacts/bc/bc8b4817e1c56355a651d6408e88cf2f b/clock/Library/Artifacts/bc/bc8b4817e1c56355a651d6408e88cf2f
new file mode 100644
index 00000000..c6732587
Binary files /dev/null and b/clock/Library/Artifacts/bc/bc8b4817e1c56355a651d6408e88cf2f differ
diff --git a/clock/Library/Artifacts/bc/bcd9614c92487bb03bf2547d0077846f b/clock/Library/Artifacts/bc/bcd9614c92487bb03bf2547d0077846f
new file mode 100644
index 00000000..3b8d32c2
Binary files /dev/null and b/clock/Library/Artifacts/bc/bcd9614c92487bb03bf2547d0077846f differ
diff --git a/clock/Library/Artifacts/bd/bd0e7f71845a2bc7705f5b0e3a31fb4f b/clock/Library/Artifacts/bd/bd0e7f71845a2bc7705f5b0e3a31fb4f
new file mode 100644
index 00000000..859e6c0c
Binary files /dev/null and b/clock/Library/Artifacts/bd/bd0e7f71845a2bc7705f5b0e3a31fb4f differ
diff --git a/clock/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d b/clock/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d
new file mode 100644
index 00000000..9be96ffb
Binary files /dev/null and b/clock/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d differ
diff --git a/clock/Library/Artifacts/bd/bd6cff8f1e5dda16310e30d7cc4db8fc b/clock/Library/Artifacts/bd/bd6cff8f1e5dda16310e30d7cc4db8fc
new file mode 100644
index 00000000..dd60da6b
Binary files /dev/null and b/clock/Library/Artifacts/bd/bd6cff8f1e5dda16310e30d7cc4db8fc differ
diff --git a/clock/Library/Artifacts/bd/bd6fc79ed7e797aff61ef8a5608c1e44 b/clock/Library/Artifacts/bd/bd6fc79ed7e797aff61ef8a5608c1e44
new file mode 100644
index 00000000..cd884a81
Binary files /dev/null and b/clock/Library/Artifacts/bd/bd6fc79ed7e797aff61ef8a5608c1e44 differ
diff --git a/clock/Library/Artifacts/bd/bdd7d63937af367061339119784eb4e4 b/clock/Library/Artifacts/bd/bdd7d63937af367061339119784eb4e4
new file mode 100644
index 00000000..f4b910cf
Binary files /dev/null and b/clock/Library/Artifacts/bd/bdd7d63937af367061339119784eb4e4 differ
diff --git a/clock/Library/Artifacts/be/be153d10c829abc3964c17ad500ec21c b/clock/Library/Artifacts/be/be153d10c829abc3964c17ad500ec21c
new file mode 100644
index 00000000..8b0428e6
Binary files /dev/null and b/clock/Library/Artifacts/be/be153d10c829abc3964c17ad500ec21c differ
diff --git a/clock/Library/Artifacts/be/be1fd266060de039cb0f677c8b629e38 b/clock/Library/Artifacts/be/be1fd266060de039cb0f677c8b629e38
new file mode 100644
index 00000000..7665b638
Binary files /dev/null and b/clock/Library/Artifacts/be/be1fd266060de039cb0f677c8b629e38 differ
diff --git a/clock/Library/Artifacts/be/be6f929cb426732b837b3e227df90fbf b/clock/Library/Artifacts/be/be6f929cb426732b837b3e227df90fbf
new file mode 100644
index 00000000..cfe8c0ea
Binary files /dev/null and b/clock/Library/Artifacts/be/be6f929cb426732b837b3e227df90fbf differ
diff --git a/clock/Library/Artifacts/be/be9615a2c657eb67e3e7cbf94be7d685 b/clock/Library/Artifacts/be/be9615a2c657eb67e3e7cbf94be7d685
new file mode 100644
index 00000000..2ac58f8c
Binary files /dev/null and b/clock/Library/Artifacts/be/be9615a2c657eb67e3e7cbf94be7d685 differ
diff --git a/clock/Library/Artifacts/be/beb8f555f48dd334bc88ca57dfffff4a b/clock/Library/Artifacts/be/beb8f555f48dd334bc88ca57dfffff4a
new file mode 100644
index 00000000..9badabcd
Binary files /dev/null and b/clock/Library/Artifacts/be/beb8f555f48dd334bc88ca57dfffff4a differ
diff --git a/clock/Library/Artifacts/bf/bf09da3c16a809b25486e33fbc91df21 b/clock/Library/Artifacts/bf/bf09da3c16a809b25486e33fbc91df21
new file mode 100644
index 00000000..d1cd28ad
Binary files /dev/null and b/clock/Library/Artifacts/bf/bf09da3c16a809b25486e33fbc91df21 differ
diff --git a/clock/Library/Artifacts/bf/bf36345bbacf92b9d7aa8c87cf88d876 b/clock/Library/Artifacts/bf/bf36345bbacf92b9d7aa8c87cf88d876
new file mode 100644
index 00000000..a3b83106
Binary files /dev/null and b/clock/Library/Artifacts/bf/bf36345bbacf92b9d7aa8c87cf88d876 differ
diff --git a/clock/Library/Artifacts/bf/bf5eb9cf57592504a50ce0a6ae9179e8 b/clock/Library/Artifacts/bf/bf5eb9cf57592504a50ce0a6ae9179e8
new file mode 100644
index 00000000..c0d7acab
Binary files /dev/null and b/clock/Library/Artifacts/bf/bf5eb9cf57592504a50ce0a6ae9179e8 differ
diff --git a/clock/Library/Artifacts/bf/bf9549878f86621baf9f0cd1172df500 b/clock/Library/Artifacts/bf/bf9549878f86621baf9f0cd1172df500
new file mode 100644
index 00000000..0a620488
Binary files /dev/null and b/clock/Library/Artifacts/bf/bf9549878f86621baf9f0cd1172df500 differ
diff --git a/clock/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 b/clock/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288
new file mode 100644
index 00000000..a14a5f67
Binary files /dev/null and b/clock/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 differ
diff --git a/clock/Library/Artifacts/bf/bfb2791aec55fb7fab0b100047d103e9 b/clock/Library/Artifacts/bf/bfb2791aec55fb7fab0b100047d103e9
new file mode 100644
index 00000000..64fc6537
Binary files /dev/null and b/clock/Library/Artifacts/bf/bfb2791aec55fb7fab0b100047d103e9 differ
diff --git a/clock/Library/Artifacts/bf/bfb2e60f4460d1a231616e609a3c4f0c b/clock/Library/Artifacts/bf/bfb2e60f4460d1a231616e609a3c4f0c
new file mode 100644
index 00000000..892a17d7
Binary files /dev/null and b/clock/Library/Artifacts/bf/bfb2e60f4460d1a231616e609a3c4f0c differ
diff --git a/clock/Library/Artifacts/bf/bfcdfd64ac0d6c2a2058652a3ea61f7b b/clock/Library/Artifacts/bf/bfcdfd64ac0d6c2a2058652a3ea61f7b
new file mode 100644
index 00000000..c3fd956d
Binary files /dev/null and b/clock/Library/Artifacts/bf/bfcdfd64ac0d6c2a2058652a3ea61f7b differ
diff --git a/clock/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 b/clock/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24
new file mode 100644
index 00000000..e7a06e04
Binary files /dev/null and b/clock/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 differ
diff --git a/clock/Library/Artifacts/bf/bff86daef6b2c63405ac8bcbe9eb80eb b/clock/Library/Artifacts/bf/bff86daef6b2c63405ac8bcbe9eb80eb
new file mode 100644
index 00000000..bc0d98a6
Binary files /dev/null and b/clock/Library/Artifacts/bf/bff86daef6b2c63405ac8bcbe9eb80eb differ
diff --git a/clock/Library/Artifacts/c0/c01d2bf7bb930dd03c4a6223e19d8fae b/clock/Library/Artifacts/c0/c01d2bf7bb930dd03c4a6223e19d8fae
new file mode 100644
index 00000000..13cf112e
Binary files /dev/null and b/clock/Library/Artifacts/c0/c01d2bf7bb930dd03c4a6223e19d8fae differ
diff --git a/clock/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 b/clock/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204
new file mode 100644
index 00000000..6cea4ef0
Binary files /dev/null and b/clock/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 differ
diff --git a/clock/Library/Artifacts/c0/c04841462e76dbfaf75d2c4b0038b184 b/clock/Library/Artifacts/c0/c04841462e76dbfaf75d2c4b0038b184
new file mode 100644
index 00000000..834ce112
Binary files /dev/null and b/clock/Library/Artifacts/c0/c04841462e76dbfaf75d2c4b0038b184 differ
diff --git a/clock/Library/Artifacts/c0/c048f2623cfb3878cfd87024310f1eb7 b/clock/Library/Artifacts/c0/c048f2623cfb3878cfd87024310f1eb7
new file mode 100644
index 00000000..828005b3
Binary files /dev/null and b/clock/Library/Artifacts/c0/c048f2623cfb3878cfd87024310f1eb7 differ
diff --git a/clock/Library/Artifacts/c0/c07b20a5c9426250df273cb964c76e37 b/clock/Library/Artifacts/c0/c07b20a5c9426250df273cb964c76e37
new file mode 100644
index 00000000..9c5b5985
Binary files /dev/null and b/clock/Library/Artifacts/c0/c07b20a5c9426250df273cb964c76e37 differ
diff --git a/clock/Library/Artifacts/c0/c07ff2d27868698f0affb50c9da87544 b/clock/Library/Artifacts/c0/c07ff2d27868698f0affb50c9da87544
new file mode 100644
index 00000000..e271c4f5
Binary files /dev/null and b/clock/Library/Artifacts/c0/c07ff2d27868698f0affb50c9da87544 differ
diff --git a/clock/Library/Artifacts/c0/c09f03f7feb55ac2351681e279fc3925 b/clock/Library/Artifacts/c0/c09f03f7feb55ac2351681e279fc3925
new file mode 100644
index 00000000..47426542
Binary files /dev/null and b/clock/Library/Artifacts/c0/c09f03f7feb55ac2351681e279fc3925 differ
diff --git a/clock/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c b/clock/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c
new file mode 100644
index 00000000..4888b58c
Binary files /dev/null and b/clock/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c differ
diff --git a/clock/Library/Artifacts/c0/c0fc1646d5a7a7b2576d50dd24472503 b/clock/Library/Artifacts/c0/c0fc1646d5a7a7b2576d50dd24472503
new file mode 100644
index 00000000..373a4727
Binary files /dev/null and b/clock/Library/Artifacts/c0/c0fc1646d5a7a7b2576d50dd24472503 differ
diff --git a/clock/Library/Artifacts/c1/c17a3cd34e6d45414773449e3b45d119 b/clock/Library/Artifacts/c1/c17a3cd34e6d45414773449e3b45d119
new file mode 100644
index 00000000..e4506918
Binary files /dev/null and b/clock/Library/Artifacts/c1/c17a3cd34e6d45414773449e3b45d119 differ
diff --git a/clock/Library/Artifacts/c1/c1dd78d29c2f737ee976e3b2de4e6147 b/clock/Library/Artifacts/c1/c1dd78d29c2f737ee976e3b2de4e6147
new file mode 100644
index 00000000..3467c4cc
Binary files /dev/null and b/clock/Library/Artifacts/c1/c1dd78d29c2f737ee976e3b2de4e6147 differ
diff --git a/clock/Library/Artifacts/c1/c1e1890f661fe346e963bb70a1d53d02 b/clock/Library/Artifacts/c1/c1e1890f661fe346e963bb70a1d53d02
new file mode 100644
index 00000000..4a4ca41e
Binary files /dev/null and b/clock/Library/Artifacts/c1/c1e1890f661fe346e963bb70a1d53d02 differ
diff --git a/clock/Library/Artifacts/c2/c2391c181699f8620d4bcea8e0e120b5 b/clock/Library/Artifacts/c2/c2391c181699f8620d4bcea8e0e120b5
new file mode 100644
index 00000000..77924903
Binary files /dev/null and b/clock/Library/Artifacts/c2/c2391c181699f8620d4bcea8e0e120b5 differ
diff --git a/clock/Library/Artifacts/c2/c259798356833137dd7e42def1aa6167 b/clock/Library/Artifacts/c2/c259798356833137dd7e42def1aa6167
new file mode 100644
index 00000000..b9677b4d
Binary files /dev/null and b/clock/Library/Artifacts/c2/c259798356833137dd7e42def1aa6167 differ
diff --git a/clock/Library/Artifacts/c2/c25ab474b0b16846ef137f7de7ff7458 b/clock/Library/Artifacts/c2/c25ab474b0b16846ef137f7de7ff7458
new file mode 100644
index 00000000..746b5e5f
Binary files /dev/null and b/clock/Library/Artifacts/c2/c25ab474b0b16846ef137f7de7ff7458 differ
diff --git a/clock/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 b/clock/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2
new file mode 100644
index 00000000..5d66413e
Binary files /dev/null and b/clock/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 differ
diff --git a/clock/Library/Artifacts/c2/c26a3c42ba120f5c6e0159f0b4d65803 b/clock/Library/Artifacts/c2/c26a3c42ba120f5c6e0159f0b4d65803
new file mode 100644
index 00000000..d0a8eb0c
Binary files /dev/null and b/clock/Library/Artifacts/c2/c26a3c42ba120f5c6e0159f0b4d65803 differ
diff --git a/clock/Library/Artifacts/c2/c298fbf01e65af189389fc10a76493ba b/clock/Library/Artifacts/c2/c298fbf01e65af189389fc10a76493ba
new file mode 100644
index 00000000..b68be17a
Binary files /dev/null and b/clock/Library/Artifacts/c2/c298fbf01e65af189389fc10a76493ba differ
diff --git a/clock/Library/Artifacts/c2/c2d5e2b84a83bba92ddb08895c5af180 b/clock/Library/Artifacts/c2/c2d5e2b84a83bba92ddb08895c5af180
new file mode 100644
index 00000000..6ed63ba6
Binary files /dev/null and b/clock/Library/Artifacts/c2/c2d5e2b84a83bba92ddb08895c5af180 differ
diff --git a/clock/Library/Artifacts/c2/c2e44014197c6cf1e18f30f86396c896 b/clock/Library/Artifacts/c2/c2e44014197c6cf1e18f30f86396c896
new file mode 100644
index 00000000..823530fb
Binary files /dev/null and b/clock/Library/Artifacts/c2/c2e44014197c6cf1e18f30f86396c896 differ
diff --git a/clock/Library/Artifacts/c3/c3163e9367b5304718c60c47727ec984 b/clock/Library/Artifacts/c3/c3163e9367b5304718c60c47727ec984
new file mode 100644
index 00000000..6a4641d1
Binary files /dev/null and b/clock/Library/Artifacts/c3/c3163e9367b5304718c60c47727ec984 differ
diff --git a/clock/Library/Artifacts/c3/c3181cf47327f1d6a23e4ce4b78ef88e b/clock/Library/Artifacts/c3/c3181cf47327f1d6a23e4ce4b78ef88e
new file mode 100644
index 00000000..8520adb0
Binary files /dev/null and b/clock/Library/Artifacts/c3/c3181cf47327f1d6a23e4ce4b78ef88e differ
diff --git a/clock/Library/Artifacts/c3/c338ef584974d6f38e6307de5f55de79 b/clock/Library/Artifacts/c3/c338ef584974d6f38e6307de5f55de79
new file mode 100644
index 00000000..e6efdb75
Binary files /dev/null and b/clock/Library/Artifacts/c3/c338ef584974d6f38e6307de5f55de79 differ
diff --git a/clock/Library/Artifacts/c3/c39779caa1f7580bf827b986c2465d24 b/clock/Library/Artifacts/c3/c39779caa1f7580bf827b986c2465d24
new file mode 100644
index 00000000..d1514642
Binary files /dev/null and b/clock/Library/Artifacts/c3/c39779caa1f7580bf827b986c2465d24 differ
diff --git a/clock/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 b/clock/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4
new file mode 100644
index 00000000..66e09221
Binary files /dev/null and b/clock/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 differ
diff --git a/clock/Library/Artifacts/c4/c41daf4d85ccec2d772c64438bb6a4c3 b/clock/Library/Artifacts/c4/c41daf4d85ccec2d772c64438bb6a4c3
new file mode 100644
index 00000000..96c2d56a
Binary files /dev/null and b/clock/Library/Artifacts/c4/c41daf4d85ccec2d772c64438bb6a4c3 differ
diff --git a/clock/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f b/clock/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f
new file mode 100644
index 00000000..5da5782a
Binary files /dev/null and b/clock/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f differ
diff --git a/clock/Library/Artifacts/c4/c4490cab8a70695653506c2be83ae687 b/clock/Library/Artifacts/c4/c4490cab8a70695653506c2be83ae687
new file mode 100644
index 00000000..2931c806
Binary files /dev/null and b/clock/Library/Artifacts/c4/c4490cab8a70695653506c2be83ae687 differ
diff --git a/clock/Library/Artifacts/c4/c484ad6823b25e7233f1b0c6e54ebad1 b/clock/Library/Artifacts/c4/c484ad6823b25e7233f1b0c6e54ebad1
new file mode 100644
index 00000000..de704a8e
Binary files /dev/null and b/clock/Library/Artifacts/c4/c484ad6823b25e7233f1b0c6e54ebad1 differ
diff --git a/clock/Library/Artifacts/c4/c48e0e72900367adae53230889fc9ba7 b/clock/Library/Artifacts/c4/c48e0e72900367adae53230889fc9ba7
new file mode 100644
index 00000000..ac642a38
Binary files /dev/null and b/clock/Library/Artifacts/c4/c48e0e72900367adae53230889fc9ba7 differ
diff --git a/clock/Library/Artifacts/c5/c5378081cec0b3c00635656fcba22ea7 b/clock/Library/Artifacts/c5/c5378081cec0b3c00635656fcba22ea7
new file mode 100644
index 00000000..99b5f507
Binary files /dev/null and b/clock/Library/Artifacts/c5/c5378081cec0b3c00635656fcba22ea7 differ
diff --git a/clock/Library/Artifacts/c5/c55904447f28320d076ca089686e3735 b/clock/Library/Artifacts/c5/c55904447f28320d076ca089686e3735
new file mode 100644
index 00000000..6c27c09e
Binary files /dev/null and b/clock/Library/Artifacts/c5/c55904447f28320d076ca089686e3735 differ
diff --git a/clock/Library/Artifacts/c5/c57eb5ef013d169e012972d05a2d26f3 b/clock/Library/Artifacts/c5/c57eb5ef013d169e012972d05a2d26f3
new file mode 100644
index 00000000..a99e173c
Binary files /dev/null and b/clock/Library/Artifacts/c5/c57eb5ef013d169e012972d05a2d26f3 differ
diff --git a/clock/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 b/clock/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148
new file mode 100644
index 00000000..2751c5ce
Binary files /dev/null and b/clock/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 differ
diff --git a/clock/Library/Artifacts/c6/c61414b478f817afa97fb2c2ea8fe48f b/clock/Library/Artifacts/c6/c61414b478f817afa97fb2c2ea8fe48f
new file mode 100644
index 00000000..7c3ab0c3
Binary files /dev/null and b/clock/Library/Artifacts/c6/c61414b478f817afa97fb2c2ea8fe48f differ
diff --git a/clock/Library/Artifacts/c6/c63263d88608337cb82e5eb5cee5364a b/clock/Library/Artifacts/c6/c63263d88608337cb82e5eb5cee5364a
new file mode 100644
index 00000000..db16b2e8
Binary files /dev/null and b/clock/Library/Artifacts/c6/c63263d88608337cb82e5eb5cee5364a differ
diff --git a/clock/Library/Artifacts/c6/c6408e6895848df295e64698067bafce b/clock/Library/Artifacts/c6/c6408e6895848df295e64698067bafce
new file mode 100644
index 00000000..84ad15c4
Binary files /dev/null and b/clock/Library/Artifacts/c6/c6408e6895848df295e64698067bafce differ
diff --git a/clock/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 b/clock/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63
new file mode 100644
index 00000000..542f9211
Binary files /dev/null and b/clock/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 differ
diff --git a/clock/Library/Artifacts/c6/c67363d3c0b6e202f2a03267404f1fb8 b/clock/Library/Artifacts/c6/c67363d3c0b6e202f2a03267404f1fb8
new file mode 100644
index 00000000..c89505e1
Binary files /dev/null and b/clock/Library/Artifacts/c6/c67363d3c0b6e202f2a03267404f1fb8 differ
diff --git a/clock/Library/Artifacts/c6/c687915243e44be481996fe1fcd4a359 b/clock/Library/Artifacts/c6/c687915243e44be481996fe1fcd4a359
new file mode 100644
index 00000000..39e2c066
Binary files /dev/null and b/clock/Library/Artifacts/c6/c687915243e44be481996fe1fcd4a359 differ
diff --git a/clock/Library/Artifacts/c6/c6a6e31e8766ec4a5d85d0346d5cd0aa b/clock/Library/Artifacts/c6/c6a6e31e8766ec4a5d85d0346d5cd0aa
new file mode 100644
index 00000000..cb939eab
Binary files /dev/null and b/clock/Library/Artifacts/c6/c6a6e31e8766ec4a5d85d0346d5cd0aa differ
diff --git a/clock/Library/Artifacts/c6/c6bda5ec9c33558c7e6a08502ee35bcf b/clock/Library/Artifacts/c6/c6bda5ec9c33558c7e6a08502ee35bcf
new file mode 100644
index 00000000..a99abb04
Binary files /dev/null and b/clock/Library/Artifacts/c6/c6bda5ec9c33558c7e6a08502ee35bcf differ
diff --git a/clock/Library/Artifacts/c6/c6c51ddf16d24842895275f7bb23cfcb b/clock/Library/Artifacts/c6/c6c51ddf16d24842895275f7bb23cfcb
new file mode 100644
index 00000000..738377ea
Binary files /dev/null and b/clock/Library/Artifacts/c6/c6c51ddf16d24842895275f7bb23cfcb differ
diff --git a/clock/Library/Artifacts/c7/c707c8d9194452599b544a42348019d1 b/clock/Library/Artifacts/c7/c707c8d9194452599b544a42348019d1
new file mode 100644
index 00000000..0dddd1c8
Binary files /dev/null and b/clock/Library/Artifacts/c7/c707c8d9194452599b544a42348019d1 differ
diff --git a/clock/Library/Artifacts/c7/c7527538f19ee986ae10f352742f37c0 b/clock/Library/Artifacts/c7/c7527538f19ee986ae10f352742f37c0
new file mode 100644
index 00000000..f0758331
Binary files /dev/null and b/clock/Library/Artifacts/c7/c7527538f19ee986ae10f352742f37c0 differ
diff --git a/clock/Library/Artifacts/c7/c753fe79332118a3a26d31523549e50f b/clock/Library/Artifacts/c7/c753fe79332118a3a26d31523549e50f
new file mode 100644
index 00000000..a9edc4ea
Binary files /dev/null and b/clock/Library/Artifacts/c7/c753fe79332118a3a26d31523549e50f differ
diff --git a/clock/Library/Artifacts/c7/c79b5af2f5461fb5ead892846992d321 b/clock/Library/Artifacts/c7/c79b5af2f5461fb5ead892846992d321
new file mode 100644
index 00000000..6cc6dadf
Binary files /dev/null and b/clock/Library/Artifacts/c7/c79b5af2f5461fb5ead892846992d321 differ
diff --git a/clock/Library/Artifacts/c7/c7b746e12dc7c9bb1949135db80d0bb2 b/clock/Library/Artifacts/c7/c7b746e12dc7c9bb1949135db80d0bb2
new file mode 100644
index 00000000..c2508059
Binary files /dev/null and b/clock/Library/Artifacts/c7/c7b746e12dc7c9bb1949135db80d0bb2 differ
diff --git a/clock/Library/Artifacts/c7/c7b981b060c67b639af083577bc6e02e b/clock/Library/Artifacts/c7/c7b981b060c67b639af083577bc6e02e
new file mode 100644
index 00000000..9f61e89b
Binary files /dev/null and b/clock/Library/Artifacts/c7/c7b981b060c67b639af083577bc6e02e differ
diff --git a/clock/Library/Artifacts/c7/c7c1713f9e86340b67a749132cdef71c b/clock/Library/Artifacts/c7/c7c1713f9e86340b67a749132cdef71c
new file mode 100644
index 00000000..a857f818
Binary files /dev/null and b/clock/Library/Artifacts/c7/c7c1713f9e86340b67a749132cdef71c differ
diff --git a/clock/Library/Artifacts/c7/c7c3d71405630c3fcce3faed766506cc b/clock/Library/Artifacts/c7/c7c3d71405630c3fcce3faed766506cc
new file mode 100644
index 00000000..af1deaf9
Binary files /dev/null and b/clock/Library/Artifacts/c7/c7c3d71405630c3fcce3faed766506cc differ
diff --git a/clock/Library/Artifacts/c8/c82fdf3e45a81f8b6edd337a3f11106a b/clock/Library/Artifacts/c8/c82fdf3e45a81f8b6edd337a3f11106a
new file mode 100644
index 00000000..9021dda3
Binary files /dev/null and b/clock/Library/Artifacts/c8/c82fdf3e45a81f8b6edd337a3f11106a differ
diff --git a/clock/Library/Artifacts/c8/c84344b929603a5056ef45dac447e6a4 b/clock/Library/Artifacts/c8/c84344b929603a5056ef45dac447e6a4
new file mode 100644
index 00000000..6e761daa
Binary files /dev/null and b/clock/Library/Artifacts/c8/c84344b929603a5056ef45dac447e6a4 differ
diff --git a/clock/Library/Artifacts/c8/c86776918be37e3330c1b05081b37035 b/clock/Library/Artifacts/c8/c86776918be37e3330c1b05081b37035
new file mode 100644
index 00000000..dde01f7d
Binary files /dev/null and b/clock/Library/Artifacts/c8/c86776918be37e3330c1b05081b37035 differ
diff --git a/clock/Library/Artifacts/c9/c9515859b3246e8961580d201b379467 b/clock/Library/Artifacts/c9/c9515859b3246e8961580d201b379467
new file mode 100644
index 00000000..34a5cd8b
Binary files /dev/null and b/clock/Library/Artifacts/c9/c9515859b3246e8961580d201b379467 differ
diff --git a/clock/Library/Artifacts/c9/c95e0a845f29964bb47c8402a55b5628 b/clock/Library/Artifacts/c9/c95e0a845f29964bb47c8402a55b5628
new file mode 100644
index 00000000..d8b116cc
Binary files /dev/null and b/clock/Library/Artifacts/c9/c95e0a845f29964bb47c8402a55b5628 differ
diff --git a/clock/Library/Artifacts/c9/c994b244535b9dd46b9b5db2cddfd79b b/clock/Library/Artifacts/c9/c994b244535b9dd46b9b5db2cddfd79b
new file mode 100644
index 00000000..bc6146b6
Binary files /dev/null and b/clock/Library/Artifacts/c9/c994b244535b9dd46b9b5db2cddfd79b differ
diff --git a/clock/Library/Artifacts/c9/c9a284aa07aaa4af37fa2a6ee47241b2 b/clock/Library/Artifacts/c9/c9a284aa07aaa4af37fa2a6ee47241b2
new file mode 100644
index 00000000..a7c4126b
Binary files /dev/null and b/clock/Library/Artifacts/c9/c9a284aa07aaa4af37fa2a6ee47241b2 differ
diff --git a/clock/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a b/clock/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a
new file mode 100644
index 00000000..68daecdc
Binary files /dev/null and b/clock/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a differ
diff --git a/clock/Library/Artifacts/ca/ca0dfdce9a45b169de8c0f67fede1d0c b/clock/Library/Artifacts/ca/ca0dfdce9a45b169de8c0f67fede1d0c
new file mode 100644
index 00000000..71574a8a
Binary files /dev/null and b/clock/Library/Artifacts/ca/ca0dfdce9a45b169de8c0f67fede1d0c differ
diff --git a/clock/Library/Artifacts/ca/ca0ef668f9cf4a1f04e325469681d6bf b/clock/Library/Artifacts/ca/ca0ef668f9cf4a1f04e325469681d6bf
new file mode 100644
index 00000000..a0bf88dd
Binary files /dev/null and b/clock/Library/Artifacts/ca/ca0ef668f9cf4a1f04e325469681d6bf differ
diff --git a/clock/Library/Artifacts/ca/ca2a8cd50b10a92ccbb52d882fc4e50e b/clock/Library/Artifacts/ca/ca2a8cd50b10a92ccbb52d882fc4e50e
new file mode 100644
index 00000000..f444109d
Binary files /dev/null and b/clock/Library/Artifacts/ca/ca2a8cd50b10a92ccbb52d882fc4e50e differ
diff --git a/clock/Library/Artifacts/ca/ca3c88db3f93f2ae8f5b4eaafa144bf0 b/clock/Library/Artifacts/ca/ca3c88db3f93f2ae8f5b4eaafa144bf0
new file mode 100644
index 00000000..5d490862
Binary files /dev/null and b/clock/Library/Artifacts/ca/ca3c88db3f93f2ae8f5b4eaafa144bf0 differ
diff --git a/clock/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 b/clock/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218
new file mode 100644
index 00000000..7d80c6aa
Binary files /dev/null and b/clock/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 differ
diff --git a/clock/Library/Artifacts/ca/caf87c61e5aa6acf01706f2fdb5f7b84 b/clock/Library/Artifacts/ca/caf87c61e5aa6acf01706f2fdb5f7b84
new file mode 100644
index 00000000..77da78f3
Binary files /dev/null and b/clock/Library/Artifacts/ca/caf87c61e5aa6acf01706f2fdb5f7b84 differ
diff --git a/clock/Library/Artifacts/cb/cb0d8ed0e094780bc00a61beab15e04e b/clock/Library/Artifacts/cb/cb0d8ed0e094780bc00a61beab15e04e
new file mode 100644
index 00000000..b24a28f6
Binary files /dev/null and b/clock/Library/Artifacts/cb/cb0d8ed0e094780bc00a61beab15e04e differ
diff --git a/clock/Library/Artifacts/cb/cb53186071960131173e1d0c56e7696b b/clock/Library/Artifacts/cb/cb53186071960131173e1d0c56e7696b
new file mode 100644
index 00000000..b0fdabfc
Binary files /dev/null and b/clock/Library/Artifacts/cb/cb53186071960131173e1d0c56e7696b differ
diff --git a/clock/Library/Artifacts/cb/cb58047be4020826d407a9535b4ee9c3 b/clock/Library/Artifacts/cb/cb58047be4020826d407a9535b4ee9c3
new file mode 100644
index 00000000..b28041e9
Binary files /dev/null and b/clock/Library/Artifacts/cb/cb58047be4020826d407a9535b4ee9c3 differ
diff --git a/clock/Library/Artifacts/cb/cb5fdfc89320aa55d280390939d7a3ec b/clock/Library/Artifacts/cb/cb5fdfc89320aa55d280390939d7a3ec
new file mode 100644
index 00000000..b3466ee8
Binary files /dev/null and b/clock/Library/Artifacts/cb/cb5fdfc89320aa55d280390939d7a3ec differ
diff --git a/clock/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 b/clock/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67
new file mode 100644
index 00000000..26804c19
Binary files /dev/null and b/clock/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 differ
diff --git a/clock/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 b/clock/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94
new file mode 100644
index 00000000..ff535210
Binary files /dev/null and b/clock/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 differ
diff --git a/clock/Library/Artifacts/cb/cbdec08073d94f97ee6acda513f590fb b/clock/Library/Artifacts/cb/cbdec08073d94f97ee6acda513f590fb
new file mode 100644
index 00000000..8d862f57
Binary files /dev/null and b/clock/Library/Artifacts/cb/cbdec08073d94f97ee6acda513f590fb differ
diff --git a/clock/Library/Artifacts/cb/cbeceee25eccdda1eb8af837b7a995a8 b/clock/Library/Artifacts/cb/cbeceee25eccdda1eb8af837b7a995a8
new file mode 100644
index 00000000..0ae67872
Binary files /dev/null and b/clock/Library/Artifacts/cb/cbeceee25eccdda1eb8af837b7a995a8 differ
diff --git a/clock/Library/Artifacts/cb/cbf3a01174425e5588e4ba1c62766f8d b/clock/Library/Artifacts/cb/cbf3a01174425e5588e4ba1c62766f8d
new file mode 100644
index 00000000..4f01d3e8
Binary files /dev/null and b/clock/Library/Artifacts/cb/cbf3a01174425e5588e4ba1c62766f8d differ
diff --git a/clock/Library/Artifacts/cb/cbfe9ba4c8a26514b2923d63a454ec65 b/clock/Library/Artifacts/cb/cbfe9ba4c8a26514b2923d63a454ec65
new file mode 100644
index 00000000..a779e020
Binary files /dev/null and b/clock/Library/Artifacts/cb/cbfe9ba4c8a26514b2923d63a454ec65 differ
diff --git a/clock/Library/Artifacts/cc/cc21d2066dd6675a43b5175c5285f2de b/clock/Library/Artifacts/cc/cc21d2066dd6675a43b5175c5285f2de
new file mode 100644
index 00000000..b05ce8c4
Binary files /dev/null and b/clock/Library/Artifacts/cc/cc21d2066dd6675a43b5175c5285f2de differ
diff --git a/clock/Library/Artifacts/cc/cc4cc4bdd57146f93401fc7446e12888 b/clock/Library/Artifacts/cc/cc4cc4bdd57146f93401fc7446e12888
new file mode 100644
index 00000000..48be7d0f
Binary files /dev/null and b/clock/Library/Artifacts/cc/cc4cc4bdd57146f93401fc7446e12888 differ
diff --git a/clock/Library/Artifacts/cc/cc6a2bce5a823e383525547183d7d1a3 b/clock/Library/Artifacts/cc/cc6a2bce5a823e383525547183d7d1a3
new file mode 100644
index 00000000..5c9a8cb6
Binary files /dev/null and b/clock/Library/Artifacts/cc/cc6a2bce5a823e383525547183d7d1a3 differ
diff --git a/clock/Library/Artifacts/cc/cc7c478ebe00b1fcaaf6ed0db0755563 b/clock/Library/Artifacts/cc/cc7c478ebe00b1fcaaf6ed0db0755563
new file mode 100644
index 00000000..ab7f56f2
Binary files /dev/null and b/clock/Library/Artifacts/cc/cc7c478ebe00b1fcaaf6ed0db0755563 differ
diff --git a/clock/Library/Artifacts/cc/cca619dfdbeb025becc3af04432173a1 b/clock/Library/Artifacts/cc/cca619dfdbeb025becc3af04432173a1
new file mode 100644
index 00000000..cf1fb145
Binary files /dev/null and b/clock/Library/Artifacts/cc/cca619dfdbeb025becc3af04432173a1 differ
diff --git a/clock/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 b/clock/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508
new file mode 100644
index 00000000..dba23cb5
Binary files /dev/null and b/clock/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 differ
diff --git a/clock/Library/Artifacts/cd/cd265772a6df899c1513c9340612968b b/clock/Library/Artifacts/cd/cd265772a6df899c1513c9340612968b
new file mode 100644
index 00000000..71997dae
Binary files /dev/null and b/clock/Library/Artifacts/cd/cd265772a6df899c1513c9340612968b differ
diff --git a/clock/Library/Artifacts/cd/cd7b0937451a75510cf9cf5389df103a b/clock/Library/Artifacts/cd/cd7b0937451a75510cf9cf5389df103a
new file mode 100644
index 00000000..6ed33928
Binary files /dev/null and b/clock/Library/Artifacts/cd/cd7b0937451a75510cf9cf5389df103a differ
diff --git a/clock/Library/Artifacts/cd/cd91471a89b512e57a75f68430a9279b b/clock/Library/Artifacts/cd/cd91471a89b512e57a75f68430a9279b
new file mode 100644
index 00000000..a34d2cba
Binary files /dev/null and b/clock/Library/Artifacts/cd/cd91471a89b512e57a75f68430a9279b differ
diff --git a/clock/Library/Artifacts/cd/cdc4976a6561bafac0151d7b0874bbeb b/clock/Library/Artifacts/cd/cdc4976a6561bafac0151d7b0874bbeb
new file mode 100644
index 00000000..1d7cff7c
Binary files /dev/null and b/clock/Library/Artifacts/cd/cdc4976a6561bafac0151d7b0874bbeb differ
diff --git a/clock/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 b/clock/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3
new file mode 100644
index 00000000..d8731b73
Binary files /dev/null and b/clock/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 differ
diff --git a/clock/Library/Artifacts/ce/ce2585fd83bfd1b7916cdfec0ae495fb b/clock/Library/Artifacts/ce/ce2585fd83bfd1b7916cdfec0ae495fb
new file mode 100644
index 00000000..4c422d4c
Binary files /dev/null and b/clock/Library/Artifacts/ce/ce2585fd83bfd1b7916cdfec0ae495fb differ
diff --git a/clock/Library/Artifacts/ce/ce4ffd46de4e6148d4cc17d33ee87b0c b/clock/Library/Artifacts/ce/ce4ffd46de4e6148d4cc17d33ee87b0c
new file mode 100644
index 00000000..3b27ba36
Binary files /dev/null and b/clock/Library/Artifacts/ce/ce4ffd46de4e6148d4cc17d33ee87b0c differ
diff --git a/clock/Library/Artifacts/ce/ce940a75367af3d305fa327e55101cba b/clock/Library/Artifacts/ce/ce940a75367af3d305fa327e55101cba
new file mode 100644
index 00000000..f16e0689
Binary files /dev/null and b/clock/Library/Artifacts/ce/ce940a75367af3d305fa327e55101cba differ
diff --git a/clock/Library/Artifacts/ce/ceb7eafb0bff960b21c283088fc47a52 b/clock/Library/Artifacts/ce/ceb7eafb0bff960b21c283088fc47a52
new file mode 100644
index 00000000..0f8e0d6e
Binary files /dev/null and b/clock/Library/Artifacts/ce/ceb7eafb0bff960b21c283088fc47a52 differ
diff --git a/clock/Library/Artifacts/cf/cf0ce77db6c699a71f19710fcfa1e0cc b/clock/Library/Artifacts/cf/cf0ce77db6c699a71f19710fcfa1e0cc
new file mode 100644
index 00000000..a3c8f8f6
Binary files /dev/null and b/clock/Library/Artifacts/cf/cf0ce77db6c699a71f19710fcfa1e0cc differ
diff --git a/clock/Library/Artifacts/cf/cf31df28d5940b62bbf06014fb28d593 b/clock/Library/Artifacts/cf/cf31df28d5940b62bbf06014fb28d593
new file mode 100644
index 00000000..db8870e4
Binary files /dev/null and b/clock/Library/Artifacts/cf/cf31df28d5940b62bbf06014fb28d593 differ
diff --git a/clock/Library/Artifacts/cf/cf53c307e46f29b0c9e38e6d367f4d2a b/clock/Library/Artifacts/cf/cf53c307e46f29b0c9e38e6d367f4d2a
new file mode 100644
index 00000000..dcc06323
Binary files /dev/null and b/clock/Library/Artifacts/cf/cf53c307e46f29b0c9e38e6d367f4d2a differ
diff --git a/clock/Library/Artifacts/cf/cf86261666cf904f66f90197fb144341 b/clock/Library/Artifacts/cf/cf86261666cf904f66f90197fb144341
new file mode 100644
index 00000000..4c039365
Binary files /dev/null and b/clock/Library/Artifacts/cf/cf86261666cf904f66f90197fb144341 differ
diff --git a/clock/Library/Artifacts/cf/cf9803c38e2941a361f0ac21f268732e b/clock/Library/Artifacts/cf/cf9803c38e2941a361f0ac21f268732e
new file mode 100644
index 00000000..9a6cfba2
Binary files /dev/null and b/clock/Library/Artifacts/cf/cf9803c38e2941a361f0ac21f268732e differ
diff --git a/clock/Library/Artifacts/cf/cff1e730cdad1c0cb80de933cb316bff b/clock/Library/Artifacts/cf/cff1e730cdad1c0cb80de933cb316bff
new file mode 100644
index 00000000..9c443e05
Binary files /dev/null and b/clock/Library/Artifacts/cf/cff1e730cdad1c0cb80de933cb316bff differ
diff --git a/clock/Library/Artifacts/d0/d01fda28f26c582b5cfecf57b63ab2d1 b/clock/Library/Artifacts/d0/d01fda28f26c582b5cfecf57b63ab2d1
new file mode 100644
index 00000000..f8c001e4
Binary files /dev/null and b/clock/Library/Artifacts/d0/d01fda28f26c582b5cfecf57b63ab2d1 differ
diff --git a/clock/Library/Artifacts/d0/d02684648ff31917380e0f82cb6788ad b/clock/Library/Artifacts/d0/d02684648ff31917380e0f82cb6788ad
new file mode 100644
index 00000000..ccf87096
Binary files /dev/null and b/clock/Library/Artifacts/d0/d02684648ff31917380e0f82cb6788ad differ
diff --git a/clock/Library/Artifacts/d0/d042e538ee0a6581810dcda046e10b9b b/clock/Library/Artifacts/d0/d042e538ee0a6581810dcda046e10b9b
new file mode 100644
index 00000000..28e6ad3c
Binary files /dev/null and b/clock/Library/Artifacts/d0/d042e538ee0a6581810dcda046e10b9b differ
diff --git a/clock/Library/Artifacts/d0/d071292bed4ad244d6523c49f8ad0c59 b/clock/Library/Artifacts/d0/d071292bed4ad244d6523c49f8ad0c59
new file mode 100644
index 00000000..33ea5c2a
Binary files /dev/null and b/clock/Library/Artifacts/d0/d071292bed4ad244d6523c49f8ad0c59 differ
diff --git a/clock/Library/Artifacts/d0/d0a343d26817df674beba49f9695f5d3 b/clock/Library/Artifacts/d0/d0a343d26817df674beba49f9695f5d3
new file mode 100644
index 00000000..347d7bf5
Binary files /dev/null and b/clock/Library/Artifacts/d0/d0a343d26817df674beba49f9695f5d3 differ
diff --git a/clock/Library/Artifacts/d0/d0fe325211924bf638ecc1e130598ce3 b/clock/Library/Artifacts/d0/d0fe325211924bf638ecc1e130598ce3
new file mode 100644
index 00000000..6f107c91
Binary files /dev/null and b/clock/Library/Artifacts/d0/d0fe325211924bf638ecc1e130598ce3 differ
diff --git a/clock/Library/Artifacts/d1/d1069ef3a8c1e6882bec784d846cba39 b/clock/Library/Artifacts/d1/d1069ef3a8c1e6882bec784d846cba39
new file mode 100644
index 00000000..9fb45c20
Binary files /dev/null and b/clock/Library/Artifacts/d1/d1069ef3a8c1e6882bec784d846cba39 differ
diff --git a/clock/Library/Artifacts/d1/d1327a68d159a77c34c42da0be1e9e5c b/clock/Library/Artifacts/d1/d1327a68d159a77c34c42da0be1e9e5c
new file mode 100644
index 00000000..d29c2657
Binary files /dev/null and b/clock/Library/Artifacts/d1/d1327a68d159a77c34c42da0be1e9e5c differ
diff --git a/clock/Library/Artifacts/d1/d14e2a90ebdd1e85914a2a15d8283986 b/clock/Library/Artifacts/d1/d14e2a90ebdd1e85914a2a15d8283986
new file mode 100644
index 00000000..b6cc0383
Binary files /dev/null and b/clock/Library/Artifacts/d1/d14e2a90ebdd1e85914a2a15d8283986 differ
diff --git a/clock/Library/Artifacts/d1/d1a28e286677f54be782d1102cf97055 b/clock/Library/Artifacts/d1/d1a28e286677f54be782d1102cf97055
new file mode 100644
index 00000000..488ea10e
Binary files /dev/null and b/clock/Library/Artifacts/d1/d1a28e286677f54be782d1102cf97055 differ
diff --git a/clock/Library/Artifacts/d1/d1c5710140c337d654f4b1307fb895b4 b/clock/Library/Artifacts/d1/d1c5710140c337d654f4b1307fb895b4
new file mode 100644
index 00000000..19cf9a80
Binary files /dev/null and b/clock/Library/Artifacts/d1/d1c5710140c337d654f4b1307fb895b4 differ
diff --git a/clock/Library/Artifacts/d2/d26f91587b3ec933e50bbc4e7385261c b/clock/Library/Artifacts/d2/d26f91587b3ec933e50bbc4e7385261c
new file mode 100644
index 00000000..89e821cb
Binary files /dev/null and b/clock/Library/Artifacts/d2/d26f91587b3ec933e50bbc4e7385261c differ
diff --git a/clock/Library/Artifacts/d3/d3029d328a8660a82ff0a93faece8c85 b/clock/Library/Artifacts/d3/d3029d328a8660a82ff0a93faece8c85
new file mode 100644
index 00000000..206f5bd7
Binary files /dev/null and b/clock/Library/Artifacts/d3/d3029d328a8660a82ff0a93faece8c85 differ
diff --git a/clock/Library/Artifacts/d3/d30690e8ac0d16d25a5f5eb7f3eeb7b0 b/clock/Library/Artifacts/d3/d30690e8ac0d16d25a5f5eb7f3eeb7b0
new file mode 100644
index 00000000..2146ddf8
Binary files /dev/null and b/clock/Library/Artifacts/d3/d30690e8ac0d16d25a5f5eb7f3eeb7b0 differ
diff --git a/clock/Library/Artifacts/d3/d33a01aeee9c2ca61ccf7cb27132353f b/clock/Library/Artifacts/d3/d33a01aeee9c2ca61ccf7cb27132353f
new file mode 100644
index 00000000..1dadc5ee
Binary files /dev/null and b/clock/Library/Artifacts/d3/d33a01aeee9c2ca61ccf7cb27132353f differ
diff --git a/clock/Library/Artifacts/d3/d375ce40cf94a8501c0c0ef67102f15d b/clock/Library/Artifacts/d3/d375ce40cf94a8501c0c0ef67102f15d
new file mode 100644
index 00000000..d308c29e
Binary files /dev/null and b/clock/Library/Artifacts/d3/d375ce40cf94a8501c0c0ef67102f15d differ
diff --git a/clock/Library/Artifacts/d3/d3b4bfb7c70938c224a6491993847391 b/clock/Library/Artifacts/d3/d3b4bfb7c70938c224a6491993847391
new file mode 100644
index 00000000..cb48b567
Binary files /dev/null and b/clock/Library/Artifacts/d3/d3b4bfb7c70938c224a6491993847391 differ
diff --git a/clock/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 b/clock/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466
new file mode 100644
index 00000000..75ec2831
Binary files /dev/null and b/clock/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 differ
diff --git a/clock/Library/Artifacts/d4/d436bdcf7450213e934190a2117d9251 b/clock/Library/Artifacts/d4/d436bdcf7450213e934190a2117d9251
new file mode 100644
index 00000000..f3909a2b
Binary files /dev/null and b/clock/Library/Artifacts/d4/d436bdcf7450213e934190a2117d9251 differ
diff --git a/clock/Library/Artifacts/d4/d4a4740c80e5ce754bc7b076ab8a2199 b/clock/Library/Artifacts/d4/d4a4740c80e5ce754bc7b076ab8a2199
new file mode 100644
index 00000000..7a06ede8
Binary files /dev/null and b/clock/Library/Artifacts/d4/d4a4740c80e5ce754bc7b076ab8a2199 differ
diff --git a/clock/Library/Artifacts/d4/d4afc3b549146d80340a248ac9911f6c b/clock/Library/Artifacts/d4/d4afc3b549146d80340a248ac9911f6c
new file mode 100644
index 00000000..fa08e3ea
Binary files /dev/null and b/clock/Library/Artifacts/d4/d4afc3b549146d80340a248ac9911f6c differ
diff --git a/clock/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 b/clock/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8
new file mode 100644
index 00000000..ac1391f3
Binary files /dev/null and b/clock/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 differ
diff --git a/clock/Library/Artifacts/d5/d5552e907c2fe159ed54234308b5628d b/clock/Library/Artifacts/d5/d5552e907c2fe159ed54234308b5628d
new file mode 100644
index 00000000..ae0f5cb0
Binary files /dev/null and b/clock/Library/Artifacts/d5/d5552e907c2fe159ed54234308b5628d differ
diff --git a/clock/Library/Artifacts/d5/d575e1921d0a66dd62d0cbea59935d0f b/clock/Library/Artifacts/d5/d575e1921d0a66dd62d0cbea59935d0f
new file mode 100644
index 00000000..f41be0fd
Binary files /dev/null and b/clock/Library/Artifacts/d5/d575e1921d0a66dd62d0cbea59935d0f differ
diff --git a/clock/Library/Artifacts/d5/d59923bdc4066cbfcdcbe76ad7f3414e b/clock/Library/Artifacts/d5/d59923bdc4066cbfcdcbe76ad7f3414e
new file mode 100644
index 00000000..9d43e393
Binary files /dev/null and b/clock/Library/Artifacts/d5/d59923bdc4066cbfcdcbe76ad7f3414e differ
diff --git a/clock/Library/Artifacts/d5/d5b3c4bc35dac1b0c5ab99c9d3bb657d b/clock/Library/Artifacts/d5/d5b3c4bc35dac1b0c5ab99c9d3bb657d
new file mode 100644
index 00000000..b7bd60da
Binary files /dev/null and b/clock/Library/Artifacts/d5/d5b3c4bc35dac1b0c5ab99c9d3bb657d differ
diff --git a/clock/Library/Artifacts/d5/d5e061a64993e7cb866d413575a55735 b/clock/Library/Artifacts/d5/d5e061a64993e7cb866d413575a55735
new file mode 100644
index 00000000..417fe4cd
Binary files /dev/null and b/clock/Library/Artifacts/d5/d5e061a64993e7cb866d413575a55735 differ
diff --git a/clock/Library/Artifacts/d5/d5f438b797a4535f99371fc46aba1107 b/clock/Library/Artifacts/d5/d5f438b797a4535f99371fc46aba1107
new file mode 100644
index 00000000..d89ac726
Binary files /dev/null and b/clock/Library/Artifacts/d5/d5f438b797a4535f99371fc46aba1107 differ
diff --git a/clock/Library/Artifacts/d6/d642ef0faa69e53062720ffc7e38948e b/clock/Library/Artifacts/d6/d642ef0faa69e53062720ffc7e38948e
new file mode 100644
index 00000000..880ba2c0
Binary files /dev/null and b/clock/Library/Artifacts/d6/d642ef0faa69e53062720ffc7e38948e differ
diff --git a/clock/Library/Artifacts/d6/d65176aaa111fac445978f5b04167493 b/clock/Library/Artifacts/d6/d65176aaa111fac445978f5b04167493
new file mode 100644
index 00000000..f963e4e9
Binary files /dev/null and b/clock/Library/Artifacts/d6/d65176aaa111fac445978f5b04167493 differ
diff --git a/clock/Library/Artifacts/d6/d67b171fa28159a60eaec52061ccf54c b/clock/Library/Artifacts/d6/d67b171fa28159a60eaec52061ccf54c
new file mode 100644
index 00000000..f6e4aaaa
Binary files /dev/null and b/clock/Library/Artifacts/d6/d67b171fa28159a60eaec52061ccf54c differ
diff --git a/clock/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f b/clock/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f
new file mode 100644
index 00000000..76b8775d
Binary files /dev/null and b/clock/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f differ
diff --git a/clock/Library/Artifacts/d6/d6dbd245213a493a59f69dfe7fc1a721 b/clock/Library/Artifacts/d6/d6dbd245213a493a59f69dfe7fc1a721
new file mode 100644
index 00000000..8df0915f
Binary files /dev/null and b/clock/Library/Artifacts/d6/d6dbd245213a493a59f69dfe7fc1a721 differ
diff --git a/clock/Library/Artifacts/d6/d6e09af61374afe9340d7538174f8556 b/clock/Library/Artifacts/d6/d6e09af61374afe9340d7538174f8556
new file mode 100644
index 00000000..a9955b97
Binary files /dev/null and b/clock/Library/Artifacts/d6/d6e09af61374afe9340d7538174f8556 differ
diff --git a/clock/Library/Artifacts/d7/d749c6031e0d7042376747ac8813c589 b/clock/Library/Artifacts/d7/d749c6031e0d7042376747ac8813c589
new file mode 100644
index 00000000..0ef3f938
Binary files /dev/null and b/clock/Library/Artifacts/d7/d749c6031e0d7042376747ac8813c589 differ
diff --git a/clock/Library/Artifacts/d7/d7cb1d20710b07487aebfcef0f9d8d77 b/clock/Library/Artifacts/d7/d7cb1d20710b07487aebfcef0f9d8d77
new file mode 100644
index 00000000..3f65bfe0
Binary files /dev/null and b/clock/Library/Artifacts/d7/d7cb1d20710b07487aebfcef0f9d8d77 differ
diff --git a/clock/Library/Artifacts/d7/d7e4b8da864123fc3e27fa1d7eef1aa7 b/clock/Library/Artifacts/d7/d7e4b8da864123fc3e27fa1d7eef1aa7
new file mode 100644
index 00000000..b6c9035c
Binary files /dev/null and b/clock/Library/Artifacts/d7/d7e4b8da864123fc3e27fa1d7eef1aa7 differ
diff --git a/clock/Library/Artifacts/d7/d7f245247d14e58411f48fd66da6b750 b/clock/Library/Artifacts/d7/d7f245247d14e58411f48fd66da6b750
new file mode 100644
index 00000000..d2abf2fd
Binary files /dev/null and b/clock/Library/Artifacts/d7/d7f245247d14e58411f48fd66da6b750 differ
diff --git a/clock/Library/Artifacts/d7/d7ff6545ae60b82f27a0a9230cd407c5 b/clock/Library/Artifacts/d7/d7ff6545ae60b82f27a0a9230cd407c5
new file mode 100644
index 00000000..4a23cf83
Binary files /dev/null and b/clock/Library/Artifacts/d7/d7ff6545ae60b82f27a0a9230cd407c5 differ
diff --git a/clock/Library/Artifacts/d8/d816a0334ec5a8bce5799fce847e8ccf b/clock/Library/Artifacts/d8/d816a0334ec5a8bce5799fce847e8ccf
new file mode 100644
index 00000000..bf01a94d
Binary files /dev/null and b/clock/Library/Artifacts/d8/d816a0334ec5a8bce5799fce847e8ccf differ
diff --git a/clock/Library/Artifacts/d8/d81b5e5f9ffda80585ca690d29f2d9d5 b/clock/Library/Artifacts/d8/d81b5e5f9ffda80585ca690d29f2d9d5
new file mode 100644
index 00000000..56222579
Binary files /dev/null and b/clock/Library/Artifacts/d8/d81b5e5f9ffda80585ca690d29f2d9d5 differ
diff --git a/clock/Library/Artifacts/d8/d83005c5136d9f453533bf2671baff24 b/clock/Library/Artifacts/d8/d83005c5136d9f453533bf2671baff24
new file mode 100644
index 00000000..9a92fb2e
Binary files /dev/null and b/clock/Library/Artifacts/d8/d83005c5136d9f453533bf2671baff24 differ
diff --git a/clock/Library/Artifacts/d8/d89159d23d3b73b56f445e6097890970 b/clock/Library/Artifacts/d8/d89159d23d3b73b56f445e6097890970
new file mode 100644
index 00000000..8ba07435
Binary files /dev/null and b/clock/Library/Artifacts/d8/d89159d23d3b73b56f445e6097890970 differ
diff --git a/clock/Library/Artifacts/d8/d8946eae7d749cff6ec5bbe62b45c457 b/clock/Library/Artifacts/d8/d8946eae7d749cff6ec5bbe62b45c457
new file mode 100644
index 00000000..d7d9e00e
Binary files /dev/null and b/clock/Library/Artifacts/d8/d8946eae7d749cff6ec5bbe62b45c457 differ
diff --git a/clock/Library/Artifacts/d8/d8952f28d9f00eba5d90c7f9035f87a9 b/clock/Library/Artifacts/d8/d8952f28d9f00eba5d90c7f9035f87a9
new file mode 100644
index 00000000..a2b81c97
Binary files /dev/null and b/clock/Library/Artifacts/d8/d8952f28d9f00eba5d90c7f9035f87a9 differ
diff --git a/clock/Library/Artifacts/d8/d89db13aa7dd39fb0480d5785412594f b/clock/Library/Artifacts/d8/d89db13aa7dd39fb0480d5785412594f
new file mode 100644
index 00000000..32640a37
Binary files /dev/null and b/clock/Library/Artifacts/d8/d89db13aa7dd39fb0480d5785412594f differ
diff --git a/clock/Library/Artifacts/d8/d8e9f1a66a8959870bfba1f1ca9f8728 b/clock/Library/Artifacts/d8/d8e9f1a66a8959870bfba1f1ca9f8728
new file mode 100644
index 00000000..608706f4
Binary files /dev/null and b/clock/Library/Artifacts/d8/d8e9f1a66a8959870bfba1f1ca9f8728 differ
diff --git a/clock/Library/Artifacts/d9/d911d03e2f0bbfdf0d0841d7cd6788a6 b/clock/Library/Artifacts/d9/d911d03e2f0bbfdf0d0841d7cd6788a6
new file mode 100644
index 00000000..b5b6296d
Binary files /dev/null and b/clock/Library/Artifacts/d9/d911d03e2f0bbfdf0d0841d7cd6788a6 differ
diff --git a/clock/Library/Artifacts/d9/d913d0a7a2ad7a2ac35ebf65753cde95 b/clock/Library/Artifacts/d9/d913d0a7a2ad7a2ac35ebf65753cde95
new file mode 100644
index 00000000..9e5859e1
Binary files /dev/null and b/clock/Library/Artifacts/d9/d913d0a7a2ad7a2ac35ebf65753cde95 differ
diff --git a/clock/Library/Artifacts/d9/d9623e61eb37847834ee9d4c8c1f3d99 b/clock/Library/Artifacts/d9/d9623e61eb37847834ee9d4c8c1f3d99
new file mode 100644
index 00000000..422a13e9
Binary files /dev/null and b/clock/Library/Artifacts/d9/d9623e61eb37847834ee9d4c8c1f3d99 differ
diff --git a/clock/Library/Artifacts/d9/d9a285b0f2d26b04ca8cecf779f689b3 b/clock/Library/Artifacts/d9/d9a285b0f2d26b04ca8cecf779f689b3
new file mode 100644
index 00000000..0679ef09
Binary files /dev/null and b/clock/Library/Artifacts/d9/d9a285b0f2d26b04ca8cecf779f689b3 differ
diff --git a/clock/Library/Artifacts/d9/d9a4da39794f8befc686e0d51dfaa5aa b/clock/Library/Artifacts/d9/d9a4da39794f8befc686e0d51dfaa5aa
new file mode 100644
index 00000000..63e48df3
Binary files /dev/null and b/clock/Library/Artifacts/d9/d9a4da39794f8befc686e0d51dfaa5aa differ
diff --git a/clock/Library/Artifacts/d9/d9b095f7ef2631f85773b775e867925b b/clock/Library/Artifacts/d9/d9b095f7ef2631f85773b775e867925b
new file mode 100644
index 00000000..bd032685
Binary files /dev/null and b/clock/Library/Artifacts/d9/d9b095f7ef2631f85773b775e867925b differ
diff --git a/clock/Library/Artifacts/d9/d9c9fc42083200e8d447930fb06ef6e7 b/clock/Library/Artifacts/d9/d9c9fc42083200e8d447930fb06ef6e7
new file mode 100644
index 00000000..0f9102a3
Binary files /dev/null and b/clock/Library/Artifacts/d9/d9c9fc42083200e8d447930fb06ef6e7 differ
diff --git a/clock/Library/Artifacts/da/da7171a99e64c67697223aa166ea96ee b/clock/Library/Artifacts/da/da7171a99e64c67697223aa166ea96ee
new file mode 100644
index 00000000..53375aa1
Binary files /dev/null and b/clock/Library/Artifacts/da/da7171a99e64c67697223aa166ea96ee differ
diff --git a/clock/Library/Artifacts/db/db2ccad39b795f8e221b0b5b69da626b b/clock/Library/Artifacts/db/db2ccad39b795f8e221b0b5b69da626b
new file mode 100644
index 00000000..85b4fca8
Binary files /dev/null and b/clock/Library/Artifacts/db/db2ccad39b795f8e221b0b5b69da626b differ
diff --git a/clock/Library/Artifacts/db/db47ddc4e51b2af74ffad777368ff5c7 b/clock/Library/Artifacts/db/db47ddc4e51b2af74ffad777368ff5c7
new file mode 100644
index 00000000..9062418f
Binary files /dev/null and b/clock/Library/Artifacts/db/db47ddc4e51b2af74ffad777368ff5c7 differ
diff --git a/clock/Library/Artifacts/dc/dc094448302ddba08a28eabb1a7e0b91 b/clock/Library/Artifacts/dc/dc094448302ddba08a28eabb1a7e0b91
new file mode 100644
index 00000000..afc197c5
Binary files /dev/null and b/clock/Library/Artifacts/dc/dc094448302ddba08a28eabb1a7e0b91 differ
diff --git a/clock/Library/Artifacts/dc/dc1fef27c272d46d89bacfd2ce7d849c b/clock/Library/Artifacts/dc/dc1fef27c272d46d89bacfd2ce7d849c
new file mode 100644
index 00000000..3ea86024
Binary files /dev/null and b/clock/Library/Artifacts/dc/dc1fef27c272d46d89bacfd2ce7d849c differ
diff --git a/clock/Library/Artifacts/dc/dc430743d03af635c246afdc7081d5d7 b/clock/Library/Artifacts/dc/dc430743d03af635c246afdc7081d5d7
new file mode 100644
index 00000000..1f895e89
Binary files /dev/null and b/clock/Library/Artifacts/dc/dc430743d03af635c246afdc7081d5d7 differ
diff --git a/clock/Library/Artifacts/dc/dc608d1dc5bf7aa580f8e122d3fe6c81 b/clock/Library/Artifacts/dc/dc608d1dc5bf7aa580f8e122d3fe6c81
new file mode 100644
index 00000000..910f6793
Binary files /dev/null and b/clock/Library/Artifacts/dc/dc608d1dc5bf7aa580f8e122d3fe6c81 differ
diff --git a/clock/Library/Artifacts/dc/dcc5428675c9f154a055bf0fa0d74a87 b/clock/Library/Artifacts/dc/dcc5428675c9f154a055bf0fa0d74a87
new file mode 100644
index 00000000..3d0c99d2
Binary files /dev/null and b/clock/Library/Artifacts/dc/dcc5428675c9f154a055bf0fa0d74a87 differ
diff --git a/clock/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b b/clock/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b
new file mode 100644
index 00000000..965c0bd8
Binary files /dev/null and b/clock/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b differ
diff --git a/clock/Library/Artifacts/dd/dd6132dd6bc2cd3e6d202746b231780e b/clock/Library/Artifacts/dd/dd6132dd6bc2cd3e6d202746b231780e
new file mode 100644
index 00000000..a8f189f2
Binary files /dev/null and b/clock/Library/Artifacts/dd/dd6132dd6bc2cd3e6d202746b231780e differ
diff --git a/clock/Library/Artifacts/dd/ddca9a66f7068c6c9817a883595e7feb b/clock/Library/Artifacts/dd/ddca9a66f7068c6c9817a883595e7feb
new file mode 100644
index 00000000..d0880f45
Binary files /dev/null and b/clock/Library/Artifacts/dd/ddca9a66f7068c6c9817a883595e7feb differ
diff --git a/clock/Library/Artifacts/dd/ddd4c5b7b80f1c48751b800ec3cffb16 b/clock/Library/Artifacts/dd/ddd4c5b7b80f1c48751b800ec3cffb16
new file mode 100644
index 00000000..8d654f04
Binary files /dev/null and b/clock/Library/Artifacts/dd/ddd4c5b7b80f1c48751b800ec3cffb16 differ
diff --git a/clock/Library/Artifacts/dd/ddf17e443c771a55e39b70cb37cd2002 b/clock/Library/Artifacts/dd/ddf17e443c771a55e39b70cb37cd2002
new file mode 100644
index 00000000..7448f4a0
Binary files /dev/null and b/clock/Library/Artifacts/dd/ddf17e443c771a55e39b70cb37cd2002 differ
diff --git a/clock/Library/Artifacts/de/de595d2b354a939afe3aea8e9a90ed26 b/clock/Library/Artifacts/de/de595d2b354a939afe3aea8e9a90ed26
new file mode 100644
index 00000000..801d59c5
Binary files /dev/null and b/clock/Library/Artifacts/de/de595d2b354a939afe3aea8e9a90ed26 differ
diff --git a/clock/Library/Artifacts/de/dea4ad1191a6572f8e86ec5b5041f146 b/clock/Library/Artifacts/de/dea4ad1191a6572f8e86ec5b5041f146
new file mode 100644
index 00000000..ec50c249
Binary files /dev/null and b/clock/Library/Artifacts/de/dea4ad1191a6572f8e86ec5b5041f146 differ
diff --git a/clock/Library/Artifacts/df/df00dd15da29c94136b9ebd7a14ce30f b/clock/Library/Artifacts/df/df00dd15da29c94136b9ebd7a14ce30f
new file mode 100644
index 00000000..a0b85f7c
Binary files /dev/null and b/clock/Library/Artifacts/df/df00dd15da29c94136b9ebd7a14ce30f differ
diff --git a/clock/Library/Artifacts/df/df08f17aa568026438e5773414e574e0 b/clock/Library/Artifacts/df/df08f17aa568026438e5773414e574e0
new file mode 100644
index 00000000..0321701d
Binary files /dev/null and b/clock/Library/Artifacts/df/df08f17aa568026438e5773414e574e0 differ
diff --git a/clock/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 b/clock/Library/Artifacts/df/df497d53d15903a90aa122624bf56019
new file mode 100644
index 00000000..2676356c
Binary files /dev/null and b/clock/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 differ
diff --git a/clock/Library/Artifacts/df/df8b4a9d16b070102c6315ebf715ae7d b/clock/Library/Artifacts/df/df8b4a9d16b070102c6315ebf715ae7d
new file mode 100644
index 00000000..5a186bf0
Binary files /dev/null and b/clock/Library/Artifacts/df/df8b4a9d16b070102c6315ebf715ae7d differ
diff --git a/clock/Library/Artifacts/df/df9d25f580ea5bea175109d83bb3c3fa b/clock/Library/Artifacts/df/df9d25f580ea5bea175109d83bb3c3fa
new file mode 100644
index 00000000..e9949c64
Binary files /dev/null and b/clock/Library/Artifacts/df/df9d25f580ea5bea175109d83bb3c3fa differ
diff --git a/clock/Library/Artifacts/df/dfaeb6166620c812eb3187639ab5ce7a b/clock/Library/Artifacts/df/dfaeb6166620c812eb3187639ab5ce7a
new file mode 100644
index 00000000..1e84331b
Binary files /dev/null and b/clock/Library/Artifacts/df/dfaeb6166620c812eb3187639ab5ce7a differ
diff --git a/clock/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 b/clock/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278
new file mode 100644
index 00000000..6ef61be2
Binary files /dev/null and b/clock/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 differ
diff --git a/clock/Library/Artifacts/e0/e04369d9ab3c0f02d0456c9cedd39d3b b/clock/Library/Artifacts/e0/e04369d9ab3c0f02d0456c9cedd39d3b
new file mode 100644
index 00000000..8c787817
Binary files /dev/null and b/clock/Library/Artifacts/e0/e04369d9ab3c0f02d0456c9cedd39d3b differ
diff --git a/clock/Library/Artifacts/e0/e07cc26f6f5a18d1e62a73104ce14398 b/clock/Library/Artifacts/e0/e07cc26f6f5a18d1e62a73104ce14398
new file mode 100644
index 00000000..c52b7905
Binary files /dev/null and b/clock/Library/Artifacts/e0/e07cc26f6f5a18d1e62a73104ce14398 differ
diff --git a/clock/Library/Artifacts/e0/e08c33ae0fa3f6a05f8013ef265feef4 b/clock/Library/Artifacts/e0/e08c33ae0fa3f6a05f8013ef265feef4
new file mode 100644
index 00000000..7bfc4835
Binary files /dev/null and b/clock/Library/Artifacts/e0/e08c33ae0fa3f6a05f8013ef265feef4 differ
diff --git a/clock/Library/Artifacts/e0/e0a6fed8dbd9f79c2e4d63861f0691a7 b/clock/Library/Artifacts/e0/e0a6fed8dbd9f79c2e4d63861f0691a7
new file mode 100644
index 00000000..0b10fe05
Binary files /dev/null and b/clock/Library/Artifacts/e0/e0a6fed8dbd9f79c2e4d63861f0691a7 differ
diff --git a/clock/Library/Artifacts/e0/e0bb1da75cb8448531ebd2c4b3796ce0 b/clock/Library/Artifacts/e0/e0bb1da75cb8448531ebd2c4b3796ce0
new file mode 100644
index 00000000..23e9d5b3
Binary files /dev/null and b/clock/Library/Artifacts/e0/e0bb1da75cb8448531ebd2c4b3796ce0 differ
diff --git a/clock/Library/Artifacts/e0/e0d1d6d65b5b1d0c94efa5bdd124ebc4 b/clock/Library/Artifacts/e0/e0d1d6d65b5b1d0c94efa5bdd124ebc4
new file mode 100644
index 00000000..92163901
Binary files /dev/null and b/clock/Library/Artifacts/e0/e0d1d6d65b5b1d0c94efa5bdd124ebc4 differ
diff --git a/clock/Library/Artifacts/e1/e10919cd9e14fabb90605668ae8e73c0 b/clock/Library/Artifacts/e1/e10919cd9e14fabb90605668ae8e73c0
new file mode 100644
index 00000000..7b60cbae
Binary files /dev/null and b/clock/Library/Artifacts/e1/e10919cd9e14fabb90605668ae8e73c0 differ
diff --git a/clock/Library/Artifacts/e1/e11199b5599adebe0a61b28615688dd2 b/clock/Library/Artifacts/e1/e11199b5599adebe0a61b28615688dd2
new file mode 100644
index 00000000..fb42c96f
Binary files /dev/null and b/clock/Library/Artifacts/e1/e11199b5599adebe0a61b28615688dd2 differ
diff --git a/clock/Library/Artifacts/e1/e13f7221972f0758467276ea877eeba1 b/clock/Library/Artifacts/e1/e13f7221972f0758467276ea877eeba1
new file mode 100644
index 00000000..3f5e350b
Binary files /dev/null and b/clock/Library/Artifacts/e1/e13f7221972f0758467276ea877eeba1 differ
diff --git a/clock/Library/Artifacts/e1/e161f2a13f8b54720f02b3dd20ffa196 b/clock/Library/Artifacts/e1/e161f2a13f8b54720f02b3dd20ffa196
new file mode 100644
index 00000000..36893be5
Binary files /dev/null and b/clock/Library/Artifacts/e1/e161f2a13f8b54720f02b3dd20ffa196 differ
diff --git a/clock/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f b/clock/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f
new file mode 100644
index 00000000..5b687caf
Binary files /dev/null and b/clock/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f differ
diff --git a/clock/Library/Artifacts/e1/e178a15127cef729ff6304488b61fd29 b/clock/Library/Artifacts/e1/e178a15127cef729ff6304488b61fd29
new file mode 100644
index 00000000..aa22bbba
Binary files /dev/null and b/clock/Library/Artifacts/e1/e178a15127cef729ff6304488b61fd29 differ
diff --git a/clock/Library/Artifacts/e1/e17c0dd55ae2676be2964270f53b4557 b/clock/Library/Artifacts/e1/e17c0dd55ae2676be2964270f53b4557
new file mode 100644
index 00000000..22cee39e
Binary files /dev/null and b/clock/Library/Artifacts/e1/e17c0dd55ae2676be2964270f53b4557 differ
diff --git a/clock/Library/Artifacts/e1/e1a4809b0ca0a9168f8e2bb5664149ff b/clock/Library/Artifacts/e1/e1a4809b0ca0a9168f8e2bb5664149ff
new file mode 100644
index 00000000..20543f99
Binary files /dev/null and b/clock/Library/Artifacts/e1/e1a4809b0ca0a9168f8e2bb5664149ff differ
diff --git a/clock/Library/Artifacts/e1/e1af80682a879737acc3d7332c1790ed b/clock/Library/Artifacts/e1/e1af80682a879737acc3d7332c1790ed
new file mode 100644
index 00000000..671b21b5
Binary files /dev/null and b/clock/Library/Artifacts/e1/e1af80682a879737acc3d7332c1790ed differ
diff --git a/clock/Library/Artifacts/e1/e1c266b7486775a295d33805c27fe1bb b/clock/Library/Artifacts/e1/e1c266b7486775a295d33805c27fe1bb
new file mode 100644
index 00000000..d7792d33
Binary files /dev/null and b/clock/Library/Artifacts/e1/e1c266b7486775a295d33805c27fe1bb differ
diff --git a/clock/Library/Artifacts/e1/e1ec6170dbbfc9dfd4e7b664cee8f702 b/clock/Library/Artifacts/e1/e1ec6170dbbfc9dfd4e7b664cee8f702
new file mode 100644
index 00000000..3c623850
Binary files /dev/null and b/clock/Library/Artifacts/e1/e1ec6170dbbfc9dfd4e7b664cee8f702 differ
diff --git a/clock/Library/Artifacts/e1/e1f8648bd28388eb2e1191d3cb1e9223 b/clock/Library/Artifacts/e1/e1f8648bd28388eb2e1191d3cb1e9223
new file mode 100644
index 00000000..718739ab
Binary files /dev/null and b/clock/Library/Artifacts/e1/e1f8648bd28388eb2e1191d3cb1e9223 differ
diff --git a/clock/Library/Artifacts/e2/e24d77ba62b077e854140e5cbf634fed b/clock/Library/Artifacts/e2/e24d77ba62b077e854140e5cbf634fed
new file mode 100644
index 00000000..ec396f9f
Binary files /dev/null and b/clock/Library/Artifacts/e2/e24d77ba62b077e854140e5cbf634fed differ
diff --git a/clock/Library/Artifacts/e2/e24e0202c24322de8ac4df4ab0c69bcc b/clock/Library/Artifacts/e2/e24e0202c24322de8ac4df4ab0c69bcc
new file mode 100644
index 00000000..7bc1c5f7
Binary files /dev/null and b/clock/Library/Artifacts/e2/e24e0202c24322de8ac4df4ab0c69bcc differ
diff --git a/clock/Library/Artifacts/e2/e26b3f2a9c9c215886f6d7df5dc6a3f6 b/clock/Library/Artifacts/e2/e26b3f2a9c9c215886f6d7df5dc6a3f6
new file mode 100644
index 00000000..71783c20
Binary files /dev/null and b/clock/Library/Artifacts/e2/e26b3f2a9c9c215886f6d7df5dc6a3f6 differ
diff --git a/clock/Library/Artifacts/e2/e2c2286d830ec638dc74228d963946cd b/clock/Library/Artifacts/e2/e2c2286d830ec638dc74228d963946cd
new file mode 100644
index 00000000..719568e4
Binary files /dev/null and b/clock/Library/Artifacts/e2/e2c2286d830ec638dc74228d963946cd differ
diff --git a/clock/Library/Artifacts/e3/e34d579293e3c44f925d839e89b1e9d2 b/clock/Library/Artifacts/e3/e34d579293e3c44f925d839e89b1e9d2
new file mode 100644
index 00000000..e9ebdbd9
Binary files /dev/null and b/clock/Library/Artifacts/e3/e34d579293e3c44f925d839e89b1e9d2 differ
diff --git a/clock/Library/Artifacts/e3/e36ba6aa68853be751151172cc527925 b/clock/Library/Artifacts/e3/e36ba6aa68853be751151172cc527925
new file mode 100644
index 00000000..1b6f325b
Binary files /dev/null and b/clock/Library/Artifacts/e3/e36ba6aa68853be751151172cc527925 differ
diff --git a/clock/Library/Artifacts/e3/e3724864d5ecc5f2b38679ddc4e1cfd3 b/clock/Library/Artifacts/e3/e3724864d5ecc5f2b38679ddc4e1cfd3
new file mode 100644
index 00000000..b79516d7
Binary files /dev/null and b/clock/Library/Artifacts/e3/e3724864d5ecc5f2b38679ddc4e1cfd3 differ
diff --git a/clock/Library/Artifacts/e3/e37cd12b4e4313352ad4af48c0be3b3e b/clock/Library/Artifacts/e3/e37cd12b4e4313352ad4af48c0be3b3e
new file mode 100644
index 00000000..6c5392c2
Binary files /dev/null and b/clock/Library/Artifacts/e3/e37cd12b4e4313352ad4af48c0be3b3e differ
diff --git a/clock/Library/Artifacts/e3/e381fbac04193392a31e1ca7b49bddd4 b/clock/Library/Artifacts/e3/e381fbac04193392a31e1ca7b49bddd4
new file mode 100644
index 00000000..341077b3
Binary files /dev/null and b/clock/Library/Artifacts/e3/e381fbac04193392a31e1ca7b49bddd4 differ
diff --git a/clock/Library/Artifacts/e4/e471e1a9f5ac68b8e9adc34598282bf0 b/clock/Library/Artifacts/e4/e471e1a9f5ac68b8e9adc34598282bf0
new file mode 100644
index 00000000..81d9cd61
Binary files /dev/null and b/clock/Library/Artifacts/e4/e471e1a9f5ac68b8e9adc34598282bf0 differ
diff --git a/clock/Library/Artifacts/e4/e4929411192dcf9e2014cf3322280ff3 b/clock/Library/Artifacts/e4/e4929411192dcf9e2014cf3322280ff3
new file mode 100644
index 00000000..7bc7a063
Binary files /dev/null and b/clock/Library/Artifacts/e4/e4929411192dcf9e2014cf3322280ff3 differ
diff --git a/clock/Library/Artifacts/e4/e4b9c5b4fd3f0ffd5e96f2c01fcf6515 b/clock/Library/Artifacts/e4/e4b9c5b4fd3f0ffd5e96f2c01fcf6515
new file mode 100644
index 00000000..14264d10
Binary files /dev/null and b/clock/Library/Artifacts/e4/e4b9c5b4fd3f0ffd5e96f2c01fcf6515 differ
diff --git a/clock/Library/Artifacts/e4/e4e46b3a01387d2cbd464059b0663efa b/clock/Library/Artifacts/e4/e4e46b3a01387d2cbd464059b0663efa
new file mode 100644
index 00000000..f9553bba
Binary files /dev/null and b/clock/Library/Artifacts/e4/e4e46b3a01387d2cbd464059b0663efa differ
diff --git a/clock/Library/Artifacts/e4/e4f33dff274c386be3932aa15c37e400 b/clock/Library/Artifacts/e4/e4f33dff274c386be3932aa15c37e400
new file mode 100644
index 00000000..452a9229
Binary files /dev/null and b/clock/Library/Artifacts/e4/e4f33dff274c386be3932aa15c37e400 differ
diff --git a/clock/Library/Artifacts/e4/e4f709e691bb9a7d8428b837802d8675 b/clock/Library/Artifacts/e4/e4f709e691bb9a7d8428b837802d8675
new file mode 100644
index 00000000..d722d113
Binary files /dev/null and b/clock/Library/Artifacts/e4/e4f709e691bb9a7d8428b837802d8675 differ
diff --git a/clock/Library/Artifacts/e5/e54a79e25dffa517d5686c9c90269bf6 b/clock/Library/Artifacts/e5/e54a79e25dffa517d5686c9c90269bf6
new file mode 100644
index 00000000..74cfc8eb
Binary files /dev/null and b/clock/Library/Artifacts/e5/e54a79e25dffa517d5686c9c90269bf6 differ
diff --git a/clock/Library/Artifacts/e5/e550806d9fb087d7643f934fbfd0a66c b/clock/Library/Artifacts/e5/e550806d9fb087d7643f934fbfd0a66c
new file mode 100644
index 00000000..17b2eba6
Binary files /dev/null and b/clock/Library/Artifacts/e5/e550806d9fb087d7643f934fbfd0a66c differ
diff --git a/clock/Library/Artifacts/e5/e593bd9e13c0631de1ecc263751a3863 b/clock/Library/Artifacts/e5/e593bd9e13c0631de1ecc263751a3863
new file mode 100644
index 00000000..3b6e3a71
Binary files /dev/null and b/clock/Library/Artifacts/e5/e593bd9e13c0631de1ecc263751a3863 differ
diff --git a/clock/Library/Artifacts/e5/e5a7a7a17cdf0bf3585faf803b799eee b/clock/Library/Artifacts/e5/e5a7a7a17cdf0bf3585faf803b799eee
new file mode 100644
index 00000000..8674cdc0
Binary files /dev/null and b/clock/Library/Artifacts/e5/e5a7a7a17cdf0bf3585faf803b799eee differ
diff --git a/clock/Library/Artifacts/e5/e5a8ace70eee58c9a3f6d47cd8d2d4af b/clock/Library/Artifacts/e5/e5a8ace70eee58c9a3f6d47cd8d2d4af
new file mode 100644
index 00000000..11e499cb
Binary files /dev/null and b/clock/Library/Artifacts/e5/e5a8ace70eee58c9a3f6d47cd8d2d4af differ
diff --git a/clock/Library/Artifacts/e5/e5b85685f6df69a0213197c54922d56d b/clock/Library/Artifacts/e5/e5b85685f6df69a0213197c54922d56d
new file mode 100644
index 00000000..cb16dc6b
Binary files /dev/null and b/clock/Library/Artifacts/e5/e5b85685f6df69a0213197c54922d56d differ
diff --git a/clock/Library/Artifacts/e6/e60f9a721b10f9187f7e38e281f4f29e b/clock/Library/Artifacts/e6/e60f9a721b10f9187f7e38e281f4f29e
new file mode 100644
index 00000000..f714c4a6
Binary files /dev/null and b/clock/Library/Artifacts/e6/e60f9a721b10f9187f7e38e281f4f29e differ
diff --git a/clock/Library/Artifacts/e6/e68d9495434e7a8ac3562326f899b93c b/clock/Library/Artifacts/e6/e68d9495434e7a8ac3562326f899b93c
new file mode 100644
index 00000000..df1f86d7
Binary files /dev/null and b/clock/Library/Artifacts/e6/e68d9495434e7a8ac3562326f899b93c differ
diff --git a/clock/Library/Artifacts/e6/e68db983d463738f860f86e6f96893f9 b/clock/Library/Artifacts/e6/e68db983d463738f860f86e6f96893f9
new file mode 100644
index 00000000..a476bede
Binary files /dev/null and b/clock/Library/Artifacts/e6/e68db983d463738f860f86e6f96893f9 differ
diff --git a/clock/Library/Artifacts/e6/e6a2e1ab3d32fb7a09dd376d8bafdda7 b/clock/Library/Artifacts/e6/e6a2e1ab3d32fb7a09dd376d8bafdda7
new file mode 100644
index 00000000..bd5a9625
Binary files /dev/null and b/clock/Library/Artifacts/e6/e6a2e1ab3d32fb7a09dd376d8bafdda7 differ
diff --git a/clock/Library/Artifacts/e6/e6a85dc70b546ca3681d788b2cd9fa96 b/clock/Library/Artifacts/e6/e6a85dc70b546ca3681d788b2cd9fa96
new file mode 100644
index 00000000..ae0a56fb
Binary files /dev/null and b/clock/Library/Artifacts/e6/e6a85dc70b546ca3681d788b2cd9fa96 differ
diff --git a/clock/Library/Artifacts/e6/e6f59a3c8f620aa836ee8f448fb9a328 b/clock/Library/Artifacts/e6/e6f59a3c8f620aa836ee8f448fb9a328
new file mode 100644
index 00000000..271f0985
Binary files /dev/null and b/clock/Library/Artifacts/e6/e6f59a3c8f620aa836ee8f448fb9a328 differ
diff --git a/clock/Library/Artifacts/e7/e72ad4a58318403e0031388eea7ff45a b/clock/Library/Artifacts/e7/e72ad4a58318403e0031388eea7ff45a
new file mode 100644
index 00000000..3ac9d010
Binary files /dev/null and b/clock/Library/Artifacts/e7/e72ad4a58318403e0031388eea7ff45a differ
diff --git a/clock/Library/Artifacts/e7/e73be2f74e52eb6f620659cf5c7e5a5c b/clock/Library/Artifacts/e7/e73be2f74e52eb6f620659cf5c7e5a5c
new file mode 100644
index 00000000..090ac1f6
Binary files /dev/null and b/clock/Library/Artifacts/e7/e73be2f74e52eb6f620659cf5c7e5a5c differ
diff --git a/clock/Library/Artifacts/e7/e77bc2d92b714ccb89c26bae17c49722 b/clock/Library/Artifacts/e7/e77bc2d92b714ccb89c26bae17c49722
new file mode 100644
index 00000000..ab5d6f8c
Binary files /dev/null and b/clock/Library/Artifacts/e7/e77bc2d92b714ccb89c26bae17c49722 differ
diff --git a/clock/Library/Artifacts/e7/e77de76b35c5e88f8e4fa25f451f7f5c b/clock/Library/Artifacts/e7/e77de76b35c5e88f8e4fa25f451f7f5c
new file mode 100644
index 00000000..7197ef76
Binary files /dev/null and b/clock/Library/Artifacts/e7/e77de76b35c5e88f8e4fa25f451f7f5c differ
diff --git a/clock/Library/Artifacts/e7/e7c5095dc9418eed3e9b68d246d59e46 b/clock/Library/Artifacts/e7/e7c5095dc9418eed3e9b68d246d59e46
new file mode 100644
index 00000000..b427f12a
Binary files /dev/null and b/clock/Library/Artifacts/e7/e7c5095dc9418eed3e9b68d246d59e46 differ
diff --git a/clock/Library/Artifacts/e8/e80d3bb500f4e196898156df85fe2f8e b/clock/Library/Artifacts/e8/e80d3bb500f4e196898156df85fe2f8e
new file mode 100644
index 00000000..e3c67500
Binary files /dev/null and b/clock/Library/Artifacts/e8/e80d3bb500f4e196898156df85fe2f8e differ
diff --git a/clock/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 b/clock/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24
new file mode 100644
index 00000000..aabd9dff
Binary files /dev/null and b/clock/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 differ
diff --git a/clock/Library/Artifacts/e8/e839f0f1cd06e75e19e305d9ca08e8b5 b/clock/Library/Artifacts/e8/e839f0f1cd06e75e19e305d9ca08e8b5
new file mode 100644
index 00000000..03effe2c
Binary files /dev/null and b/clock/Library/Artifacts/e8/e839f0f1cd06e75e19e305d9ca08e8b5 differ
diff --git a/clock/Library/Artifacts/e8/e84f367ba071a639e568e845eac23bd9 b/clock/Library/Artifacts/e8/e84f367ba071a639e568e845eac23bd9
new file mode 100644
index 00000000..fd544cc1
Binary files /dev/null and b/clock/Library/Artifacts/e8/e84f367ba071a639e568e845eac23bd9 differ
diff --git a/clock/Library/Artifacts/e8/e8718c0fe6cef389fc729386da0568aa b/clock/Library/Artifacts/e8/e8718c0fe6cef389fc729386da0568aa
new file mode 100644
index 00000000..75f80174
Binary files /dev/null and b/clock/Library/Artifacts/e8/e8718c0fe6cef389fc729386da0568aa differ
diff --git a/clock/Library/Artifacts/e8/e8af794662ec93239a304a9cb42df650 b/clock/Library/Artifacts/e8/e8af794662ec93239a304a9cb42df650
new file mode 100644
index 00000000..cb092014
Binary files /dev/null and b/clock/Library/Artifacts/e8/e8af794662ec93239a304a9cb42df650 differ
diff --git a/clock/Library/Artifacts/e9/e91559de5a0c8c854c874348134fae4a b/clock/Library/Artifacts/e9/e91559de5a0c8c854c874348134fae4a
new file mode 100644
index 00000000..05855dc3
Binary files /dev/null and b/clock/Library/Artifacts/e9/e91559de5a0c8c854c874348134fae4a differ
diff --git a/clock/Library/Artifacts/e9/e92e622c8b7d96dc68f5ba636ebce2b2 b/clock/Library/Artifacts/e9/e92e622c8b7d96dc68f5ba636ebce2b2
new file mode 100644
index 00000000..30593167
Binary files /dev/null and b/clock/Library/Artifacts/e9/e92e622c8b7d96dc68f5ba636ebce2b2 differ
diff --git a/clock/Library/Artifacts/e9/e939072d0a0295f8768cf3eb2204c8ec b/clock/Library/Artifacts/e9/e939072d0a0295f8768cf3eb2204c8ec
new file mode 100644
index 00000000..1acb02d7
Binary files /dev/null and b/clock/Library/Artifacts/e9/e939072d0a0295f8768cf3eb2204c8ec differ
diff --git a/clock/Library/Artifacts/e9/e96ab8868e03bd26ab29c8ab78ad2221 b/clock/Library/Artifacts/e9/e96ab8868e03bd26ab29c8ab78ad2221
new file mode 100644
index 00000000..cf2132eb
Binary files /dev/null and b/clock/Library/Artifacts/e9/e96ab8868e03bd26ab29c8ab78ad2221 differ
diff --git a/clock/Library/Artifacts/e9/e973f5d6e7cab487cae08cbf50413c47 b/clock/Library/Artifacts/e9/e973f5d6e7cab487cae08cbf50413c47
new file mode 100644
index 00000000..a05d9e4e
Binary files /dev/null and b/clock/Library/Artifacts/e9/e973f5d6e7cab487cae08cbf50413c47 differ
diff --git a/clock/Library/Artifacts/e9/e9d3f9b76c57db6e0e0aa2e2e09c07ef b/clock/Library/Artifacts/e9/e9d3f9b76c57db6e0e0aa2e2e09c07ef
new file mode 100644
index 00000000..c5d8cfb0
Binary files /dev/null and b/clock/Library/Artifacts/e9/e9d3f9b76c57db6e0e0aa2e2e09c07ef differ
diff --git a/clock/Library/Artifacts/e9/e9ef91ffa5f8f0a443c8685253340eb4 b/clock/Library/Artifacts/e9/e9ef91ffa5f8f0a443c8685253340eb4
new file mode 100644
index 00000000..af4818df
Binary files /dev/null and b/clock/Library/Artifacts/e9/e9ef91ffa5f8f0a443c8685253340eb4 differ
diff --git a/clock/Library/Artifacts/ea/ea191d482bd4e41347c69feca8c438cf b/clock/Library/Artifacts/ea/ea191d482bd4e41347c69feca8c438cf
new file mode 100644
index 00000000..838690fb
Binary files /dev/null and b/clock/Library/Artifacts/ea/ea191d482bd4e41347c69feca8c438cf differ
diff --git a/clock/Library/Artifacts/ea/eaa644ea47c587f1c7e7df4c497c2a62 b/clock/Library/Artifacts/ea/eaa644ea47c587f1c7e7df4c497c2a62
new file mode 100644
index 00000000..26f3feb3
Binary files /dev/null and b/clock/Library/Artifacts/ea/eaa644ea47c587f1c7e7df4c497c2a62 differ
diff --git a/clock/Library/Artifacts/ea/eac9ddf715fb1f6ec2d4b869892dea3f b/clock/Library/Artifacts/ea/eac9ddf715fb1f6ec2d4b869892dea3f
new file mode 100644
index 00000000..04f73543
Binary files /dev/null and b/clock/Library/Artifacts/ea/eac9ddf715fb1f6ec2d4b869892dea3f differ
diff --git a/clock/Library/Artifacts/eb/eb011ce897c728cd3b3035429cc332ec b/clock/Library/Artifacts/eb/eb011ce897c728cd3b3035429cc332ec
new file mode 100644
index 00000000..dbc826e2
Binary files /dev/null and b/clock/Library/Artifacts/eb/eb011ce897c728cd3b3035429cc332ec differ
diff --git a/clock/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 b/clock/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5
new file mode 100644
index 00000000..a93caf9e
Binary files /dev/null and b/clock/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 differ
diff --git a/clock/Library/Artifacts/eb/eb9773442d1d552c583b364205f110ab b/clock/Library/Artifacts/eb/eb9773442d1d552c583b364205f110ab
new file mode 100644
index 00000000..9e71ab9d
Binary files /dev/null and b/clock/Library/Artifacts/eb/eb9773442d1d552c583b364205f110ab differ
diff --git a/clock/Library/Artifacts/eb/ebaf94fddec679bc67b6ab95030d443a b/clock/Library/Artifacts/eb/ebaf94fddec679bc67b6ab95030d443a
new file mode 100644
index 00000000..9d49fbbb
Binary files /dev/null and b/clock/Library/Artifacts/eb/ebaf94fddec679bc67b6ab95030d443a differ
diff --git a/clock/Library/Artifacts/eb/ebec9aaa74dd3938bac45929ad603f02 b/clock/Library/Artifacts/eb/ebec9aaa74dd3938bac45929ad603f02
new file mode 100644
index 00000000..2e35b873
Binary files /dev/null and b/clock/Library/Artifacts/eb/ebec9aaa74dd3938bac45929ad603f02 differ
diff --git a/clock/Library/Artifacts/ec/ec1b03dfd778a5020578d48ef6fe72b5 b/clock/Library/Artifacts/ec/ec1b03dfd778a5020578d48ef6fe72b5
new file mode 100644
index 00000000..5a9bfda7
Binary files /dev/null and b/clock/Library/Artifacts/ec/ec1b03dfd778a5020578d48ef6fe72b5 differ
diff --git a/clock/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 b/clock/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5
new file mode 100644
index 00000000..c95b1759
Binary files /dev/null and b/clock/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 differ
diff --git a/clock/Library/Artifacts/ec/ec4cc7f33a4da2185a2a7ce48d90527b b/clock/Library/Artifacts/ec/ec4cc7f33a4da2185a2a7ce48d90527b
new file mode 100644
index 00000000..b7fc704a
Binary files /dev/null and b/clock/Library/Artifacts/ec/ec4cc7f33a4da2185a2a7ce48d90527b differ
diff --git a/clock/Library/Artifacts/ed/ed35936990124603dfa13d7c95f2d9c6 b/clock/Library/Artifacts/ed/ed35936990124603dfa13d7c95f2d9c6
new file mode 100644
index 00000000..7c5c5762
Binary files /dev/null and b/clock/Library/Artifacts/ed/ed35936990124603dfa13d7c95f2d9c6 differ
diff --git a/clock/Library/Artifacts/ed/ed45a2e1a93aff0eac16a7d70ed38c3f b/clock/Library/Artifacts/ed/ed45a2e1a93aff0eac16a7d70ed38c3f
new file mode 100644
index 00000000..34ccccff
Binary files /dev/null and b/clock/Library/Artifacts/ed/ed45a2e1a93aff0eac16a7d70ed38c3f differ
diff --git a/clock/Library/Artifacts/ed/ed60dd80cf974e1dc019ea96f0b4cec1 b/clock/Library/Artifacts/ed/ed60dd80cf974e1dc019ea96f0b4cec1
new file mode 100644
index 00000000..7c86e602
Binary files /dev/null and b/clock/Library/Artifacts/ed/ed60dd80cf974e1dc019ea96f0b4cec1 differ
diff --git a/clock/Library/Artifacts/ed/ed8da21859f45d8433af7fcfde6c1e3b b/clock/Library/Artifacts/ed/ed8da21859f45d8433af7fcfde6c1e3b
new file mode 100644
index 00000000..67a374ec
Binary files /dev/null and b/clock/Library/Artifacts/ed/ed8da21859f45d8433af7fcfde6c1e3b differ
diff --git a/clock/Library/Artifacts/ed/ed95068bab1b6a8453e666159f8a5935 b/clock/Library/Artifacts/ed/ed95068bab1b6a8453e666159f8a5935
new file mode 100644
index 00000000..fc1c510d
Binary files /dev/null and b/clock/Library/Artifacts/ed/ed95068bab1b6a8453e666159f8a5935 differ
diff --git a/clock/Library/Artifacts/ed/edb8f135a1b1e6209c72af4d3c19d897 b/clock/Library/Artifacts/ed/edb8f135a1b1e6209c72af4d3c19d897
new file mode 100644
index 00000000..ca5177bd
Binary files /dev/null and b/clock/Library/Artifacts/ed/edb8f135a1b1e6209c72af4d3c19d897 differ
diff --git a/clock/Library/Artifacts/ed/edc5bb0e8cb1b690698b3210f2928184 b/clock/Library/Artifacts/ed/edc5bb0e8cb1b690698b3210f2928184
new file mode 100644
index 00000000..195b25e4
Binary files /dev/null and b/clock/Library/Artifacts/ed/edc5bb0e8cb1b690698b3210f2928184 differ
diff --git a/clock/Library/Artifacts/ed/edc7f81088b9a1d66581ade1c1d6c814 b/clock/Library/Artifacts/ed/edc7f81088b9a1d66581ade1c1d6c814
new file mode 100644
index 00000000..f83e3a06
Binary files /dev/null and b/clock/Library/Artifacts/ed/edc7f81088b9a1d66581ade1c1d6c814 differ
diff --git a/clock/Library/Artifacts/ed/edccc12187fe339bfc3323b1b7c26ab1 b/clock/Library/Artifacts/ed/edccc12187fe339bfc3323b1b7c26ab1
new file mode 100644
index 00000000..3387c6b6
Binary files /dev/null and b/clock/Library/Artifacts/ed/edccc12187fe339bfc3323b1b7c26ab1 differ
diff --git a/clock/Library/Artifacts/ed/ede51d432ed06f325baf45eef2e2ad2d b/clock/Library/Artifacts/ed/ede51d432ed06f325baf45eef2e2ad2d
new file mode 100644
index 00000000..48a283ce
Binary files /dev/null and b/clock/Library/Artifacts/ed/ede51d432ed06f325baf45eef2e2ad2d differ
diff --git a/clock/Library/Artifacts/ed/edf15aaaac7e1751ccf2ebc89eb1ba18 b/clock/Library/Artifacts/ed/edf15aaaac7e1751ccf2ebc89eb1ba18
new file mode 100644
index 00000000..5840ceca
Binary files /dev/null and b/clock/Library/Artifacts/ed/edf15aaaac7e1751ccf2ebc89eb1ba18 differ
diff --git a/clock/Library/Artifacts/ed/edf92ac2d1475d8fb5c66013b423955e b/clock/Library/Artifacts/ed/edf92ac2d1475d8fb5c66013b423955e
new file mode 100644
index 00000000..956713f9
Binary files /dev/null and b/clock/Library/Artifacts/ed/edf92ac2d1475d8fb5c66013b423955e differ
diff --git a/clock/Library/Artifacts/ee/ee07c40573e5f361351a0bd0c59d48ed b/clock/Library/Artifacts/ee/ee07c40573e5f361351a0bd0c59d48ed
new file mode 100644
index 00000000..5f13c8a8
Binary files /dev/null and b/clock/Library/Artifacts/ee/ee07c40573e5f361351a0bd0c59d48ed differ
diff --git a/clock/Library/Artifacts/ee/ee5f3e9912d8db3d893122f790514020 b/clock/Library/Artifacts/ee/ee5f3e9912d8db3d893122f790514020
new file mode 100644
index 00000000..fd9d3445
Binary files /dev/null and b/clock/Library/Artifacts/ee/ee5f3e9912d8db3d893122f790514020 differ
diff --git a/clock/Library/Artifacts/ee/ee67636ee13501776afac46e812b74cb b/clock/Library/Artifacts/ee/ee67636ee13501776afac46e812b74cb
new file mode 100644
index 00000000..f59a62f3
Binary files /dev/null and b/clock/Library/Artifacts/ee/ee67636ee13501776afac46e812b74cb differ
diff --git a/clock/Library/Artifacts/ee/ee6fd3834af039b781300a0a8df1c494 b/clock/Library/Artifacts/ee/ee6fd3834af039b781300a0a8df1c494
new file mode 100644
index 00000000..3b01cbaf
Binary files /dev/null and b/clock/Library/Artifacts/ee/ee6fd3834af039b781300a0a8df1c494 differ
diff --git a/clock/Library/Artifacts/ee/ee72badd4bc1bafba85bca1c75f3f025 b/clock/Library/Artifacts/ee/ee72badd4bc1bafba85bca1c75f3f025
new file mode 100644
index 00000000..3edf0151
Binary files /dev/null and b/clock/Library/Artifacts/ee/ee72badd4bc1bafba85bca1c75f3f025 differ
diff --git a/clock/Library/Artifacts/ee/ee90a95d6e735c60dc6cee95bf393459 b/clock/Library/Artifacts/ee/ee90a95d6e735c60dc6cee95bf393459
new file mode 100644
index 00000000..7007d356
Binary files /dev/null and b/clock/Library/Artifacts/ee/ee90a95d6e735c60dc6cee95bf393459 differ
diff --git a/clock/Library/Artifacts/ee/eec987149860d20174a89f6940e0218a b/clock/Library/Artifacts/ee/eec987149860d20174a89f6940e0218a
new file mode 100644
index 00000000..b6a65c1f
Binary files /dev/null and b/clock/Library/Artifacts/ee/eec987149860d20174a89f6940e0218a differ
diff --git a/clock/Library/Artifacts/ee/eee2a8c37ef996bb5b7c8a69ce3819e2 b/clock/Library/Artifacts/ee/eee2a8c37ef996bb5b7c8a69ce3819e2
new file mode 100644
index 00000000..dc979051
Binary files /dev/null and b/clock/Library/Artifacts/ee/eee2a8c37ef996bb5b7c8a69ce3819e2 differ
diff --git a/clock/Library/Artifacts/ef/ef0813c4ecf503756ed74641aeee91b0 b/clock/Library/Artifacts/ef/ef0813c4ecf503756ed74641aeee91b0
new file mode 100644
index 00000000..1dc652d0
Binary files /dev/null and b/clock/Library/Artifacts/ef/ef0813c4ecf503756ed74641aeee91b0 differ
diff --git a/clock/Library/Artifacts/ef/ef6476486756ce2a3f3f161cb81c6fc1 b/clock/Library/Artifacts/ef/ef6476486756ce2a3f3f161cb81c6fc1
new file mode 100644
index 00000000..d00b0f7a
Binary files /dev/null and b/clock/Library/Artifacts/ef/ef6476486756ce2a3f3f161cb81c6fc1 differ
diff --git a/clock/Library/Artifacts/ef/ef817c02259d25f6fb62b0b62f902635 b/clock/Library/Artifacts/ef/ef817c02259d25f6fb62b0b62f902635
new file mode 100644
index 00000000..177b443e
Binary files /dev/null and b/clock/Library/Artifacts/ef/ef817c02259d25f6fb62b0b62f902635 differ
diff --git a/clock/Library/Artifacts/f0/f003bb0b2f2ed0119d1734c76ddb95c5 b/clock/Library/Artifacts/f0/f003bb0b2f2ed0119d1734c76ddb95c5
new file mode 100644
index 00000000..fd1e5777
Binary files /dev/null and b/clock/Library/Artifacts/f0/f003bb0b2f2ed0119d1734c76ddb95c5 differ
diff --git a/clock/Library/Artifacts/f0/f022fbc42f9dd5653a6c6ff19c483b82 b/clock/Library/Artifacts/f0/f022fbc42f9dd5653a6c6ff19c483b82
new file mode 100644
index 00000000..e9f77a94
Binary files /dev/null and b/clock/Library/Artifacts/f0/f022fbc42f9dd5653a6c6ff19c483b82 differ
diff --git a/clock/Library/Artifacts/f0/f0388a938d07040cb4e4b1c932980318 b/clock/Library/Artifacts/f0/f0388a938d07040cb4e4b1c932980318
new file mode 100644
index 00000000..f069c6cf
Binary files /dev/null and b/clock/Library/Artifacts/f0/f0388a938d07040cb4e4b1c932980318 differ
diff --git a/clock/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 b/clock/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5
new file mode 100644
index 00000000..62300501
Binary files /dev/null and b/clock/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 differ
diff --git a/clock/Library/Artifacts/f0/f0a89843ebe75712ee2d63a49558eea1 b/clock/Library/Artifacts/f0/f0a89843ebe75712ee2d63a49558eea1
new file mode 100644
index 00000000..6a18e612
Binary files /dev/null and b/clock/Library/Artifacts/f0/f0a89843ebe75712ee2d63a49558eea1 differ
diff --git a/clock/Library/Artifacts/f0/f0ee502363cfd96b48356104ba9f6576 b/clock/Library/Artifacts/f0/f0ee502363cfd96b48356104ba9f6576
new file mode 100644
index 00000000..b3e94a50
Binary files /dev/null and b/clock/Library/Artifacts/f0/f0ee502363cfd96b48356104ba9f6576 differ
diff --git a/clock/Library/Artifacts/f1/f1661cca63eb403b447dbb15acd3843c b/clock/Library/Artifacts/f1/f1661cca63eb403b447dbb15acd3843c
new file mode 100644
index 00000000..992cbba3
Binary files /dev/null and b/clock/Library/Artifacts/f1/f1661cca63eb403b447dbb15acd3843c differ
diff --git a/clock/Library/Artifacts/f1/f1816ffbb0efe0169aca603d8c52867a b/clock/Library/Artifacts/f1/f1816ffbb0efe0169aca603d8c52867a
new file mode 100644
index 00000000..36e8c489
Binary files /dev/null and b/clock/Library/Artifacts/f1/f1816ffbb0efe0169aca603d8c52867a differ
diff --git a/clock/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 b/clock/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5
new file mode 100644
index 00000000..bd13f390
Binary files /dev/null and b/clock/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 differ
diff --git a/clock/Library/Artifacts/f1/f1ee7753a77046d2414c001fae46c6d5 b/clock/Library/Artifacts/f1/f1ee7753a77046d2414c001fae46c6d5
new file mode 100644
index 00000000..f43763af
Binary files /dev/null and b/clock/Library/Artifacts/f1/f1ee7753a77046d2414c001fae46c6d5 differ
diff --git a/clock/Library/Artifacts/f2/f21f4c08dab378b85fb098c28669de38 b/clock/Library/Artifacts/f2/f21f4c08dab378b85fb098c28669de38
new file mode 100644
index 00000000..0fe61a4e
Binary files /dev/null and b/clock/Library/Artifacts/f2/f21f4c08dab378b85fb098c28669de38 differ
diff --git a/clock/Library/Artifacts/f2/f241515750f344983e0735845923687c b/clock/Library/Artifacts/f2/f241515750f344983e0735845923687c
new file mode 100644
index 00000000..6d41bcf7
Binary files /dev/null and b/clock/Library/Artifacts/f2/f241515750f344983e0735845923687c differ
diff --git a/clock/Library/Artifacts/f2/f26351a1bb1c6c945b13add7f66380eb b/clock/Library/Artifacts/f2/f26351a1bb1c6c945b13add7f66380eb
new file mode 100644
index 00000000..8a2a18c3
Binary files /dev/null and b/clock/Library/Artifacts/f2/f26351a1bb1c6c945b13add7f66380eb differ
diff --git a/clock/Library/Artifacts/f2/f2e6c6aaf3402e015c4694aaa855a96d b/clock/Library/Artifacts/f2/f2e6c6aaf3402e015c4694aaa855a96d
new file mode 100644
index 00000000..b5708fc4
Binary files /dev/null and b/clock/Library/Artifacts/f2/f2e6c6aaf3402e015c4694aaa855a96d differ
diff --git a/clock/Library/Artifacts/f2/f2f31663ee0e896f11aa22008652c101 b/clock/Library/Artifacts/f2/f2f31663ee0e896f11aa22008652c101
new file mode 100644
index 00000000..916ed135
Binary files /dev/null and b/clock/Library/Artifacts/f2/f2f31663ee0e896f11aa22008652c101 differ
diff --git a/clock/Library/Artifacts/f3/f306b5ee8506923b1bf045648f1258b9 b/clock/Library/Artifacts/f3/f306b5ee8506923b1bf045648f1258b9
new file mode 100644
index 00000000..5685647a
Binary files /dev/null and b/clock/Library/Artifacts/f3/f306b5ee8506923b1bf045648f1258b9 differ
diff --git a/clock/Library/Artifacts/f3/f3264405a3f155edae1f8ad194a64078 b/clock/Library/Artifacts/f3/f3264405a3f155edae1f8ad194a64078
new file mode 100644
index 00000000..60e69177
Binary files /dev/null and b/clock/Library/Artifacts/f3/f3264405a3f155edae1f8ad194a64078 differ
diff --git a/clock/Library/Artifacts/f3/f351f8a4fc444dc00af8153cd1f038f9 b/clock/Library/Artifacts/f3/f351f8a4fc444dc00af8153cd1f038f9
new file mode 100644
index 00000000..f0df9735
Binary files /dev/null and b/clock/Library/Artifacts/f3/f351f8a4fc444dc00af8153cd1f038f9 differ
diff --git a/clock/Library/Artifacts/f4/f42b8411c93f21ec7e00282af8afd634 b/clock/Library/Artifacts/f4/f42b8411c93f21ec7e00282af8afd634
new file mode 100644
index 00000000..b2fbe0c6
Binary files /dev/null and b/clock/Library/Artifacts/f4/f42b8411c93f21ec7e00282af8afd634 differ
diff --git a/clock/Library/Artifacts/f4/f4c842d9dff66229677756f131abd3cf b/clock/Library/Artifacts/f4/f4c842d9dff66229677756f131abd3cf
new file mode 100644
index 00000000..9f200f77
Binary files /dev/null and b/clock/Library/Artifacts/f4/f4c842d9dff66229677756f131abd3cf differ
diff --git a/clock/Library/Artifacts/f5/f508e00ff763d0d5351a9e50b88bf327 b/clock/Library/Artifacts/f5/f508e00ff763d0d5351a9e50b88bf327
new file mode 100644
index 00000000..3e5af6e9
Binary files /dev/null and b/clock/Library/Artifacts/f5/f508e00ff763d0d5351a9e50b88bf327 differ
diff --git a/clock/Library/Artifacts/f5/f50a0dbaf1254082efb97bcd967367ca b/clock/Library/Artifacts/f5/f50a0dbaf1254082efb97bcd967367ca
new file mode 100644
index 00000000..a06f680c
Binary files /dev/null and b/clock/Library/Artifacts/f5/f50a0dbaf1254082efb97bcd967367ca differ
diff --git a/clock/Library/Artifacts/f5/f50fac9cb45ef3167d74c0431c95a513 b/clock/Library/Artifacts/f5/f50fac9cb45ef3167d74c0431c95a513
new file mode 100644
index 00000000..e272015b
Binary files /dev/null and b/clock/Library/Artifacts/f5/f50fac9cb45ef3167d74c0431c95a513 differ
diff --git a/clock/Library/Artifacts/f5/f54ee28f332a3f36e9ee788570d114be b/clock/Library/Artifacts/f5/f54ee28f332a3f36e9ee788570d114be
new file mode 100644
index 00000000..8cbdfa94
Binary files /dev/null and b/clock/Library/Artifacts/f5/f54ee28f332a3f36e9ee788570d114be differ
diff --git a/clock/Library/Artifacts/f5/f55f5bc9daa73c142822b6b85dd43c64 b/clock/Library/Artifacts/f5/f55f5bc9daa73c142822b6b85dd43c64
new file mode 100644
index 00000000..c926d7fa
Binary files /dev/null and b/clock/Library/Artifacts/f5/f55f5bc9daa73c142822b6b85dd43c64 differ
diff --git a/clock/Library/Artifacts/f5/f56ae0ad08cbec26c54bf0735ac4185c b/clock/Library/Artifacts/f5/f56ae0ad08cbec26c54bf0735ac4185c
new file mode 100644
index 00000000..2a821635
Binary files /dev/null and b/clock/Library/Artifacts/f5/f56ae0ad08cbec26c54bf0735ac4185c differ
diff --git a/clock/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 b/clock/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814
new file mode 100644
index 00000000..b49e708d
Binary files /dev/null and b/clock/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 differ
diff --git a/clock/Library/Artifacts/f5/f5ab41285e9e8521984adb8fdbb23540 b/clock/Library/Artifacts/f5/f5ab41285e9e8521984adb8fdbb23540
new file mode 100644
index 00000000..1e4c89a2
Binary files /dev/null and b/clock/Library/Artifacts/f5/f5ab41285e9e8521984adb8fdbb23540 differ
diff --git a/clock/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe b/clock/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe
new file mode 100644
index 00000000..3b1c9efb
Binary files /dev/null and b/clock/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe differ
diff --git a/clock/Library/Artifacts/f5/f5c79db07e06ac1e7b3e3127302add04 b/clock/Library/Artifacts/f5/f5c79db07e06ac1e7b3e3127302add04
new file mode 100644
index 00000000..69ed0ec4
Binary files /dev/null and b/clock/Library/Artifacts/f5/f5c79db07e06ac1e7b3e3127302add04 differ
diff --git a/clock/Library/Artifacts/f6/f616616cfe31f253146f3c392eb8d4fc b/clock/Library/Artifacts/f6/f616616cfe31f253146f3c392eb8d4fc
new file mode 100644
index 00000000..fe4897f5
Binary files /dev/null and b/clock/Library/Artifacts/f6/f616616cfe31f253146f3c392eb8d4fc differ
diff --git a/clock/Library/Artifacts/f6/f617cdc62beb04713d9cd8f8eda5c3d2 b/clock/Library/Artifacts/f6/f617cdc62beb04713d9cd8f8eda5c3d2
new file mode 100644
index 00000000..3e7df8fd
Binary files /dev/null and b/clock/Library/Artifacts/f6/f617cdc62beb04713d9cd8f8eda5c3d2 differ
diff --git a/clock/Library/Artifacts/f6/f6a0a79bb4a48ab28e6c3572d4511bb2 b/clock/Library/Artifacts/f6/f6a0a79bb4a48ab28e6c3572d4511bb2
new file mode 100644
index 00000000..4df5c4e9
Binary files /dev/null and b/clock/Library/Artifacts/f6/f6a0a79bb4a48ab28e6c3572d4511bb2 differ
diff --git a/clock/Library/Artifacts/f6/f6b6d92af9b21dac2a7f4e113e9bff70 b/clock/Library/Artifacts/f6/f6b6d92af9b21dac2a7f4e113e9bff70
new file mode 100644
index 00000000..606ae006
Binary files /dev/null and b/clock/Library/Artifacts/f6/f6b6d92af9b21dac2a7f4e113e9bff70 differ
diff --git a/clock/Library/Artifacts/f6/f6cc5fc7c85f46ab6a83786c58fd744a b/clock/Library/Artifacts/f6/f6cc5fc7c85f46ab6a83786c58fd744a
new file mode 100644
index 00000000..a42a1250
Binary files /dev/null and b/clock/Library/Artifacts/f6/f6cc5fc7c85f46ab6a83786c58fd744a differ
diff --git a/clock/Library/Artifacts/f6/f6e44bcfa547cf34cbde67029cc9eee9 b/clock/Library/Artifacts/f6/f6e44bcfa547cf34cbde67029cc9eee9
new file mode 100644
index 00000000..232fb47d
Binary files /dev/null and b/clock/Library/Artifacts/f6/f6e44bcfa547cf34cbde67029cc9eee9 differ
diff --git a/clock/Library/Artifacts/f6/f6f6faf1325b7d31d98ccaf64ccebf1c b/clock/Library/Artifacts/f6/f6f6faf1325b7d31d98ccaf64ccebf1c
new file mode 100644
index 00000000..49ce0104
Binary files /dev/null and b/clock/Library/Artifacts/f6/f6f6faf1325b7d31d98ccaf64ccebf1c differ
diff --git a/clock/Library/Artifacts/f7/f7124e80a00e0e8b0c839ecb50654ba9 b/clock/Library/Artifacts/f7/f7124e80a00e0e8b0c839ecb50654ba9
new file mode 100644
index 00000000..fa2567fa
Binary files /dev/null and b/clock/Library/Artifacts/f7/f7124e80a00e0e8b0c839ecb50654ba9 differ
diff --git a/clock/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 b/clock/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4
new file mode 100644
index 00000000..4e07cce2
Binary files /dev/null and b/clock/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 differ
diff --git a/clock/Library/Artifacts/f7/f75241f7a23c61e7d97ab7e00e2fd530 b/clock/Library/Artifacts/f7/f75241f7a23c61e7d97ab7e00e2fd530
new file mode 100644
index 00000000..3245154a
Binary files /dev/null and b/clock/Library/Artifacts/f7/f75241f7a23c61e7d97ab7e00e2fd530 differ
diff --git a/clock/Library/Artifacts/f7/f75853e7eeb98f9cfd9a30d960bfb9ab b/clock/Library/Artifacts/f7/f75853e7eeb98f9cfd9a30d960bfb9ab
new file mode 100644
index 00000000..032bb93d
Binary files /dev/null and b/clock/Library/Artifacts/f7/f75853e7eeb98f9cfd9a30d960bfb9ab differ
diff --git a/clock/Library/Artifacts/f7/f7abf8d4b0fddfca0fe7e5a5338a5439 b/clock/Library/Artifacts/f7/f7abf8d4b0fddfca0fe7e5a5338a5439
new file mode 100644
index 00000000..f4094dbc
Binary files /dev/null and b/clock/Library/Artifacts/f7/f7abf8d4b0fddfca0fe7e5a5338a5439 differ
diff --git a/clock/Library/Artifacts/f8/f833d3db95df2273acc9c08f4564a021 b/clock/Library/Artifacts/f8/f833d3db95df2273acc9c08f4564a021
new file mode 100644
index 00000000..52b20507
Binary files /dev/null and b/clock/Library/Artifacts/f8/f833d3db95df2273acc9c08f4564a021 differ
diff --git a/clock/Library/Artifacts/f8/f8a4c678d511f1ea2520e0edcc6f460a b/clock/Library/Artifacts/f8/f8a4c678d511f1ea2520e0edcc6f460a
new file mode 100644
index 00000000..c5d842fa
Binary files /dev/null and b/clock/Library/Artifacts/f8/f8a4c678d511f1ea2520e0edcc6f460a differ
diff --git a/clock/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 b/clock/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8
new file mode 100644
index 00000000..d6c09bb0
Binary files /dev/null and b/clock/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 differ
diff --git a/clock/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 b/clock/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5
new file mode 100644
index 00000000..0b0c07a7
Binary files /dev/null and b/clock/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 differ
diff --git a/clock/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 b/clock/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7
new file mode 100644
index 00000000..b5c68365
Binary files /dev/null and b/clock/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 differ
diff --git a/clock/Library/Artifacts/f9/f97133de774d064f62b388f7bfbd4efd b/clock/Library/Artifacts/f9/f97133de774d064f62b388f7bfbd4efd
new file mode 100644
index 00000000..bf9d6baa
Binary files /dev/null and b/clock/Library/Artifacts/f9/f97133de774d064f62b388f7bfbd4efd differ
diff --git a/clock/Library/Artifacts/f9/f9b3a09b7d950fdab53299c4dbfebae6 b/clock/Library/Artifacts/f9/f9b3a09b7d950fdab53299c4dbfebae6
new file mode 100644
index 00000000..f2113023
Binary files /dev/null and b/clock/Library/Artifacts/f9/f9b3a09b7d950fdab53299c4dbfebae6 differ
diff --git a/clock/Library/Artifacts/f9/f9d7705f5cd923d5dcdd861e642c7d6d b/clock/Library/Artifacts/f9/f9d7705f5cd923d5dcdd861e642c7d6d
new file mode 100644
index 00000000..32b70580
Binary files /dev/null and b/clock/Library/Artifacts/f9/f9d7705f5cd923d5dcdd861e642c7d6d differ
diff --git a/clock/Library/Artifacts/f9/f9fe31f111b4518c666f085009a2500f b/clock/Library/Artifacts/f9/f9fe31f111b4518c666f085009a2500f
new file mode 100644
index 00000000..bcbfd847
Binary files /dev/null and b/clock/Library/Artifacts/f9/f9fe31f111b4518c666f085009a2500f differ
diff --git a/clock/Library/Artifacts/fa/fa00d416af43b94d9bf1242bf44c5f68 b/clock/Library/Artifacts/fa/fa00d416af43b94d9bf1242bf44c5f68
new file mode 100644
index 00000000..403bff86
Binary files /dev/null and b/clock/Library/Artifacts/fa/fa00d416af43b94d9bf1242bf44c5f68 differ
diff --git a/clock/Library/Artifacts/fa/fa712b8db8087773393e5491ccf8a0e9 b/clock/Library/Artifacts/fa/fa712b8db8087773393e5491ccf8a0e9
new file mode 100644
index 00000000..45751718
Binary files /dev/null and b/clock/Library/Artifacts/fa/fa712b8db8087773393e5491ccf8a0e9 differ
diff --git a/clock/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 b/clock/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6
new file mode 100644
index 00000000..f9dff941
Binary files /dev/null and b/clock/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 differ
diff --git a/clock/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 b/clock/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7
new file mode 100644
index 00000000..b4ef869c
Binary files /dev/null and b/clock/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 differ
diff --git a/clock/Library/Artifacts/fb/fb3dbe7544a7c378273fc8af6fdd22db b/clock/Library/Artifacts/fb/fb3dbe7544a7c378273fc8af6fdd22db
new file mode 100644
index 00000000..cf765d7c
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb3dbe7544a7c378273fc8af6fdd22db differ
diff --git a/clock/Library/Artifacts/fb/fb5772bdd41b9f8b60d250461965df07 b/clock/Library/Artifacts/fb/fb5772bdd41b9f8b60d250461965df07
new file mode 100644
index 00000000..c4096924
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb5772bdd41b9f8b60d250461965df07 differ
diff --git a/clock/Library/Artifacts/fb/fb6ff068b11538f5fd52571e34da9940 b/clock/Library/Artifacts/fb/fb6ff068b11538f5fd52571e34da9940
new file mode 100644
index 00000000..0451e3ee
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb6ff068b11538f5fd52571e34da9940 differ
diff --git a/clock/Library/Artifacts/fb/fb8549a1519ef011ce19d60d1aea0e18 b/clock/Library/Artifacts/fb/fb8549a1519ef011ce19d60d1aea0e18
new file mode 100644
index 00000000..9e14e44a
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb8549a1519ef011ce19d60d1aea0e18 differ
diff --git a/clock/Library/Artifacts/fb/fb8f5f097c97a2bfebd3107cf81c1d3f b/clock/Library/Artifacts/fb/fb8f5f097c97a2bfebd3107cf81c1d3f
new file mode 100644
index 00000000..b74807d9
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb8f5f097c97a2bfebd3107cf81c1d3f differ
diff --git a/clock/Library/Artifacts/fb/fb94b5bef7601acf1efde65d52429c78 b/clock/Library/Artifacts/fb/fb94b5bef7601acf1efde65d52429c78
new file mode 100644
index 00000000..9a4c7a33
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb94b5bef7601acf1efde65d52429c78 differ
diff --git a/clock/Library/Artifacts/fb/fb965ff59b846826e79da2124e705147 b/clock/Library/Artifacts/fb/fb965ff59b846826e79da2124e705147
new file mode 100644
index 00000000..2a3644a4
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb965ff59b846826e79da2124e705147 differ
diff --git a/clock/Library/Artifacts/fb/fb9b9b0a0ecfd574255e9d90ca9b0262 b/clock/Library/Artifacts/fb/fb9b9b0a0ecfd574255e9d90ca9b0262
new file mode 100644
index 00000000..63e431f7
Binary files /dev/null and b/clock/Library/Artifacts/fb/fb9b9b0a0ecfd574255e9d90ca9b0262 differ
diff --git a/clock/Library/Artifacts/fb/fba854a101d2a556ad7d80a6fa6bd495 b/clock/Library/Artifacts/fb/fba854a101d2a556ad7d80a6fa6bd495
new file mode 100644
index 00000000..2353889f
Binary files /dev/null and b/clock/Library/Artifacts/fb/fba854a101d2a556ad7d80a6fa6bd495 differ
diff --git a/clock/Library/Artifacts/fb/fbc31d0372e95e9e4cb4bef559687c0d b/clock/Library/Artifacts/fb/fbc31d0372e95e9e4cb4bef559687c0d
new file mode 100644
index 00000000..76bef0d1
Binary files /dev/null and b/clock/Library/Artifacts/fb/fbc31d0372e95e9e4cb4bef559687c0d differ
diff --git a/clock/Library/Artifacts/fb/fbc357be8cde7a3088398741ece804d3 b/clock/Library/Artifacts/fb/fbc357be8cde7a3088398741ece804d3
new file mode 100644
index 00000000..8a81b336
Binary files /dev/null and b/clock/Library/Artifacts/fb/fbc357be8cde7a3088398741ece804d3 differ
diff --git a/clock/Library/Artifacts/fb/fbf22c260d2879c09d22479b7da37871 b/clock/Library/Artifacts/fb/fbf22c260d2879c09d22479b7da37871
new file mode 100644
index 00000000..7cfdfbb1
Binary files /dev/null and b/clock/Library/Artifacts/fb/fbf22c260d2879c09d22479b7da37871 differ
diff --git a/clock/Library/Artifacts/fc/fc0f48a7da5c647134100cf0087504e2 b/clock/Library/Artifacts/fc/fc0f48a7da5c647134100cf0087504e2
new file mode 100644
index 00000000..251edf36
Binary files /dev/null and b/clock/Library/Artifacts/fc/fc0f48a7da5c647134100cf0087504e2 differ
diff --git a/clock/Library/Artifacts/fc/fc3ea1f0a3557bf7f0489b37e6f744e0 b/clock/Library/Artifacts/fc/fc3ea1f0a3557bf7f0489b37e6f744e0
new file mode 100644
index 00000000..d0e82b34
Binary files /dev/null and b/clock/Library/Artifacts/fc/fc3ea1f0a3557bf7f0489b37e6f744e0 differ
diff --git a/clock/Library/Artifacts/fc/fc594457b2d4aa0e4b72772e5e906936 b/clock/Library/Artifacts/fc/fc594457b2d4aa0e4b72772e5e906936
new file mode 100644
index 00000000..22764b2b
Binary files /dev/null and b/clock/Library/Artifacts/fc/fc594457b2d4aa0e4b72772e5e906936 differ
diff --git a/clock/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 b/clock/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680
new file mode 100644
index 00000000..966aac25
Binary files /dev/null and b/clock/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 differ
diff --git a/clock/Library/Artifacts/fc/fc8eac8bb22d45087c0256fdfbf0f4b3 b/clock/Library/Artifacts/fc/fc8eac8bb22d45087c0256fdfbf0f4b3
new file mode 100644
index 00000000..8356559c
Binary files /dev/null and b/clock/Library/Artifacts/fc/fc8eac8bb22d45087c0256fdfbf0f4b3 differ
diff --git a/clock/Library/Artifacts/fc/fc987fc24a13b5f8156aad5a8fe99ac7 b/clock/Library/Artifacts/fc/fc987fc24a13b5f8156aad5a8fe99ac7
new file mode 100644
index 00000000..5357cd25
Binary files /dev/null and b/clock/Library/Artifacts/fc/fc987fc24a13b5f8156aad5a8fe99ac7 differ
diff --git a/clock/Library/Artifacts/fc/fcc369e8147b4b65446223954dd8b46a b/clock/Library/Artifacts/fc/fcc369e8147b4b65446223954dd8b46a
new file mode 100644
index 00000000..781ea97c
Binary files /dev/null and b/clock/Library/Artifacts/fc/fcc369e8147b4b65446223954dd8b46a differ
diff --git a/clock/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 b/clock/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8
new file mode 100644
index 00000000..5da373dd
Binary files /dev/null and b/clock/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 differ
diff --git a/clock/Library/Artifacts/fd/fd1910c74251c0c6f9c777c868af57a9 b/clock/Library/Artifacts/fd/fd1910c74251c0c6f9c777c868af57a9
new file mode 100644
index 00000000..c7edb649
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd1910c74251c0c6f9c777c868af57a9 differ
diff --git a/clock/Library/Artifacts/fd/fd1f8335eac3be391b4740e0effa9f52 b/clock/Library/Artifacts/fd/fd1f8335eac3be391b4740e0effa9f52
new file mode 100644
index 00000000..4f46daaa
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd1f8335eac3be391b4740e0effa9f52 differ
diff --git a/clock/Library/Artifacts/fd/fd46cefc90c49cc9fb06f5b1ebfba198 b/clock/Library/Artifacts/fd/fd46cefc90c49cc9fb06f5b1ebfba198
new file mode 100644
index 00000000..003ddf3f
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd46cefc90c49cc9fb06f5b1ebfba198 differ
diff --git a/clock/Library/Artifacts/fd/fd4aa891e185ff99be4f797e95683b45 b/clock/Library/Artifacts/fd/fd4aa891e185ff99be4f797e95683b45
new file mode 100644
index 00000000..7a577aa7
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd4aa891e185ff99be4f797e95683b45 differ
diff --git a/clock/Library/Artifacts/fd/fd51ca6a9a03eb18fc832fbeba867527 b/clock/Library/Artifacts/fd/fd51ca6a9a03eb18fc832fbeba867527
new file mode 100644
index 00000000..60a90ea1
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd51ca6a9a03eb18fc832fbeba867527 differ
diff --git a/clock/Library/Artifacts/fd/fd625657d129b8435888785d3d2d3000 b/clock/Library/Artifacts/fd/fd625657d129b8435888785d3d2d3000
new file mode 100644
index 00000000..bd79f56e
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd625657d129b8435888785d3d2d3000 differ
diff --git a/clock/Library/Artifacts/fd/fd76f675f422d5030a3094eb5fbac599 b/clock/Library/Artifacts/fd/fd76f675f422d5030a3094eb5fbac599
new file mode 100644
index 00000000..8d3275d4
Binary files /dev/null and b/clock/Library/Artifacts/fd/fd76f675f422d5030a3094eb5fbac599 differ
diff --git a/clock/Library/Artifacts/fd/fdad2dde8f70f58ab89b763bd2e813e5 b/clock/Library/Artifacts/fd/fdad2dde8f70f58ab89b763bd2e813e5
new file mode 100644
index 00000000..e7ad84b8
Binary files /dev/null and b/clock/Library/Artifacts/fd/fdad2dde8f70f58ab89b763bd2e813e5 differ
diff --git a/clock/Library/Artifacts/fd/fdb49bb1528949372ae98385f530ed19 b/clock/Library/Artifacts/fd/fdb49bb1528949372ae98385f530ed19
new file mode 100644
index 00000000..442b9a3c
Binary files /dev/null and b/clock/Library/Artifacts/fd/fdb49bb1528949372ae98385f530ed19 differ
diff --git a/clock/Library/Artifacts/fe/fe08241d5e32730cd494e03886612005 b/clock/Library/Artifacts/fe/fe08241d5e32730cd494e03886612005
new file mode 100644
index 00000000..9b9fcbee
Binary files /dev/null and b/clock/Library/Artifacts/fe/fe08241d5e32730cd494e03886612005 differ
diff --git a/clock/Library/Artifacts/fe/fe70e6ce432ca81e89705c9b71e7caac b/clock/Library/Artifacts/fe/fe70e6ce432ca81e89705c9b71e7caac
new file mode 100644
index 00000000..935bafc9
Binary files /dev/null and b/clock/Library/Artifacts/fe/fe70e6ce432ca81e89705c9b71e7caac differ
diff --git a/clock/Library/Artifacts/fe/fe75367b313f8e8172de62d954a0bc60 b/clock/Library/Artifacts/fe/fe75367b313f8e8172de62d954a0bc60
new file mode 100644
index 00000000..6b7811c0
Binary files /dev/null and b/clock/Library/Artifacts/fe/fe75367b313f8e8172de62d954a0bc60 differ
diff --git a/clock/Library/Artifacts/fe/fe9d9e8198767a30c09b641987b59a1f b/clock/Library/Artifacts/fe/fe9d9e8198767a30c09b641987b59a1f
new file mode 100644
index 00000000..339ea934
Binary files /dev/null and b/clock/Library/Artifacts/fe/fe9d9e8198767a30c09b641987b59a1f differ
diff --git a/clock/Library/Artifacts/ff/ff0c98aa9a60fbdf82d8b56c257a0cc6 b/clock/Library/Artifacts/ff/ff0c98aa9a60fbdf82d8b56c257a0cc6
new file mode 100644
index 00000000..a1c33e27
Binary files /dev/null and b/clock/Library/Artifacts/ff/ff0c98aa9a60fbdf82d8b56c257a0cc6 differ
diff --git a/clock/Library/Artifacts/ff/ff38124063d5d27ecdcfbc11871c613a b/clock/Library/Artifacts/ff/ff38124063d5d27ecdcfbc11871c613a
new file mode 100644
index 00000000..9e5b9d7c
Binary files /dev/null and b/clock/Library/Artifacts/ff/ff38124063d5d27ecdcfbc11871c613a differ
diff --git a/clock/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 b/clock/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735
new file mode 100644
index 00000000..5e3c113c
Binary files /dev/null and b/clock/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 differ
diff --git a/clock/Library/Artifacts/ff/ff504b513acf22a79b848f00c79b76d4 b/clock/Library/Artifacts/ff/ff504b513acf22a79b848f00c79b76d4
new file mode 100644
index 00000000..60638133
Binary files /dev/null and b/clock/Library/Artifacts/ff/ff504b513acf22a79b848f00c79b76d4 differ
diff --git a/clock/Library/Artifacts/ff/ffa238136db9affceacf388b6db73b79 b/clock/Library/Artifacts/ff/ffa238136db9affceacf388b6db73b79
new file mode 100644
index 00000000..2ad3124e
Binary files /dev/null and b/clock/Library/Artifacts/ff/ffa238136db9affceacf388b6db73b79 differ
diff --git a/clock/Library/AssetImportState b/clock/Library/AssetImportState
new file mode 100644
index 00000000..21c67d7f
--- /dev/null
+++ b/clock/Library/AssetImportState
@@ -0,0 +1 @@
+-2;0;0;0;-1
\ No newline at end of file
diff --git a/clock/Library/BuildPlayer.prefs b/clock/Library/BuildPlayer.prefs
new file mode 100644
index 00000000..e69de29b
diff --git a/clock/Library/BuildSettings.asset b/clock/Library/BuildSettings.asset
new file mode 100644
index 00000000..b989b870
Binary files /dev/null and b/clock/Library/BuildSettings.asset differ
diff --git a/clock/Library/CurrentLayout-default.dwlt b/clock/Library/CurrentLayout-default.dwlt
new file mode 100644
index 00000000..95a261a4
--- /dev/null
+++ b/clock/Library/CurrentLayout-default.dwlt
@@ -0,0 +1,763 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_PixelRect:
+ serializedVersion: 2
+ x: 0
+ y: 43
+ width: 2560
+ height: 1357
+ m_ShowMode: 4
+ m_Title:
+ m_RootView: {fileID: 6}
+ m_MinSize: {x: 875, y: 371}
+ m_MaxSize: {x: 10000, y: 10000}
+ m_Maximized: 1
+--- !u!114 &2
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 9}
+ - {fileID: 3}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 30
+ width: 2560
+ height: 1307
+ m_MinSize: {x: 677, y: 321}
+ m_MaxSize: {x: 12002, y: 8021}
+ vertical: 0
+ controlID: 85
+--- !u!114 &3
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 2041
+ y: 0
+ width: 519
+ height: 1307
+ m_MinSize: {x: 275, y: 50}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_ActualView: {fileID: 14}
+ m_Panes:
+ - {fileID: 14}
+ m_Selected: 0
+ m_LastSelected: 0
+--- !u!114 &4
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 506
+ height: 789
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_ActualView: {fileID: 15}
+ m_Panes:
+ - {fileID: 15}
+ m_Selected: 0
+ m_LastSelected: 0
+--- !u!114 &5
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name: ConsoleWindow
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 789
+ width: 2041
+ height: 518
+ m_MinSize: {x: 100, y: 100}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_ActualView: {fileID: 18}
+ m_Panes:
+ - {fileID: 13}
+ - {fileID: 18}
+ m_Selected: 1
+ m_LastSelected: 0
+--- !u!114 &6
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 7}
+ - {fileID: 2}
+ - {fileID: 8}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 2560
+ height: 1357
+ m_MinSize: {x: 875, y: 371}
+ m_MaxSize: {x: 10000, y: 10000}
+--- !u!114 &7
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 2560
+ height: 30
+ m_MinSize: {x: 0, y: 0}
+ m_MaxSize: {x: 0, y: 0}
+ m_LastLoadedLayoutName:
+--- !u!114 &8
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 1337
+ width: 2560
+ height: 20
+ m_MinSize: {x: 0, y: 0}
+ m_MaxSize: {x: 0, y: 0}
+--- !u!114 &9
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 10}
+ - {fileID: 5}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 2041
+ height: 1307
+ m_MinSize: {x: 402, y: 321}
+ m_MaxSize: {x: 8002, y: 8021}
+ vertical: 1
+ controlID: 86
+--- !u!114 &10
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 4}
+ - {fileID: 11}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 2041
+ height: 789
+ m_MinSize: {x: 402, y: 221}
+ m_MaxSize: {x: 8002, y: 4021}
+ vertical: 0
+ controlID: 22
+--- !u!114 &11
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name: SceneView
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 506
+ y: 0
+ width: 1535
+ height: 789
+ m_MinSize: {x: 202, y: 221}
+ m_MaxSize: {x: 4002, y: 4021}
+ m_ActualView: {fileID: 16}
+ m_Panes:
+ - {fileID: 16}
+ - {fileID: 17}
+ - {fileID: 12}
+ m_Selected: 0
+ m_LastSelected: 1
+--- !u!114 &12
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12111, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 400, y: 100}
+ m_MaxSize: {x: 2048, y: 2048}
+ m_TitleContent:
+ m_Text: Asset Store
+ m_Image: {fileID: -8693916549880196297, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 468
+ y: 181
+ width: 973
+ height: 501
+ m_ViewDataDictionary: {fileID: 0}
+--- !u!114 &13
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 230, y: 250}
+ m_MaxSize: {x: 10000, y: 10000}
+ m_TitleContent:
+ m_Text: Project
+ m_Image: {fileID: -5467254957812901981, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 0
+ y: 862
+ width: 2040
+ height: 497
+ m_ViewDataDictionary: {fileID: 0}
+ m_SearchFilter:
+ m_NameFilter:
+ m_ClassNames: []
+ m_AssetLabels: []
+ m_AssetBundleNames: []
+ m_VersionControlStates: []
+ m_SoftLockControlStates: []
+ m_ReferencingInstanceIDs:
+ m_SceneHandles:
+ m_ShowAllHits: 0
+ m_SkipHidden: 0
+ m_SearchArea: 1
+ m_Folders:
+ - Assets/Skrypty
+ m_ViewMode: 1
+ m_StartGridSize: 64
+ m_LastFolders:
+ - Assets/Skrypty
+ m_LastFoldersGridSize: -1
+ m_LastProjectPath: E:\Unity\MWS1
+ m_LockTracker:
+ m_IsLocked: 0
+ m_FolderTreeState:
+ scrollPos: {x: 0, y: 0}
+ m_SelectedIDs: 28340000
+ m_LastClickedID: 13352
+ m_ExpandedIDs: 000000000434000006340000
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 1
+ m_ClientGUIView: {fileID: 0}
+ m_SearchString:
+ m_CreateAssetUtility:
+ m_EndAction: {fileID: 0}
+ m_InstanceID: 0
+ m_Path:
+ m_Icon: {fileID: 0}
+ m_ResourceFile:
+ m_AssetTreeState:
+ scrollPos: {x: 0, y: 0}
+ m_SelectedIDs:
+ m_LastClickedID: 0
+ m_ExpandedIDs: 000000000434000006340000
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 1
+ m_ClientGUIView: {fileID: 0}
+ m_SearchString:
+ m_CreateAssetUtility:
+ m_EndAction: {fileID: 0}
+ m_InstanceID: 0
+ m_Path:
+ m_Icon: {fileID: 0}
+ m_ResourceFile:
+ m_ListAreaState:
+ m_SelectedInstanceIDs: b02e0000
+ m_LastClickedInstanceID: 11952
+ m_HadKeyboardFocusLastEvent: 1
+ m_ExpandedInstanceIDs: c6230000
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 1
+ m_ClientGUIView: {fileID: 5}
+ m_CreateAssetUtility:
+ m_EndAction: {fileID: 0}
+ m_InstanceID: 0
+ m_Path:
+ m_Icon: {fileID: 0}
+ m_ResourceFile:
+ m_NewAssetIndexInList: -1
+ m_ScrollPosition: {x: 0, y: 0}
+ m_GridSize: 64
+ m_SkipHiddenPackages: 0
+ m_DirectoriesAreaWidth: 229
+--- !u!114 &14
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 275, y: 50}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Inspector
+ m_Image: {fileID: -2667387946076563598, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 2041
+ y: 73
+ width: 518
+ height: 1286
+ m_ViewDataDictionary: {fileID: 0}
+ m_OpenAddComponentMenu: 0
+ m_ObjectsLockedBeforeSerialization: []
+ m_InstanceIDsLockedBeforeSerialization:
+ m_LockTracker:
+ m_IsLocked: 0
+ m_PreviewResizer:
+ m_CachedPref: 160
+ m_ControlHash: -371814159
+ m_PrefName: Preview_InspectorPreview
+ m_PreviewWindow: {fileID: 0}
+ m_LastInspectedObjectInstanceID: -1
+ m_LastVerticalScrollValue: 0
+--- !u!114 &15
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Hierarchy
+ m_Image: {fileID: 7966133145522015247, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 0
+ y: 73
+ width: 505
+ height: 768
+ m_ViewDataDictionary: {fileID: 0}
+ m_SceneHierarchy:
+ m_TreeViewState:
+ scrollPos: {x: 0, y: 0}
+ m_SelectedIDs:
+ m_LastClickedID: 0
+ m_ExpandedIDs: 68fbffff
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 0
+ m_ClientGUIView: {fileID: 4}
+ m_SearchString:
+ m_ExpandedScenes: []
+ m_CurrenRootInstanceID: 0
+ m_LockTracker:
+ m_IsLocked: 0
+ m_CurrentSortingName: TransformSorting
+ m_WindowGUID: 88edb364a1ed54e4ebe779b3a18bfe0d
+--- !u!114 &16
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Scene
+ m_Image: {fileID: 2593428753322112591, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 506
+ y: 73
+ width: 1533
+ height: 768
+ m_ViewDataDictionary: {fileID: 0}
+ m_ShowContextualTools: 0
+ m_WindowGUID: 8eaf62c14fe5dc9459d55396cde66ca2
+ m_Gizmos: 1
+ m_SceneIsLit: 1
+ m_SceneLighting: 1
+ m_2DMode: 0
+ m_isRotationLocked: 0
+ m_PlayAudio: 0
+ m_AudioPlay: 0
+ m_Position:
+ m_Target: {x: -1.4425168, y: 4.255652, z: -1.4969139}
+ speed: 2
+ m_Value: {x: -1.4425168, y: 4.255652, z: -1.4969139}
+ m_RenderMode: 0
+ m_CameraMode:
+ drawMode: 0
+ name: Shaded
+ section: Shading Mode
+ m_ValidateTrueMetals: 0
+ m_DoValidateTrueMetals: 0
+ m_ExposureSliderValue: 0
+ m_ExposureSliderMax: 10
+ m_SceneViewState:
+ showFog: 1
+ showMaterialUpdate: 0
+ showSkybox: 1
+ showFlares: 1
+ showImageEffects: 1
+ showParticleSystems: 1
+ m_Grid:
+ xGrid:
+ m_Fade:
+ m_Target: 0
+ speed: 2
+ m_Value: 0
+ m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
+ m_Pivot: {x: 0, y: 0, z: 0}
+ m_Size: {x: 0, y: 0}
+ yGrid:
+ m_Fade:
+ m_Target: 1
+ speed: 2
+ m_Value: 1
+ m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
+ m_Pivot: {x: 0, y: 0, z: 0}
+ m_Size: {x: 1, y: 1}
+ zGrid:
+ m_Fade:
+ m_Target: 0
+ speed: 2
+ m_Value: 0
+ m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
+ m_Pivot: {x: 0, y: 0, z: 0}
+ m_Size: {x: 0, y: 0}
+ m_ShowGrid: 1
+ m_GridAxis: 1
+ m_gridOpacity: 0.5
+ m_Rotation:
+ m_Target: {x: -0.05823995, y: 0.9353393, z: -0.18358213, w: -0.29672888}
+ speed: 2
+ m_Value: {x: -0.058239896, y: 0.9353384, z: -0.18358195, w: -0.2967286}
+ m_Size:
+ m_Target: 11.312846
+ speed: 2
+ m_Value: 11.312846
+ m_Ortho:
+ m_Target: 0
+ speed: 2
+ m_Value: 0
+ m_CameraSettings:
+ m_Speed: 1
+ m_SpeedNormalized: 0.5
+ m_SpeedMin: 0.01
+ m_SpeedMax: 2
+ m_EasingEnabled: 1
+ m_EasingDuration: 0.4
+ m_AccelerationEnabled: 1
+ m_FieldOfViewHorizontalOrVertical: 60
+ m_NearClip: 0.03
+ m_FarClip: 10000
+ m_DynamicClip: 1
+ m_OcclusionCulling: 0
+ m_LastSceneViewRotation: {x: 0, y: 0, z: 0, w: 0}
+ m_LastSceneViewOrtho: 0
+ m_ReplacementShader: {fileID: 0}
+ m_ReplacementString:
+ m_SceneVisActive: 1
+ m_LastLockedObject: {fileID: 0}
+ m_ViewIsLockedToObject: 0
+--- !u!114 &17
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Game
+ m_Image: {fileID: -6423792434712278376, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 506
+ y: 73
+ width: 1533
+ height: 768
+ m_ViewDataDictionary: {fileID: 0}
+ m_SerializedViewNames: []
+ m_SerializedViewValues: []
+ m_SerializedCustomFieldsNames: []
+ m_SerializedCustomFieldsValues: []
+ m_PlayModeViewName: GameView
+ m_ShowGizmos: 0
+ m_TargetDisplay: 0
+ m_ClearColor: {r: 0, g: 0, b: 0, a: 0}
+ m_TargetSize: {x: 1533, y: 747}
+ m_TextureFilterMode: 0
+ m_TextureHideFlags: 61
+ m_RenderIMGUI: 1
+ m_MaximizeOnPlay: 0
+ m_UseMipMap: 0
+ m_VSyncEnabled: 0
+ m_Gizmos: 0
+ m_Stats: 0
+ m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+ m_ZoomArea:
+ m_HRangeLocked: 0
+ m_VRangeLocked: 0
+ hZoomLockedByDefault: 0
+ vZoomLockedByDefault: 0
+ m_HBaseRangeMin: -766.5
+ m_HBaseRangeMax: 766.5
+ m_VBaseRangeMin: -373.5
+ m_VBaseRangeMax: 373.5
+ m_HAllowExceedBaseRangeMin: 1
+ m_HAllowExceedBaseRangeMax: 1
+ m_VAllowExceedBaseRangeMin: 1
+ m_VAllowExceedBaseRangeMax: 1
+ m_ScaleWithWindow: 0
+ m_HSlider: 0
+ m_VSlider: 0
+ m_IgnoreScrollWheelUntilClicked: 0
+ m_EnableMouseInput: 0
+ m_EnableSliderZoomHorizontal: 0
+ m_EnableSliderZoomVertical: 0
+ m_UniformScale: 1
+ m_UpDirection: 1
+ m_DrawArea:
+ serializedVersion: 2
+ x: 0
+ y: 21
+ width: 1533
+ height: 747
+ m_Scale: {x: 1, y: 1}
+ m_Translation: {x: 766.5, y: 373.5}
+ m_MarginLeft: 0
+ m_MarginRight: 0
+ m_MarginTop: 0
+ m_MarginBottom: 0
+ m_LastShownAreaInsideMargins:
+ serializedVersion: 2
+ x: -766.5
+ y: -373.5
+ width: 1533
+ height: 747
+ m_MinimalGUI: 1
+ m_defaultScale: 1
+ m_LastWindowPixelSize: {x: 1533, y: 768}
+ m_ClearInEditMode: 1
+ m_NoCameraWarning: 1
+ m_LowResolutionForAspectRatios: 01000000000000000000
+ m_XRRenderMode: 0
+ m_RenderTexture: {fileID: 0}
+--- !u!114 &18
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 100, y: 100}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Console
+ m_Image: {fileID: -4327648978806127646, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 0
+ y: 862
+ width: 2040
+ height: 497
+ m_ViewDataDictionary: {fileID: 0}
diff --git a/clock/Library/EditorOnlyScriptingSettings.json b/clock/Library/EditorOnlyScriptingSettings.json
new file mode 100644
index 00000000..8e1824c8
--- /dev/null
+++ b/clock/Library/EditorOnlyScriptingSettings.json
@@ -0,0 +1 @@
+{"m_DefineSymbols":[],"m_AllowUnsafeCode":false}
\ No newline at end of file
diff --git a/clock/Library/EditorSnapSettings.asset b/clock/Library/EditorSnapSettings.asset
new file mode 100644
index 00000000..7a90624e
--- /dev/null
+++ b/clock/Library/EditorSnapSettings.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 61
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 13954, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SnapEnabled: 0
+ m_SnapSettings:
+ m_SnapValue: {x: 0.25, y: 0.25, z: 0.25}
+ m_SnapMultiplier: {x: 2048, y: 2048, z: 2048}
+ m_Rotation: 15
+ m_Scale: 1
diff --git a/clock/Library/EditorUserBuildSettings.asset b/clock/Library/EditorUserBuildSettings.asset
new file mode 100644
index 00000000..1b592792
Binary files /dev/null and b/clock/Library/EditorUserBuildSettings.asset differ
diff --git a/clock/Library/EditorUserSettings.asset b/clock/Library/EditorUserSettings.asset
new file mode 100644
index 00000000..4681d1d2
--- /dev/null
+++ b/clock/Library/EditorUserSettings.asset
@@ -0,0 +1,19 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!162 &1
+EditorUserSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 4
+ m_ConfigSettings:
+ vcSharedLogLevel:
+ value: 0d5e400f0650
+ flags: 0
+ m_VCAutomaticAdd: 1
+ m_VCDebugCom: 0
+ m_VCDebugCmd: 0
+ m_VCDebugOut: 0
+ m_SemanticMergeMode: 2
+ m_VCShowFailedCheckout: 1
+ m_VCOverwriteFailedCheckoutAssets: 1
+ m_VCOverlayIcons: 1
+ m_VCAllowAsyncUpdate: 0
diff --git a/clock/Library/InspectorExpandedItems.asset b/clock/Library/InspectorExpandedItems.asset
new file mode 100644
index 00000000..6804978a
Binary files /dev/null and b/clock/Library/InspectorExpandedItems.asset differ
diff --git a/clock/Library/LastSceneManagerSetup.txt b/clock/Library/LastSceneManagerSetup.txt
new file mode 100644
index 00000000..6a5704fe
--- /dev/null
+++ b/clock/Library/LastSceneManagerSetup.txt
@@ -0,0 +1,5 @@
+sceneSetups:
+- path: Assets/Scenes/SampleScene.unity
+ isLoaded: 1
+ isActive: 1
+ isSubScene: 0
diff --git a/clock/Library/LibraryFormatVersion.txt b/clock/Library/LibraryFormatVersion.txt
new file mode 100644
index 00000000..6185f096
--- /dev/null
+++ b/clock/Library/LibraryFormatVersion.txt
@@ -0,0 +1,2 @@
+unityRebuildLibraryVersion: 11
+unityForwardCompatibleVersion: 40
diff --git a/clock/Library/MonoManager.asset b/clock/Library/MonoManager.asset
new file mode 100644
index 00000000..7c160cba
Binary files /dev/null and b/clock/Library/MonoManager.asset differ
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore
new file mode 100644
index 00000000..1586aea7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore
@@ -0,0 +1,6 @@
+
+automation/**
+utr_output/**
+.Editor/**
+.yamato/**
+*.zip*
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md
new file mode 100644
index 00000000..3c6c85d5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md
@@ -0,0 +1,31 @@
+# Changelog
+All notable changes to this package will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.2.16] - 2019-02-11
+Update stylesheet to pass USS validation
+
+## [1.2.15] - 2018-11-16
+Added support for non-experimental UIElements.
+
+## [1.2.11] - 2018-09-04
+Made some performance improvements to reduce impact on ReloadAssemblies.
+
+## [1.2.9] - 2018-08-13
+Test issues for the Collab History Window are now fixed.
+
+## [1.2.7] - 2018-08-07
+Toolbar drop-down will no longer show up when package is uninstalled.
+
+## [1.2.6] - 2018-06-15
+Fixed an issue where Collab's History window wouldn't load properly.
+
+## [1.2.5] - 2018-05-21
+This is the first release of *Unity Package CollabProxy*.
+
+### Added
+- Collab history and toolbar windows
+- Collab view and presenter classes
+- Collab Editor tests for view and presenter
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta
new file mode 100644
index 00000000..38274a69
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 782c49e6e68074dc7ba12c95537825ce
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md
new file mode 100644
index 00000000..57808d56
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md
@@ -0,0 +1,9 @@
+
+
+
+ Unity.CollabProxy.Dependencies
+ 1.1.0-experimental
+ Rohit Garg
+ Dependencies for the CollabProxy package
+
+
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta
new file mode 100644
index 00000000..24e45c2f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 470530e667ad4475786b28fa3187ce95
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md
new file mode 100644
index 00000000..c1800d6a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md
@@ -0,0 +1,5 @@
+# About Unity Collaborate
+
+Collaborate is a simple way for teams to save, share, and sync their Unity project.
+
+Please refer to the online documentation [here.](https://docs.unity3d.com/Manual/UnityCollaborate.html)
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta
new file mode 100644
index 00000000..b54ca871
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d31e5d760880a4e52a3a75322481d0d2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs
new file mode 100644
index 00000000..d7266b63
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[assembly: InternalsVisibleTo("Unity.CollabProxy.EditorTests")]
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta
new file mode 100644
index 00000000..e384b318
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d4ef26aa386b44923b61c9c4b505a67c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta
new file mode 100644
index 00000000..694fc4ea
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c18cb9388313e4287ad5895ee735c47d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs
new file mode 100644
index 00000000..029ce1c7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs
@@ -0,0 +1,24 @@
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+namespace CollabProxy.UI
+{
+ [InitializeOnLoad]
+ public class Bootstrap
+ {
+ private const float kCollabToolbarButtonWidth = 78.0f;
+
+ static Bootstrap()
+ {
+ Collab.ShowHistoryWindow = CollabHistoryWindow.ShowHistoryWindow;
+ Collab.ShowToolbarAtPosition = CollabToolbarWindow.ShowCenteredAtPosition;
+ Collab.IsToolbarVisible = CollabToolbarWindow.IsVisible;
+ Collab.CloseToolbar = CollabToolbarWindow.CloseToolbar;
+ Toolbar.AddSubToolbar(new CollabToolbarButton
+ {
+ Width = kCollabToolbarButtonWidth
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta
new file mode 100644
index 00000000..641d54b7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8aa8171e088f94069bbd1978a053f7dd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs
new file mode 100644
index 00000000..c7f90aa1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace UnityEditor.Collaboration
+{
+ internal static class CollabAnalytics
+ {
+ [Serializable]
+ private struct CollabUserActionAnalyticsEvent
+ {
+ public string category;
+ public string action;
+ }
+
+ public static void SendUserAction(string category, string action)
+ {
+ EditorAnalytics.SendCollabUserAction(new CollabUserActionAnalyticsEvent() { category = category, action = action });
+ }
+
+ public static readonly string historyCategoryString = "History";
+ };
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta
new file mode 100644
index 00000000..2f46e9bc
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f944311c8fff2479fa3ba741f6039fc8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs
new file mode 100644
index 00000000..b855bce3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs
@@ -0,0 +1,330 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEditor.Collaboration;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEditor.UIElements;
+using UnityEngine.UIElements;
+#else
+using UnityEditor.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+using UnityEngine;
+using UnityEditor.Connect;
+
+namespace UnityEditor
+{
+ internal class CollabHistoryWindow : EditorWindow, ICollabHistoryWindow
+ {
+#if UNITY_2019_1_OR_NEWER
+ private const string ResourcesPath = "Packages/com.unity.collab-proxy/Editor/Resources/Styles/";
+#else
+ private const string ResourcesPath = "StyleSheets/";
+#endif
+
+
+ const string kWindowTitle = "Collab History";
+ const string kServiceUrl = "developer.cloud.unity3d.com";
+
+ [MenuItem("Window/Asset Management/Collab History", false, 1)]
+ public static void ShowHistoryWindow()
+ {
+ EditorWindow.GetWindow(kWindowTitle);
+ }
+
+ [MenuItem("Window/Asset Management/Collab History", true)]
+ public static bool ValidateShowHistoryWindow()
+ {
+ return Collab.instance.IsCollabEnabledForCurrentProject();
+ }
+
+ CollabHistoryPresenter m_Presenter;
+ Dictionary m_Views;
+ List m_HistoryItems = new List();
+ HistoryState m_State;
+ VisualElement m_Container;
+ PagedListView m_Pager;
+ ScrollView m_HistoryView;
+ int m_ItemsPerPage = 5;
+ string m_InProgressRev;
+ bool m_RevisionActionsEnabled;
+
+ public CollabHistoryWindow()
+ {
+ minSize = new Vector2(275, 50);
+ }
+
+ public void OnEnable()
+ {
+ SetupGUI();
+ name = "CollabHistory";
+
+ if (m_Presenter == null)
+ {
+ m_Presenter = new CollabHistoryPresenter(this, new CollabHistoryItemFactory(), new RevisionsService(Collab.instance, UnityConnect.instance));
+ }
+ m_Presenter.OnWindowEnabled();
+ }
+
+ public void OnDisable()
+ {
+ m_Presenter.OnWindowDisabled();
+ }
+
+ public bool revisionActionsEnabled
+ {
+ get { return m_RevisionActionsEnabled; }
+ set
+ {
+ if (m_RevisionActionsEnabled == value)
+ return;
+
+ m_RevisionActionsEnabled = value;
+ foreach (var historyItem in m_HistoryItems)
+ {
+ historyItem.RevisionActionsEnabled = value;
+ }
+ }
+ }
+
+ private void AddStyleSheetPath(VisualElement root, string path)
+ {
+#if UNITY_2019_1_OR_NEWER
+ root.styleSheets.Add(EditorGUIUtility.Load(path) as StyleSheet);
+#else
+ root.AddStyleSheetPath(path);
+#endif
+ }
+
+
+ public void SetupGUI()
+ {
+#if UNITY_2019_1_OR_NEWER
+ var root = this.rootVisualElement;
+#else
+ var root = this.GetRootVisualContainer();
+#endif
+ AddStyleSheetPath(root, ResourcesPath + "CollabHistoryCommon.uss");
+ if (EditorGUIUtility.isProSkin)
+ {
+ AddStyleSheetPath(root, ResourcesPath + "CollabHistoryDark.uss");
+ }
+ else
+ {
+ AddStyleSheetPath(root, ResourcesPath + "CollabHistoryLight.uss");
+ }
+
+ m_Container = new VisualElement();
+ m_Container.StretchToParentSize();
+ root.Add(m_Container);
+
+ m_Pager = new PagedListView()
+ {
+ name = "PagedElement",
+ pageSize = m_ItemsPerPage
+ };
+
+ var errorView = new StatusView()
+ {
+ message = "An Error Occurred",
+ icon = EditorGUIUtility.LoadIconRequired("Collab.Warning") as Texture,
+ };
+
+ var noInternetView = new StatusView()
+ {
+ message = "No Internet Connection",
+ icon = EditorGUIUtility.LoadIconRequired("Collab.NoInternet") as Texture,
+ };
+
+ var maintenanceView = new StatusView()
+ {
+ message = "Maintenance",
+ };
+
+ var loginView = new StatusView()
+ {
+ message = "Sign in to access Collaborate",
+ buttonText = "Sign in...",
+ callback = SignInClick,
+ };
+
+ var noSeatView = new StatusView()
+ {
+ message = "Ask your project owner for access to Unity Teams",
+ buttonText = "Learn More",
+ callback = NoSeatClick,
+ };
+
+ var waitingView = new StatusView()
+ {
+ message = "Updating...",
+ };
+
+ m_HistoryView = new ScrollView() { name = "HistoryContainer", showHorizontal = false};
+ m_HistoryView.contentContainer.StretchToParentWidth();
+ m_HistoryView.Add(m_Pager);
+
+ m_Views = new Dictionary()
+ {
+ {HistoryState.Error, errorView},
+ {HistoryState.Offline, noInternetView},
+ {HistoryState.Maintenance, maintenanceView},
+ {HistoryState.LoggedOut, loginView},
+ {HistoryState.NoSeat, noSeatView},
+ {HistoryState.Waiting, waitingView},
+ {HistoryState.Ready, m_HistoryView}
+ };
+ }
+
+ public void UpdateState(HistoryState state, bool force)
+ {
+ if (state == m_State && !force)
+ return;
+
+ m_State = state;
+ switch (state)
+ {
+ case HistoryState.Ready:
+ UpdateHistoryView(m_Pager);
+ break;
+ case HistoryState.Disabled:
+ Close();
+ return;
+ }
+
+ m_Container.Clear();
+ m_Container.Add(m_Views[m_State]);
+ }
+
+ public void UpdateRevisions(IEnumerable datas, string tip, int totalRevisions, int currentPage)
+ {
+ var elements = new List();
+ var isFullDateObtained = false; // Has everything from this date been obtained?
+ m_HistoryItems.Clear();
+
+ if (datas != null)
+ {
+ DateTime currentDate = DateTime.MinValue;
+ foreach (var data in datas)
+ {
+ if (data.timeStamp.Date != currentDate.Date)
+ {
+ elements.Add(new CollabHistoryRevisionLine(data.timeStamp, isFullDateObtained));
+ currentDate = data.timeStamp;
+ }
+
+ var item = new CollabHistoryItem(data);
+ m_HistoryItems.Add(item);
+
+ var container = new VisualElement();
+ container.style.flexDirection = FlexDirection.Row;
+ if (data.current)
+ {
+ isFullDateObtained = true;
+ container.AddToClassList("currentRevision");
+ container.AddToClassList("obtainedRevision");
+ }
+ else if (data.obtained)
+ {
+ container.AddToClassList("obtainedRevision");
+ }
+ else
+ {
+ container.AddToClassList("absentRevision");
+ }
+ // If we use the index as-is, the latest commit will become #1, but we want it to be last
+ container.Add(new CollabHistoryRevisionLine(data.index));
+ container.Add(item);
+ elements.Add(container);
+ }
+ }
+
+ m_HistoryView.scrollOffset = new Vector2(0, 0);
+ m_Pager.totalItems = totalRevisions;
+ m_Pager.curPage = currentPage;
+ m_Pager.items = elements;
+ }
+
+ public string inProgressRevision
+ {
+ get { return m_InProgressRev; }
+ set
+ {
+ m_InProgressRev = value;
+ foreach (var historyItem in m_HistoryItems)
+ {
+ historyItem.SetInProgressStatus(value);
+ }
+ }
+ }
+
+ public int itemsPerPage
+ {
+ set
+ {
+ if (m_ItemsPerPage == value)
+ return;
+ m_Pager.pageSize = m_ItemsPerPage;
+ }
+ }
+
+ public PageChangeAction OnPageChangeAction
+ {
+ set { m_Pager.OnPageChanged = value; }
+ }
+
+ public RevisionAction OnGoBackAction
+ {
+ set { CollabHistoryItem.s_OnGoBack = value; }
+ }
+
+ public RevisionAction OnUpdateAction
+ {
+ set { CollabHistoryItem.s_OnUpdate = value; }
+ }
+
+ public RevisionAction OnRestoreAction
+ {
+ set { CollabHistoryItem.s_OnRestore = value; }
+ }
+
+ public ShowBuildAction OnShowBuildAction
+ {
+ set { CollabHistoryItem.s_OnShowBuild = value; }
+ }
+
+ public Action OnShowServicesAction
+ {
+ set { CollabHistoryItem.s_OnShowServices = value; }
+ }
+
+ void UpdateHistoryView(VisualElement history)
+ {
+ }
+
+ void NoSeatClick()
+ {
+ var connection = UnityConnect.instance;
+ var env = connection.GetEnvironment();
+ // Map environment to url - prod is special
+ if (env == "production")
+ env = "";
+ else
+ env += "-";
+
+ var url = "https://" + env + kServiceUrl
+ + "/orgs/" + connection.GetOrganizationId()
+ + "/projects/" + connection.GetProjectName()
+ + "/unity-teams/";
+ Application.OpenURL(url);
+ }
+
+ void SignInClick()
+ {
+ UnityConnect.instance.ShowLogin();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta
new file mode 100644
index 00000000..74358d40
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fed9dda667cab45d398d06402bba03f4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs
new file mode 100644
index 00000000..eebe4aca
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs
@@ -0,0 +1,297 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.Collaboration;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+using UnityEngine;
+
+namespace UnityEditor
+{
+ internal class CollabToolbarButton : SubToolbar, IDisposable
+ {
+ // Must match s_CollabIcon array
+ enum CollabToolbarState
+ {
+ NeedToEnableCollab,
+ UpToDate,
+ Conflict,
+ OperationError,
+ ServerHasChanges,
+ FilesToPush,
+ InProgress,
+ Disabled,
+ Offline
+ }
+
+ private class CollabToolbarContent
+ {
+ readonly string m_iconName;
+ readonly string m_toolTip;
+ readonly CollabToolbarState m_state;
+
+ static Dictionary m_CollabIcons;
+
+ public CollabToolbarState RegisteredForState
+ {
+ get { return m_state; }
+ }
+
+ public GUIContent GuiContent
+ {
+ get
+ {
+ if (m_CollabIcons == null)
+ {
+ m_CollabIcons = new Dictionary();
+ }
+
+ if (!m_CollabIcons.ContainsKey(this))
+ {
+ m_CollabIcons.Add(this, EditorGUIUtility.TrTextContentWithIcon("Collab", m_toolTip, m_iconName));
+ }
+
+ return m_CollabIcons[this];
+ }
+ }
+
+ public CollabToolbarContent(CollabToolbarState state, string iconName, string toolTip)
+ {
+ m_state = state;
+ m_iconName = iconName;
+ m_toolTip = toolTip;
+ }
+ }
+
+ CollabToolbarContent[] m_toolbarContents;
+ CollabToolbarState m_CollabToolbarState = CollabToolbarState.UpToDate;
+ const float kCollabButtonWidth = 78.0f;
+ ButtonWithAnimatedIconRotation m_CollabButton;
+ string m_DynamicTooltip;
+ static bool m_ShowCollabTooltip = false;
+
+ private GUIContent currentCollabContent
+ {
+ get
+ {
+ CollabToolbarContent toolbarContent =
+ m_toolbarContents.FirstOrDefault(c => c.RegisteredForState.Equals(m_CollabToolbarState));
+ GUIContent content = new GUIContent(toolbarContent == null? m_toolbarContents.First().GuiContent : toolbarContent.GuiContent);
+ if (!m_ShowCollabTooltip)
+ {
+ content.tooltip = null;
+ }
+ else if (m_DynamicTooltip != "")
+ {
+ content.tooltip = m_DynamicTooltip;
+ }
+
+ if (Collab.instance.AreTestsRunning())
+ {
+ content.text = "CTF";
+ }
+
+ return content;
+ }
+ }
+
+ public CollabToolbarButton()
+ {
+ m_toolbarContents = new[]
+ {
+ new CollabToolbarContent(CollabToolbarState.NeedToEnableCollab, "CollabNew", " You need to enable collab."),
+ new CollabToolbarContent(CollabToolbarState.UpToDate, "Collab", " You are up to date."),
+ new CollabToolbarContent(CollabToolbarState.Conflict, "CollabConflict", " Please fix your conflicts prior to publishing."),
+ new CollabToolbarContent(CollabToolbarState.OperationError, "CollabError", " Last operation failed. Please retry later."),
+ new CollabToolbarContent(CollabToolbarState.ServerHasChanges, "CollabPull", " Please update, there are server changes."),
+ new CollabToolbarContent(CollabToolbarState.FilesToPush, "CollabPush", " You have files to publish."),
+ new CollabToolbarContent(CollabToolbarState.InProgress, "CollabProgress", " Operation in progress."),
+ new CollabToolbarContent(CollabToolbarState.Disabled, "CollabNew", " Collab is disabled."),
+ new CollabToolbarContent(CollabToolbarState.Offline, "CollabNew", " Please check your network connection.")
+ };
+
+ Collab.instance.StateChanged += OnCollabStateChanged;
+ UnityConnect.instance.StateChanged += OnUnityConnectStateChanged;
+ UnityConnect.instance.UserStateChanged += OnUnityConnectUserStateChanged;
+ }
+
+ void OnUnityConnectUserStateChanged(UserInfo state)
+ {
+ UpdateCollabToolbarState();
+ }
+
+ void OnUnityConnectStateChanged(ConnectInfo state)
+ {
+ UpdateCollabToolbarState();
+ }
+
+ public override void OnGUI(Rect rect)
+ {
+ DoCollabDropDown(rect);
+ }
+
+ Rect GUIToScreenRect(Rect guiRect)
+ {
+ Vector2 screenPoint = GUIUtility.GUIToScreenPoint(new Vector2(guiRect.x, guiRect.y));
+ guiRect.x = screenPoint.x;
+ guiRect.y = screenPoint.y;
+ return guiRect;
+ }
+
+ void ShowPopup(Rect rect)
+ {
+ // window should be centered on the button
+ ReserveRight(kCollabButtonWidth / 2, ref rect);
+ ReserveBottom(5, ref rect);
+ // calculate screen rect before saving assets since it might open the AssetSaveDialog window
+ var screenRect = GUIToScreenRect(rect);
+ // save all the assets
+ AssetDatabase.SaveAssets();
+ if (Collab.ShowToolbarAtPosition != null && Collab.ShowToolbarAtPosition(screenRect))
+ {
+ GUIUtility.ExitGUI();
+ }
+ }
+
+ void DoCollabDropDown(Rect rect)
+ {
+ UpdateCollabToolbarState();
+ GUIStyle collabButtonStyle = "OffsetDropDown";
+ bool showPopup = Toolbar.requestShowCollabToolbar;
+ Toolbar.requestShowCollabToolbar = false;
+
+ bool enable = !EditorApplication.isPlaying;
+
+ using (new EditorGUI.DisabledScope(!enable))
+ {
+ bool animate = m_CollabToolbarState == CollabToolbarState.InProgress;
+
+ EditorGUIUtility.SetIconSize(new Vector2(12, 12));
+ if (GetCollabButton().OnGUI(rect, currentCollabContent, animate, collabButtonStyle))
+ {
+ showPopup = true;
+ }
+ EditorGUIUtility.SetIconSize(Vector2.zero);
+ }
+
+ if (m_CollabToolbarState == CollabToolbarState.Disabled)
+ return;
+
+ if (showPopup)
+ {
+ ShowPopup(rect);
+ }
+ }
+
+ public void OnCollabStateChanged(CollabInfo info)
+ {
+ UpdateCollabToolbarState();
+ }
+
+ public void UpdateCollabToolbarState()
+ {
+ var currentCollabState = CollabToolbarState.UpToDate;
+ bool networkAvailable = UnityConnect.instance.connectInfo.online && UnityConnect.instance.connectInfo.loggedIn;
+ m_DynamicTooltip = "";
+
+ if (UnityConnect.instance.isDisableCollabWindow)
+ {
+ currentCollabState = CollabToolbarState.Disabled;
+ }
+ else if (networkAvailable)
+ {
+ Collab collab = Collab.instance;
+ CollabInfo currentInfo = collab.collabInfo;
+ UnityErrorInfo errInfo;
+ bool error = false;
+ if (collab.GetError((UnityConnect.UnityErrorFilter.ByContext | UnityConnect.UnityErrorFilter.ByChild), out errInfo))
+ {
+ error = (errInfo.priority <= (int)UnityConnect.UnityErrorPriority.Error);
+ m_DynamicTooltip = errInfo.shortMsg;
+ }
+
+ if (!currentInfo.ready)
+ {
+ currentCollabState = CollabToolbarState.InProgress;
+ }
+ else if (error)
+ {
+ currentCollabState = CollabToolbarState.OperationError;
+ }
+ else if (currentInfo.inProgress)
+ {
+ currentCollabState = CollabToolbarState.InProgress;
+ }
+ else
+ {
+ bool collabEnable = Collab.instance.IsCollabEnabledForCurrentProject();
+
+ if (UnityConnect.instance.projectInfo.projectBound == false || !collabEnable)
+ {
+ currentCollabState = CollabToolbarState.NeedToEnableCollab;
+ }
+ else if (currentInfo.update)
+ {
+ currentCollabState = CollabToolbarState.ServerHasChanges;
+ }
+ else if (currentInfo.conflict)
+ {
+ currentCollabState = CollabToolbarState.Conflict;
+ }
+ else if (currentInfo.publish)
+ {
+ currentCollabState = CollabToolbarState.FilesToPush;
+ }
+ }
+ }
+ else
+ {
+ currentCollabState = CollabToolbarState.Offline;
+ }
+
+ if (Collab.IsToolbarVisible != null)
+ {
+ if (currentCollabState != m_CollabToolbarState ||
+ Collab.IsToolbarVisible() == m_ShowCollabTooltip)
+ {
+ m_CollabToolbarState = currentCollabState;
+ m_ShowCollabTooltip = !Collab.IsToolbarVisible();
+ Toolbar.RepaintToolbar();
+ }
+ }
+ }
+
+ void ReserveRight(float width, ref Rect pos)
+ {
+ pos.x += width;
+ }
+
+ void ReserveBottom(float height, ref Rect pos)
+ {
+ pos.y += height;
+ }
+
+ ButtonWithAnimatedIconRotation GetCollabButton()
+ {
+ if (m_CollabButton == null)
+ {
+ const int repaintsPerSecond = 20;
+ const float animSpeed = 500f;
+ const bool mouseDownButton = true;
+ m_CollabButton = new ButtonWithAnimatedIconRotation(() => (float)EditorApplication.timeSinceStartup * animSpeed, Toolbar.RepaintToolbar, repaintsPerSecond, mouseDownButton);
+ }
+
+ return m_CollabButton;
+ }
+
+ public void Dispose()
+ {
+ Collab.instance.StateChanged -= OnCollabStateChanged;
+ UnityConnect.instance.StateChanged -= OnUnityConnectStateChanged;
+ UnityConnect.instance.UserStateChanged -= OnUnityConnectUserStateChanged;
+
+ if (m_CollabButton != null)
+ m_CollabButton.Clear();
+ }
+ }
+} // namespace
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta
new file mode 100644
index 00000000..949d8db9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 882f1a4147a284f028899b9c018e63eb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs
new file mode 100644
index 00000000..27938750
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs
@@ -0,0 +1,137 @@
+using UnityEngine;
+using UnityEditor.Collaboration;
+using UnityEditor.Web;
+using UnityEditor.Connect;
+
+namespace UnityEditor
+{
+ [InitializeOnLoad]
+ internal class WebViewStatic : ScriptableSingleton
+ {
+ [SerializeField]
+ WebView m_WebView;
+
+ static public WebView GetWebView()
+ {
+ return instance.m_WebView;
+ }
+
+ static public void SetWebView(WebView webView)
+ {
+ instance.m_WebView = webView;
+ }
+ }
+
+ [InitializeOnLoad]
+ internal class CollabToolbarWindow : WebViewEditorStaticWindow, IHasCustomMenu
+ {
+ internal override WebView webView
+ {
+ get {return WebViewStatic.GetWebView(); }
+ set {WebViewStatic.SetWebView(value); }
+ }
+
+ private const string kWindowName = "Unity Collab Toolbar";
+
+ private static long s_LastClosedTime;
+ private static CollabToolbarWindow s_CollabToolbarWindow;
+
+ public static bool s_ToolbarIsVisible = false;
+
+ const int kWindowWidth = 320;
+ const int kWindowHeight = 350;
+
+ public static void CloseToolbar()
+ {
+ foreach (CollabToolbarWindow window in Resources.FindObjectsOfTypeAll())
+ window.Close();
+ }
+
+ [MenuItem("Window/Asset Management/Collab Toolbar", false /*IsValidateFunction*/, 2, true /* IsInternalMenu */)]
+ public static CollabToolbarWindow ShowToolbarWindow()
+ {
+ //Create a new window if it does not exist
+ if (s_CollabToolbarWindow == null)
+ {
+ s_CollabToolbarWindow = GetWindow(false, kWindowName) as CollabToolbarWindow;
+ }
+
+ return s_CollabToolbarWindow;
+ }
+
+ [MenuItem("Window/Asset Management/Collab Toolbar", true /*IsValidateFunction*/)]
+ public static bool ValidateShowToolbarWindow()
+ {
+ return true;
+ }
+
+ public static bool IsVisible()
+ {
+ return s_ToolbarIsVisible;
+ }
+
+ public static bool ShowCenteredAtPosition(Rect buttonRect)
+ {
+ buttonRect.x -= kWindowWidth / 2;
+ // We could not use realtimeSinceStartUp since it is set to 0 when entering/exitting playmode, we assume an increasing time when comparing time.
+ long nowMilliSeconds = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond;
+ bool justClosed = nowMilliSeconds < s_LastClosedTime + 50;
+ if (!justClosed)
+ {
+ // Method may have been triggered programmatically, without a user event to consume.
+ if (Event.current.type != EventType.Layout)
+ {
+ Event.current.Use();
+ }
+ if (s_CollabToolbarWindow == null)
+ s_CollabToolbarWindow = CreateInstance() as CollabToolbarWindow;
+ var windowSize = new Vector2(kWindowWidth, kWindowHeight);
+ s_CollabToolbarWindow.initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html";
+ s_CollabToolbarWindow.Init();
+ s_CollabToolbarWindow.ShowAsDropDown(buttonRect, windowSize);
+ s_CollabToolbarWindow.OnFocus();
+ return true;
+ }
+ return false;
+ }
+
+ // Receives HTML title
+ public void OnReceiveTitle(string title)
+ {
+ titleContent.text = title;
+ }
+
+ public new void OnInitScripting()
+ {
+ base.OnInitScripting();
+ }
+
+ public override void OnEnable()
+ {
+ minSize = new Vector2(kWindowWidth, kWindowHeight);
+ maxSize = new Vector2(kWindowWidth, kWindowHeight);
+ initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html";
+ base.OnEnable();
+ s_ToolbarIsVisible = true;
+ }
+
+ internal new void OnDisable()
+ {
+ s_LastClosedTime = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond;
+ if (s_CollabToolbarWindow)
+ {
+ s_ToolbarIsVisible = false;
+ NotifyVisibility(s_ToolbarIsVisible);
+ }
+ s_CollabToolbarWindow = null;
+
+ base.OnDisable();
+ }
+
+ public new void OnDestroy()
+ {
+ OnLostFocus();
+ base.OnDestroy();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta
new file mode 100644
index 00000000..b08bf2aa
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6f516f1ec21a54a59a92bf99db2d9535
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta
new file mode 100644
index 00000000..91331532
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d437fe60bb34f45728664a5d930c1635
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs
new file mode 100644
index 00000000..91d500be
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs
@@ -0,0 +1,228 @@
+using System.Collections.Generic;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryPresenter
+ {
+ public const int ItemsPerPage = 5;
+ ICollabHistoryWindow m_Window;
+ ICollabHistoryItemFactory m_Factory;
+ IRevisionsService m_Service;
+ ConnectInfo m_ConnectState;
+ CollabInfo m_CollabState;
+ bool m_IsCollabError;
+ int m_TotalRevisions;
+ int m_CurrentPage;
+ int m_RequestedPage;
+ bool m_FetchInProgress;
+
+ BuildAccess m_BuildAccess;
+ string m_ProgressRevision;
+ public bool BuildServiceEnabled {get; set; }
+
+ public CollabHistoryPresenter(ICollabHistoryWindow window, ICollabHistoryItemFactory factory, IRevisionsService service)
+ {
+ m_Window = window;
+ m_Factory = factory;
+ m_Service = service;
+ m_CurrentPage = 0;
+ m_BuildAccess = new BuildAccess();
+ m_Service.FetchRevisionsCallback += OnFetchRevisions;
+ }
+
+ public void OnWindowEnabled()
+ {
+ UnityConnect.instance.StateChanged += OnConnectStateChanged;
+ Collab.instance.StateChanged += OnCollabStateChanged;
+ Collab.instance.RevisionUpdated += OnCollabRevisionUpdated;
+ Collab.instance.JobsCompleted += OnCollabJobsCompleted;
+ Collab.instance.ErrorOccurred += OnCollabError;
+ Collab.instance.ErrorCleared += OnCollabErrorCleared;
+ EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
+ m_ConnectState = UnityConnect.instance.GetConnectInfo();
+ m_CollabState = Collab.instance.GetCollabInfo();
+
+ m_Window.revisionActionsEnabled = !EditorApplication.isPlayingOrWillChangePlaymode;
+
+ // Setup window callbacks
+ m_Window.OnPageChangeAction = OnUpdatePage;
+ m_Window.OnUpdateAction = OnUpdate;
+ m_Window.OnRestoreAction = OnRestore;
+ m_Window.OnGoBackAction = OnGoBack;
+ m_Window.OnShowBuildAction = ShowBuildForCommit;
+ m_Window.OnShowServicesAction = ShowServicePage;
+ m_Window.itemsPerPage = ItemsPerPage;
+
+ // Initialize data
+ UpdateBuildServiceStatus();
+ var state = RecalculateState();
+ // Only try to load the page if we're ready
+ if (state == HistoryState.Ready)
+ OnUpdatePage(m_CurrentPage);
+ m_Window.UpdateState(state, true);
+ }
+
+ public void OnWindowDisabled()
+ {
+ UnityConnect.instance.StateChanged -= OnConnectStateChanged;
+ Collab.instance.StateChanged -= OnCollabStateChanged;
+ Collab.instance.RevisionUpdated -= OnCollabRevisionUpdated;
+ Collab.instance.JobsCompleted -= OnCollabJobsCompleted;
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ }
+
+ private void OnConnectStateChanged(ConnectInfo state)
+ {
+ m_ConnectState = state;
+
+ m_Window.UpdateState(RecalculateState(), false);
+ }
+
+ private void OnCollabStateChanged(CollabInfo state)
+ {
+ // Sometimes a collab state change will trigger even though everything is the same
+ if (m_CollabState.Equals(state))
+ return;
+
+ if (m_CollabState.tip != state.tip)
+ OnUpdatePage(m_CurrentPage);
+
+ m_CollabState = state;
+ m_Window.UpdateState(RecalculateState(), false);
+ if (state.inProgress)
+ {
+ m_Window.inProgressRevision = m_ProgressRevision;
+ }
+ else
+ {
+ m_Window.inProgressRevision = null;
+ }
+ }
+
+ private void OnCollabRevisionUpdated(CollabInfo state)
+ {
+ OnUpdatePage(m_CurrentPage);
+ }
+
+ private void OnCollabJobsCompleted(CollabInfo state)
+ {
+ m_ProgressRevision = null;
+ }
+
+ private void OnCollabError()
+ {
+ m_IsCollabError = true;
+ m_Window.UpdateState(RecalculateState(), false);
+ }
+
+ private void OnCollabErrorCleared()
+ {
+ m_IsCollabError = false;
+ m_FetchInProgress = true;
+ m_Service.GetRevisions(m_CurrentPage * ItemsPerPage, ItemsPerPage);
+ m_Window.UpdateState(RecalculateState(), false);
+ }
+
+ private void OnPlayModeStateChanged(PlayModeStateChange stateChange)
+ {
+ // If entering play mode, disable
+ if (stateChange == PlayModeStateChange.ExitingEditMode ||
+ stateChange == PlayModeStateChange.EnteredPlayMode)
+ {
+ m_Window.revisionActionsEnabled = false;
+ }
+ // If exiting play mode, enable!
+ else if (stateChange == PlayModeStateChange.EnteredEditMode ||
+ stateChange == PlayModeStateChange.ExitingPlayMode)
+ {
+ m_Window.revisionActionsEnabled = true;
+ }
+ }
+
+ private HistoryState RecalculateState()
+ {
+ if (!m_ConnectState.online)
+ return HistoryState.Offline;
+ if (m_ConnectState.maintenance || m_CollabState.maintenance)
+ return HistoryState.Maintenance;
+ if (!m_ConnectState.loggedIn)
+ return HistoryState.LoggedOut;
+ if (!m_CollabState.seat)
+ return HistoryState.NoSeat;
+ if (!Collab.instance.IsCollabEnabledForCurrentProject())
+ return HistoryState.Disabled;
+ if (!Collab.instance.IsConnected() || !m_CollabState.ready || m_FetchInProgress)
+ return HistoryState.Waiting;
+ if (m_ConnectState.error || m_IsCollabError)
+ return HistoryState.Error;
+
+ return HistoryState.Ready;
+ }
+
+ // TODO: Eventually this can be a listener on the build service status
+ public void UpdateBuildServiceStatus()
+ {
+ foreach (var service in UnityConnectServiceCollection.instance.GetAllServiceInfos())
+ {
+ if (service.name.Equals("Build"))
+ {
+ BuildServiceEnabled = service.enabled;
+ }
+ }
+ }
+
+ public void ShowBuildForCommit(string revisionID)
+ {
+ m_BuildAccess.ShowBuildForCommit(revisionID);
+ }
+
+ public void ShowServicePage()
+ {
+ m_BuildAccess.ShowServicePage();
+ }
+
+ public void OnUpdatePage(int page)
+ {
+ m_FetchInProgress = true;
+ m_Service.GetRevisions(page * ItemsPerPage, ItemsPerPage);
+ m_Window.UpdateState(RecalculateState(), false);
+ m_RequestedPage = page;
+ }
+
+ private void OnFetchRevisions(RevisionsResult data)
+ {
+ m_FetchInProgress = false;
+ IEnumerable items = null;
+ if (data != null)
+ {
+ m_CurrentPage = m_RequestedPage;
+ m_TotalRevisions = data.RevisionsInRepo;
+ items = m_Factory.GenerateElements(data.Revisions, m_TotalRevisions, m_CurrentPage * ItemsPerPage, m_Service.tipRevision, m_Window.inProgressRevision, m_Window.revisionActionsEnabled, BuildServiceEnabled, m_Service.currentUser);
+ }
+
+ // State must be recalculated prior to inserting items
+ m_Window.UpdateState(RecalculateState(), false);
+ m_Window.UpdateRevisions(items, m_Service.tipRevision, m_TotalRevisions, m_CurrentPage);
+ }
+
+ private void OnRestore(string revisionId, bool updatetorevision)
+ {
+ m_ProgressRevision = revisionId;
+ Collab.instance.ResyncToRevision(revisionId);
+ }
+
+ private void OnGoBack(string revisionId, bool updatetorevision)
+ {
+ m_ProgressRevision = revisionId;
+ Collab.instance.GoBackToRevision(revisionId, false);
+ }
+
+ private void OnUpdate(string revisionId, bool updatetorevision)
+ {
+ m_ProgressRevision = revisionId;
+ Collab.instance.Update(revisionId, updatetorevision);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta
new file mode 100644
index 00000000..9c37ecd8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a7c91a123806d41a0873fcdcb629b1c4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta
new file mode 100644
index 00000000..f62ac6be
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fd0a39b4d296d4d509b4f1dbd08d0630
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs
new file mode 100644
index 00000000..ac3754d2
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs
@@ -0,0 +1,53 @@
+using System;
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class BuildStatusButton : Button
+ {
+ private readonly string iconPrefix = "Icons/Collab.Build";
+ private readonly string iconSuffix = ".png";
+ Label labelElement = new Label();
+ Image iconElement = new Image() {name = "BuildIcon"};
+
+ public BuildStatusButton(Action clickEvent) : base(clickEvent)
+ {
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture;
+ labelElement.text = "Build Now";
+ Add(iconElement);
+ Add(labelElement);
+ }
+
+ public BuildStatusButton(Action clickEvent, BuildState state, int failures) : base(clickEvent)
+ {
+ switch (state)
+ {
+ case BuildState.InProgress:
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture;
+ labelElement.text = "In progress";
+ break;
+
+ case BuildState.Failed:
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + "Failed" + iconSuffix) as Texture;
+ labelElement.text = failures + ((failures == 1) ? " failure" : " failures");
+ break;
+
+ case BuildState.Success:
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + "Succeeded" + iconSuffix) as Texture;
+ labelElement.text = "success";
+ break;
+ }
+
+ Add(iconElement);
+ Add(labelElement);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta
new file mode 100644
index 00000000..d74a58af
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0217a80286f79419daa202f69409f19b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs
new file mode 100644
index 00000000..e3bb05a6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs
@@ -0,0 +1,78 @@
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEditor.Connect;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryDropDown : VisualElement
+ {
+ private readonly VisualElement m_FilesContainer;
+ private readonly Label m_ToggleLabel;
+ private int m_ChangesTotal;
+ private string m_RevisionId;
+
+ public CollabHistoryDropDown(ICollection changes, int changesTotal, bool changesTruncated, string revisionId)
+ {
+ m_FilesContainer = new VisualElement();
+ m_ChangesTotal = changesTotal;
+ m_RevisionId = revisionId;
+
+ m_ToggleLabel = new Label(ToggleText(false));
+ m_ToggleLabel.AddManipulator(new Clickable(ToggleDropdown));
+ Add(m_ToggleLabel);
+
+ foreach (ChangeData change in changes)
+ {
+ m_FilesContainer.Add(new CollabHistoryDropDownItem(change.path, change.action));
+ }
+
+ if (changesTruncated)
+ {
+ m_FilesContainer.Add(new Button(ShowAllClick)
+ {
+ text = "Show all on dashboard"
+ });
+ }
+ }
+
+ private void ToggleDropdown()
+ {
+ if (Contains(m_FilesContainer))
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseAssets");
+ Remove(m_FilesContainer);
+ m_ToggleLabel.text = ToggleText(false);
+ }
+ else
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandAssets");
+ Add(m_FilesContainer);
+ m_ToggleLabel.text = ToggleText(true);
+ }
+ }
+
+ private string ToggleText(bool open)
+ {
+ var icon = open ? "\u25bc" : "\u25b6";
+ var change = m_ChangesTotal == 1 ? "Change" : "Changes";
+ return string.Format("{0} {1} Asset {2}", icon, m_ChangesTotal, change);
+ }
+
+ private void ShowAllClick()
+ {
+ var host = UnityConnect.instance.GetConfigurationURL(CloudConfigUrl.CloudServicesDashboard);
+ var org = UnityConnect.instance.GetOrganizationId();
+ var proj = UnityConnect.instance.GetProjectGUID();
+ var url = string.Format("{0}/collab/orgs/{1}/projects/{2}/commits?commit={3}", host, org, proj, m_RevisionId);
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowAllOnDashboard");
+ Application.OpenURL(url);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta
new file mode 100644
index 00000000..513b66bf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a483595b0257945278dc75c5ff7d82ee
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs
new file mode 100644
index 00000000..3ad43f23
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs
@@ -0,0 +1,53 @@
+using System;
+using System.IO;
+using System.Linq;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryDropDownItem : VisualElement
+ {
+ public CollabHistoryDropDownItem(string path, string action)
+ {
+ var fileName = Path.GetFileName(path);
+ var isFolder = Path.GetFileNameWithoutExtension(path).Equals(fileName);
+ var fileIcon = GetIconElement(action, fileName, isFolder);
+ var metaContainer = new VisualElement();
+ var fileNameLabel = new Label
+ {
+ name = "FileName",
+ text = fileName
+ };
+ var filePathLabel = new Label
+ {
+ name = "FilePath",
+ text = path
+ };
+ metaContainer.Add(fileNameLabel);
+ metaContainer.Add(filePathLabel);
+ Add(fileIcon);
+ Add(metaContainer);
+ }
+
+ private Image GetIconElement(string action, string fileName, bool isFolder)
+ {
+ var prefix = isFolder ? "Folder" : "File";
+ var actionName = action.First().ToString().ToUpper() + action.Substring(1);
+ // Use the same icon for renamed and moved files
+ actionName = actionName.Equals("Renamed") ? "Moved" : actionName;
+ var iconElement = new Image
+ {
+ name = "FileIcon",
+ image = EditorGUIUtility.LoadIcon("Icons/Collab." + prefix + actionName + ".png")
+ };
+ return iconElement;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta
new file mode 100644
index 00000000..10bf40eb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d912d4873af534bd4a9d44bf1b52f14e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs
new file mode 100644
index 00000000..24e5d1dd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs
@@ -0,0 +1,229 @@
+using System;
+using System.Linq;
+using System.Security.Cryptography;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryItem : VisualElement
+ {
+ public static RevisionAction s_OnRestore;
+ public static RevisionAction s_OnGoBack;
+ public static RevisionAction s_OnUpdate;
+ public static ShowBuildAction s_OnShowBuild;
+ public static Action s_OnShowServices;
+
+ private readonly string m_RevisionId;
+ private readonly string m_FullDescription;
+ private readonly DateTime m_TimeStamp;
+ private readonly Button m_Button;
+ private readonly HistoryProgressSpinner m_ProgressSpinner;
+ private VisualElement m_ActionsTray;
+ private VisualElement m_Details;
+ private Label m_Description;
+ private Label m_TimeAgo;
+ private readonly Button m_ExpandCollapseButton;
+ private bool m_Expanded;
+
+ private const int kMaxDescriptionChars = 500;
+
+ public bool RevisionActionsEnabled
+ {
+ set
+ {
+ m_Button.SetEnabled(value);
+ }
+ }
+
+ public DateTime timeStamp
+ {
+ get { return m_TimeStamp; }
+ }
+
+ public CollabHistoryItem(RevisionData data)
+ {
+ m_RevisionId = data.id;
+ m_TimeStamp = data.timeStamp;
+ name = "HistoryItem";
+ m_ActionsTray = new VisualElement {name = "HistoryItemActionsTray"};
+ m_ProgressSpinner = new HistoryProgressSpinner();
+ m_Details = new VisualElement {name = "HistoryDetail"};
+ var author = new Label(data.authorName) {name = "Author"};
+ m_TimeAgo = new Label(TimeAgo.GetString(m_TimeStamp));
+ m_FullDescription = data.comment;
+ var shouldTruncate = ShouldTruncateDescription(m_FullDescription);
+ if (shouldTruncate)
+ {
+ m_Description = new Label(GetTruncatedDescription(m_FullDescription));
+ }
+ else
+ {
+ m_Description = new Label(m_FullDescription);
+ }
+ m_Description.name = "RevisionDescription";
+ var dropdown = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated, data.id);
+ if (data.current)
+ {
+ m_Button = new Button(Restore) {name = "ActionButton", text = "Restore"};
+ }
+ else if (data.obtained)
+ {
+ m_Button = new Button(GoBackTo) {name = "ActionButton", text = "Go back to..."};
+ }
+ else
+ {
+ m_Button = new Button(UpdateTo) {name = "ActionButton", text = "Update"};
+ }
+ m_Button.SetEnabled(data.enabled);
+ m_ProgressSpinner.ProgressEnabled = data.inProgress;
+
+ m_ActionsTray.Add(m_ProgressSpinner);
+ m_ActionsTray.Add(m_Button);
+
+ m_Details.Add(author);
+ m_Details.Add(m_TimeAgo);
+ m_Details.Add(m_Description);
+
+ if (shouldTruncate)
+ {
+ m_ExpandCollapseButton = new Button(ToggleDescription) { name = "ToggleDescription", text = "Show More" };
+ m_Details.Add(m_ExpandCollapseButton);
+ }
+
+ if (data.buildState != BuildState.None)
+ {
+ BuildStatusButton buildButton;
+ if (data.buildState == BuildState.Configure)
+ buildButton = new BuildStatusButton(ShowServicePage);
+ else
+ buildButton = new BuildStatusButton(ShowBuildForCommit, data.buildState, data.buildFailures);
+
+ m_Details.Add(buildButton);
+ }
+
+ m_Details.Add(m_ActionsTray);
+ m_Details.Add(dropdown);
+
+ Add(m_Details);
+
+ this.schedule.Execute(UpdateTimeAgo).Every(1000 * 20);
+ }
+
+ public static void SetUpCallbacks(RevisionAction Restore, RevisionAction GoBack, RevisionAction Update)
+ {
+ s_OnRestore = Restore;
+ s_OnGoBack = GoBack;
+ s_OnUpdate = Update;
+ }
+
+ public void SetInProgressStatus(string revisionIdInProgress)
+ {
+ if (String.IsNullOrEmpty(revisionIdInProgress))
+ {
+ m_Button.SetEnabled(true);
+ m_ProgressSpinner.ProgressEnabled = false;
+ }
+ else
+ {
+ m_Button.SetEnabled(false);
+ if (m_RevisionId.Equals(revisionIdInProgress))
+ {
+ m_ProgressSpinner.ProgressEnabled = true;
+ }
+ }
+ }
+
+ void ShowBuildForCommit()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowBuild");
+ if (s_OnShowBuild != null)
+ {
+ s_OnShowBuild(m_RevisionId);
+ }
+ }
+
+ void ShowServicePage()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowServices");
+ if (s_OnShowServices != null)
+ {
+ s_OnShowServices();
+ }
+ }
+
+ void Restore()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Restore");
+ if (s_OnRestore != null)
+ {
+ s_OnRestore(m_RevisionId, false);
+ }
+ }
+
+ void GoBackTo()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "GoBackTo");
+ if (s_OnGoBack != null)
+ {
+ s_OnGoBack(m_RevisionId, false);
+ }
+ }
+
+ void UpdateTo()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Update");
+ if (s_OnUpdate != null)
+ {
+ s_OnUpdate(m_RevisionId, true);
+ }
+ }
+
+ void UpdateTimeAgo()
+ {
+ m_TimeAgo.text = TimeAgo.GetString(m_TimeStamp);
+ }
+
+ bool ShouldTruncateDescription(string description)
+ {
+ return description.Contains(Environment.NewLine) || description.Length > kMaxDescriptionChars;
+ }
+
+ string GetTruncatedDescription(string description)
+ {
+ string result = description.Contains(Environment.NewLine) ?
+ description.Substring(0, description.IndexOf(Environment.NewLine)) : description;
+ if (result.Length > kMaxDescriptionChars)
+ {
+ result = result.Substring(0, kMaxDescriptionChars) + "...";
+ }
+ return result;
+ }
+
+ void ToggleDescription()
+ {
+ if (m_Expanded)
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseDescription");
+ m_Expanded = false;
+ m_ExpandCollapseButton.text = "Show More";
+ m_Description.text = GetTruncatedDescription(m_FullDescription);
+ }
+ else
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandDescription");
+ m_Expanded = true;
+ m_ExpandCollapseButton.text = "Show Less";
+ m_Description.text = m_FullDescription;
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta
new file mode 100644
index 00000000..290bd28e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c4c1445ee948a4124bfa9fb818a17e36
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs
new file mode 100644
index 00000000..e7d7aa6c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryItemFactory : ICollabHistoryItemFactory
+ {
+ const int k_MaxChangesPerRevision = 10;
+
+ public IEnumerable GenerateElements(IEnumerable revisions, int totalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser)
+ {
+ int index = startIndex;
+
+ foreach (var rev in revisions)
+ {
+ index++;
+ var current = rev.revisionID == tipRev;
+
+ // Calculate build status
+ BuildState buildState = BuildState.None;
+ int buildFailures = 0;
+ if (rev.buildStatuses != null && rev.buildStatuses.Length > 0)
+ {
+ bool inProgress = false;
+ foreach (CloudBuildStatus buildStatus in rev.buildStatuses)
+ {
+ if (buildStatus.complete)
+ {
+ if (!buildStatus.success)
+ {
+ buildFailures++;
+ }
+ }
+ else
+ {
+ inProgress = true;
+ break;
+ }
+ }
+
+ if (inProgress)
+ {
+ buildState = BuildState.InProgress;
+ }
+ else if (buildFailures > 0)
+ {
+ buildState = BuildState.Failed;
+ }
+ else
+ {
+ buildState = BuildState.Success;
+ }
+ }
+ else if (current && !buildServiceEnabled)
+ {
+ buildState = BuildState.Configure;
+ }
+
+ // Calculate the number of changes performed on files and folders (not meta files)
+ var paths = new Dictionary();
+ foreach (ChangeAction change in rev.entries)
+ {
+ if (change.path.EndsWith(".meta"))
+ {
+ var path = change.path.Substring(0, change.path.Length - 5);
+ // Actions taken on meta files are secondary to any actions taken on the main file
+ if (!paths.ContainsKey(path))
+ paths[path] = new ChangeData() {path = path, action = change.action};
+ }
+ else
+ {
+ paths[change.path] = new ChangeData() {path = change.path, action = change.action};
+ }
+ }
+
+ var displayName = (rev.author != currentUser) ? rev.authorName : "You";
+
+ var item = new RevisionData
+ {
+ id = rev.revisionID,
+ index = totalRevisions - index + 1,
+ timeStamp = TimeStampToDateTime(rev.timeStamp),
+ authorName = displayName,
+ comment = rev.comment,
+
+ obtained = rev.isObtained,
+ current = current,
+ inProgress = (rev.revisionID == inProgressRevision),
+ enabled = revisionActionsEnabled,
+
+ buildState = buildState,
+ buildFailures = buildFailures,
+
+ changes = paths.Values.Take(k_MaxChangesPerRevision).ToList(),
+ changesTotal = paths.Values.Count,
+ changesTruncated = paths.Values.Count > k_MaxChangesPerRevision,
+ };
+
+ yield return item;
+ }
+ }
+
+ private static DateTime TimeStampToDateTime(double timeStamp)
+ {
+ DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+ dateTime = dateTime.AddSeconds(timeStamp).ToLocalTime();
+ return dateTime;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta
new file mode 100644
index 00000000..3250d966
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fc46f91ea1e8e4ca2ab693fef9156dbe
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs
new file mode 100644
index 00000000..2b8fe652
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs
@@ -0,0 +1,94 @@
+using System;
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryRevisionLine : VisualElement
+ {
+ public CollabHistoryRevisionLine(int number)
+ {
+ AddNumber(number);
+ AddLine("topLine");
+ AddLine("bottomLine");
+ AddIndicator();
+ }
+
+ public CollabHistoryRevisionLine(DateTime date, bool isFullDateObtained)
+ {
+ AddLine(isFullDateObtained ? "obtainedDateLine" : "absentDateLine");
+ AddHeader(GetFormattedHeader(date));
+ AddToClassList("revisionLineHeader");
+ }
+
+ private void AddHeader(string content)
+ {
+ Add(new Label
+ {
+ text = content
+ });
+ }
+
+ private void AddIndicator()
+ {
+ Add(new VisualElement
+ {
+ name = "RevisionIndicator"
+ });
+ }
+
+ private void AddLine(string className = null)
+ {
+ var line = new VisualElement
+ {
+ name = "RevisionLine"
+ };
+ if (!String.IsNullOrEmpty(className))
+ {
+ line.AddToClassList(className);
+ }
+ Add(line);
+ }
+
+ private void AddNumber(int number)
+ {
+ Add(new Label
+ {
+ text = number.ToString(),
+ name = "RevisionIndex"
+ });
+ }
+
+ private string GetFormattedHeader(DateTime date)
+ {
+ string result = "Commits on " + date.ToString("MMM d");
+ switch (date.Day)
+ {
+ case 1:
+ case 21:
+ case 31:
+ result += "st";
+ break;
+ case 2:
+ case 22:
+ result += "nd";
+ break;
+ case 3:
+ case 23:
+ result += "rd";
+ break;
+ default:
+ result += "th";
+ break;
+ }
+ return result;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta
new file mode 100644
index 00000000..2659a3c3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c737f7a9d78541d1ab25f28f045dd32
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs
new file mode 100644
index 00000000..fad3b824
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs
@@ -0,0 +1,69 @@
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class HistoryProgressSpinner : Image
+ {
+ private readonly Texture2D[] m_StatusWheelTextures;
+ private bool m_ProgressEnabled;
+ private IVisualElementScheduledItem m_Animation;
+
+ public bool ProgressEnabled
+ {
+ set
+ {
+ if (m_ProgressEnabled == value)
+ return;
+
+ m_ProgressEnabled = value;
+ visible = value;
+
+
+ if (value)
+ {
+ if (m_Animation == null)
+ {
+ m_Animation = this.schedule.Execute(AnimateProgress).Every(33);
+ }
+ else
+ {
+ m_Animation.Resume();
+ }
+ }
+ else
+ {
+ if (m_Animation != null)
+ {
+ m_Animation.Pause();
+ }
+ }
+ }
+ }
+
+ public HistoryProgressSpinner()
+ {
+ m_StatusWheelTextures = new Texture2D[12];
+ for (int i = 0; i < 12; i++)
+ {
+ m_StatusWheelTextures[i] = EditorGUIUtility.LoadIcon("WaitSpin" + i.ToString("00"));
+ }
+ image = m_StatusWheelTextures[0];
+ style.width = m_StatusWheelTextures[0].width;
+ style.height = m_StatusWheelTextures[0].height;
+ visible = false;
+ }
+
+ private void AnimateProgress(TimerState obj)
+ {
+ int frame = (int)Mathf.Repeat(Time.realtimeSinceStartup * 10, 11.99f);
+ image = m_StatusWheelTextures[frame];
+ MarkDirtyRepaint();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta
new file mode 100644
index 00000000..0ded4e8a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cf6aca931950a4a6a886e214e9e649c4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs
new file mode 100644
index 00000000..03239a33
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using UnityEditor.Collaboration;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal interface ICollabHistoryItemFactory
+ {
+ IEnumerable GenerateElements(IEnumerable revsRevisions, int mTotalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta
new file mode 100644
index 00000000..08e90856
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 821f5482c5a3f4389885f4432433f56f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs
new file mode 100644
index 00000000..472a70e7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal interface IPagerData
+ {
+ int curPage { get; }
+ int totalPages { get; }
+ PageChangeAction OnPageChanged { get; }
+ }
+
+ internal class PagerElement : VisualElement
+ {
+ IPagerData m_Data;
+ readonly Label m_PageText;
+ readonly Button m_DownButton;
+ readonly Button m_UpButton;
+
+ public PagerElement(IPagerData dataSource)
+ {
+ m_Data = dataSource;
+
+ this.style.flexDirection = FlexDirection.Row;
+ this.style.alignSelf = Align.Center;
+
+ Add(m_DownButton = new Button(OnPageDownClicked) {text = "\u25c5 Newer"});
+ m_DownButton.AddToClassList("PagerDown");
+
+ m_PageText = new Label();
+ m_PageText.AddToClassList("PagerLabel");
+ Add(m_PageText);
+
+ Add(m_UpButton = new Button(OnPageUpClicked) {text = "Older \u25bb"});
+ m_UpButton.AddToClassList("PagerUp");
+
+ UpdateControls();
+ }
+
+ void OnPageDownClicked()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "NewerPage");
+ m_Data.OnPageChanged(m_Data.curPage - 1);
+ }
+
+ void OnPageUpClicked()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "OlderPage");
+ m_Data.OnPageChanged(m_Data.curPage + 1);
+ }
+
+ public void Refresh()
+ {
+ UpdateControls();
+ }
+
+ void UpdateControls()
+ {
+ var curPage = m_Data.curPage;
+ var totalPages = m_Data.totalPages;
+
+ m_PageText.text = (curPage + 1) + " / " + totalPages;
+ m_DownButton.SetEnabled(curPage > 0);
+ m_UpButton.SetEnabled(curPage < totalPages - 1);
+ }
+ }
+
+ internal enum PagerLocation
+ {
+ Top,
+ Bottom,
+ }
+
+ internal class PagedListView : VisualElement, IPagerData
+ {
+ public const int DefaultItemsPerPage = 10;
+
+ readonly VisualElement m_ItemContainer;
+ readonly PagerElement m_PagerTop, m_PagerBottom;
+ int m_PageSize = DefaultItemsPerPage;
+ IEnumerable m_Items;
+ int m_TotalItems;
+ int m_CurPage;
+
+ public int pageSize
+ {
+ set { m_PageSize = value; }
+ }
+
+ public IEnumerable items
+ {
+ set
+ {
+ m_Items = value;
+ LayoutItems();
+ }
+ }
+
+ public int totalItems
+ {
+ set
+ {
+ if (m_TotalItems == value)
+ return;
+
+ m_TotalItems = value;
+ UpdatePager();
+ }
+ }
+
+ public PageChangeAction OnPageChanged { get; set; }
+
+ public PagedListView()
+ {
+ m_PagerTop = new PagerElement(this);
+
+ m_ItemContainer = new VisualElement()
+ {
+ name = "PagerItems",
+ };
+ Add(m_ItemContainer);
+ m_Items = new List();
+
+ m_PagerBottom = new PagerElement(this);
+ }
+
+ void LayoutItems()
+ {
+ m_ItemContainer.Clear();
+ foreach (var item in m_Items)
+ {
+ m_ItemContainer.Add(item);
+ }
+ }
+
+ void UpdatePager()
+ {
+ if (m_PagerTop.parent != this && totalPages > 1 && curPage > 0)
+ Insert(0, m_PagerTop);
+ if (m_PagerTop.parent == this && (totalPages <= 1 || curPage == 0))
+ Remove(m_PagerTop);
+
+ if (m_PagerBottom.parent != this && totalPages > 1)
+ Add(m_PagerBottom);
+ if (m_PagerBottom.parent == this && totalPages <= 1)
+ Remove(m_PagerBottom);
+
+ m_PagerTop.Refresh();
+ m_PagerBottom.Refresh();
+ }
+
+ int pageCount
+ {
+ get
+ {
+ var pages = m_TotalItems / m_PageSize;
+ if (m_TotalItems % m_PageSize > 0)
+ pages++;
+
+ return pages;
+ }
+ }
+
+ public int curPage
+ {
+ get { return m_CurPage; }
+ set
+ {
+ m_CurPage = value;
+ UpdatePager();
+ }
+ }
+
+ public int totalPages
+ {
+ get
+ {
+ var extraPage = 0;
+ if (m_TotalItems % m_PageSize > 0)
+ extraPage = 1;
+ return m_TotalItems / m_PageSize + extraPage;
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta
new file mode 100644
index 00000000..565f7a2e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 50de529b6a28f4a7093045e08810a5df
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs
new file mode 100644
index 00000000..9b50e7a5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs
@@ -0,0 +1,88 @@
+using System;
+using UnityEditor;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class StatusView : VisualElement
+ {
+ Image m_Image;
+ Label m_Message;
+ Button m_Button;
+ Action m_Callback;
+
+ public Texture icon
+ {
+ get { return m_Image.image; }
+ set
+ {
+ m_Image.image = value;
+ m_Image.visible = value != null;
+ // Until "display: hidden" is added, this is the only way to hide an element
+ m_Image.style.height = value != null ? 150 : 0;
+ }
+ }
+
+ public string message
+ {
+ get { return m_Message.text; }
+ set
+ {
+ m_Message.text = value;
+ m_Message.visible = value != null;
+ }
+ }
+
+ public string buttonText
+ {
+ get { return m_Button.text; }
+ set
+ {
+ m_Button.text = value;
+ UpdateButton();
+ }
+ }
+
+ public Action callback
+ {
+ get { return m_Callback; }
+ set
+ {
+ m_Callback = value;
+ UpdateButton();
+ }
+ }
+
+ public StatusView()
+ {
+ name = "StatusView";
+
+ this.StretchToParentSize();
+
+ m_Image = new Image() { name = "StatusIcon", visible = false, style = { height = 0f }};
+ m_Message = new Label() { name = "StatusMessage", visible = false};
+ m_Button = new Button(InternalCallaback) { name = "StatusButton", visible = false};
+
+ Add(m_Image);
+ Add(m_Message);
+ Add(m_Button);
+ }
+
+ private void UpdateButton()
+ {
+ m_Button.visible = m_Button.text != null && m_Callback != null;
+ }
+
+ private void InternalCallaback()
+ {
+ m_Callback();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta
new file mode 100644
index 00000000..bb634b19
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 08e9894bdf0834710b22d3c0aa245ac0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta
new file mode 100644
index 00000000..01229c29
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a6ab6fd2b91214e8a9c8ec2224a528de
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta
new file mode 100644
index 00000000..0ff03824
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6b1ae1e78552c459d9ce27048ff51c7f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss
new file mode 100644
index 00000000..b20f08e9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss
@@ -0,0 +1,259 @@
+.unity-button {
+ min-height:0;
+ -unity-text-align:middle-center;
+ margin-left:4px;
+ margin-top:3px;
+ margin-right:4px;
+ margin-bottom:3px;
+ border-left-width:6px;
+ border-top-width:4px;
+ border-right-width:6px;
+ border-bottom-width:4px;
+ padding-left:6px;
+ padding-top:2px;
+ padding-right:6px;
+ padding-bottom:3px;
+}
+
+.unity-label {
+ overflow: hidden;
+ margin-left:4px;
+ margin-top:2px;
+ margin-right:4px;
+ margin-bottom:2px;
+ padding-left:2px;
+ padding-top:1px;
+ min-height: 0;
+}
+
+#HistoryContainer {
+ flex: 1 0 0;
+}
+
+#HistoryItem {
+ flex: 1 0 0;
+ flex-direction: row;
+}
+
+#HistoryDetail {
+ margin-top: 10px;
+ margin-left: 10px;
+ margin-bottom: 10px;
+ margin-right: 10px;
+ padding-top: 4px;
+ flex: 1 0 0;
+}
+
+#Author {
+ -unity-font-style: bold;
+ font-size: 12px;
+}
+
+#HistoryDetail > Button {
+ align-self: flex-end;
+}
+
+CollabHistoryRevisionLine {
+ width: 40px;
+}
+
+#RevisionLine {
+ flex: 1 0 0;
+ margin-left: 35px;
+ width: 1.5px;
+}
+
+#RevisionLine.topLine {
+ height: 20px;
+ flex: 0 0 auto;
+}
+
+#RevisionLine.absentDateLine {
+ background-color: #797676;
+}
+
+.absentRevision #RevisionLine {
+ background-color: #797676;
+}
+
+.currentRevision #RevisionLine.topLine {
+ background-color: #797676;
+}
+
+#RevisionIndex {
+ position: absolute;
+ min-width: 23px;
+ -unity-text-align: middle-right;
+ top: 15.8px;
+ font-size: 9px;
+}
+
+#RevisionIndicator {
+ position: absolute;
+ background-color: #000;
+ border-radius: 3px;
+ width: 8px;
+ height: 8px;
+ border-bottom-width: 2px;
+ border-left-width: 2px;
+ border-right-width: 2px;
+ border-top-width: 2px;
+ top: 20px;
+ left: 32px;
+}
+
+.revisionLineHeader {
+ width: 200px;
+ height: 20px;
+}
+
+.revisionLineHeader > .unity-label {
+ position: absolute;
+ margin-left: 47px;
+ margin-top: 3px;
+}
+
+#PagerItems {
+ flex-direction: column;
+}
+
+PagerElement > .unity-label {
+ margin-top: 8px;
+}
+
+.absentRevision #RevisionIndicator {
+ border-color: #797676;
+}
+
+.absentRevision #RevisionIndex {
+ color: #797676;
+}
+
+.currentRevision #HistoryDetail {
+ border-top-width: 2px;
+}
+
+#HistoryItem #RevisionDescription {
+ white-space: normal;
+}
+
+#HistoryItem #ToggleDescription {
+ align-self: flex-start;
+ padding-top: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-bottom: 2px;
+}
+
+#HistoryItem #ActionButton {
+ position: absolute;
+ right: 0;
+}
+
+#HistoryItem #BuildIcon {
+ width: 16px;
+ height: 13px;
+}
+
+#HistoryItemActionsTray {
+ flex: 1 0 0;
+ flex-direction: row;
+ align-items: center;
+ height: 38px;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+CollabHistoryDropDown {
+ border-top-width: 1px;
+}
+
+CollabHistoryDropDown > .unity-label {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+CollabHistoryDropDownItem {
+ flex-direction: row;
+ border-top-width: 1px;
+ overflow: hidden;
+}
+
+#FileIcon {
+ align-self: center;
+ width: 26px;
+ height: 26px;
+}
+
+#FileName {
+ -unity-font-style: bold;
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+#FileIcon {
+ padding-top: 0;
+ margin-top: 0;
+}
+
+#ErrorBar {
+ height: 24px;
+ background-color: #ff0000;
+ color: #000;
+ font-size: 12px;
+}
+
+#ErrorBar > #CloseButton {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 24px;
+ height: 24px;
+ color: #000;
+ font-size: 18px;
+ -unity-font-style: bold;
+}
+
+#StatusView {
+ flex-direction: column;
+ justify-content: center;
+ align-self: center;
+ align-items: center;
+ flex: 1 0 0;
+}
+
+#StatusView > #StatusIcon {
+ width: 115px;
+ height: 150px;
+}
+
+#StatusView > #StatusMessage {
+ font-size: 22px;
+ width: 230px;
+ white-space: normal;
+ -unity-text-align: middle-center;
+}
+
+#StatusView > #StatusButton {
+ font-size: 12px;
+ margin-top: 20px;
+ background-image: none;
+ width: 108px;
+ height: 29px;
+}
+
+BuildStatusButton.unity-button {
+ flex-direction: row;
+ align-self: flex-end;
+ align-items: center;
+ margin-right: 10px;
+ padding-left:0;
+ padding-top:0;
+ padding-right:0;
+ padding-bottom:0;
+}
+
+BuildStatusButton.unity-button .unity-label {
+ padding-left: 2px;
+}
+
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta
new file mode 100644
index 00000000..035b6621
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3a2d94c8977984b67984caeff9fa666e
+ScriptedImporter:
+ fileIDToRecycleName:
+ 11400000: stylesheet
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss
new file mode 100644
index 00000000..de436f89
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss
@@ -0,0 +1,86 @@
+#HistoryContainer {
+ background-color: #292929;
+}
+
+.obtainedRevision #HistoryDetail {
+ background-color: #333;
+}
+
+.absentRevision #HistoryDetail {
+ background-color: #595959;
+}
+
+#StatusView {
+ background-color: #292929;
+}
+
+#StatusView > #StatusMessage {
+ color: #959995;
+}
+
+BuildStatusButton.unity-button {
+ color: #B4B4B4;
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn.png");
+}
+
+BuildStatusButton.unity-button:hover {
+ color: #FFF;
+}
+
+BuildStatusButton.unity-button:hover:active {
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn act.png");
+}
+
+BuildStatusButton.unity-button:checked {
+ color: #F0F0F0;
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn on.png");
+}
+
+BuildStatusButton.unity-button:hover:checked {
+ color: #FFF;
+}
+
+BuildStatusButton.unity-button:hover:active:checked {
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn onact.png");
+}
+
+BuildStatusButton.unity-button:focus:checked {
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn on focus.png");
+}
+
+CollabHistoryDropDown {
+ border-color: #292929;
+}
+
+CollabHistoryDropDownItem {
+ border-color: #292929;
+}
+
+#RevisionLine.obtainedDateLine {
+ background-color: #0cb4cc;
+}
+
+.obtainedRevision #RevisionLine {
+ background-color: #0cb4cc;
+}
+
+#RevisionIndex {
+ color: #0cb4cc;
+}
+
+#RevisionIndicator {
+ border-color: #0cb4cc;
+}
+
+.currentRevision #RevisionIndicator {
+ background-color: #0cb4cc;
+}
+
+.currentRevision #HistoryDetail {
+ border-color: #0cb4cc;
+}
+
+#StatusView > #StatusButton {
+ background-color: #0cb4cc;
+ border-color: #0cb4cc;
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta
new file mode 100644
index 00000000..35a7d097
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 70d4d75a2877243758b0750cbc75b6eb
+ScriptedImporter:
+ fileIDToRecycleName:
+ 11400000: stylesheet
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss
new file mode 100644
index 00000000..3f9b85f3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss
@@ -0,0 +1,86 @@
+#HistoryContainer {
+ background-color: #a2a2a2;
+}
+
+.obtainedRevision #HistoryDetail {
+ background-color: #c2c2c2;
+}
+
+.absentRevision #HistoryDetail {
+ background-color: #dedede;
+}
+
+#StatusView {
+ background-color: #a2a2a3;
+}
+
+#StatusView > #StatusMessage {
+ color: #000;
+}
+
+BuildStatusButton.unity-button {
+ color: #111;
+ background-image: resource("Builtin Skins/LightSkin/Images/btn.png");
+}
+
+BuildStatusButton.unity-button:hover {
+ color: #000;
+}
+
+BuildStatusButton.unity-button:hover:active {
+ background-image: resource("Builtin Skins/LightSkin/Images/btn act.png");
+}
+
+BuildStatusButton.unity-button:checked {
+ color: #F0F0F0;
+ background-image: resource("Builtin Skins/LightSkin/Images/btn on.png");
+}
+
+BuildStatusButton.unity-button:hover:checked {
+ color: #000;
+}
+
+BuildStatusButton.unity-button:hover:active:checked {
+ background-image: resource("Builtin Skins/LightSkin/Images/btn onact.png");
+}
+
+BuildStatusButton.unity-button:focus:checked {
+ background-image: resource("Builtin Skins/LightSkin/Images/btn on focus.png");
+}
+
+CollabHistoryDropDown {
+ border-color: #a2a2a2;
+}
+
+CollabHistoryDropDownItem {
+ border-color: #a2a2a2;
+}
+
+#RevisionLine.obtainedDateLine {
+ background-color: #018d98;
+}
+
+.obtainedRevision #RevisionLine {
+ background-color: #018d98;
+}
+
+#RevisionIndex {
+ color: #018d98;
+}
+
+#RevisionIndicator {
+ border-color: #018d98;
+}
+
+.currentRevision #RevisionIndicator {
+ background-color: #018d98;
+}
+
+.currentRevision #HistoryDetail {
+ border-color: #018d98;
+}
+
+#StatusView > #StatusButton {
+ background-color: #018d98;
+ border-color: #018d98;
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta
new file mode 100644
index 00000000..28c860e5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b52bde26a83564960bcb90217f72b910
+ScriptedImporter:
+ fileIDToRecycleName:
+ 11400000: stylesheet
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef
new file mode 100644
index 00000000..66511e1d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef
@@ -0,0 +1,7 @@
+{
+ "name": "Unity.CollabProxy.Editor",
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta
new file mode 100644
index 00000000..03ebeca0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 645165c8169474bfbbeb8fb0bcfd26f5
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md
new file mode 100644
index 00000000..31bde4e4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md
@@ -0,0 +1,31 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*.
+
+ 3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+ 3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity.
+
+ 3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License.
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta
new file mode 100644
index 00000000..30f5c3a6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c754112a02f354a6696fa4f2b99e95a5
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md
new file mode 100644
index 00000000..5cfbd88a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md
@@ -0,0 +1,16 @@
+# Collab Proxy UPM Package
+This is the packaged version of Collab, currently limited to containing the History and Toolbar windows, along with supporting classes.
+
+## Development
+Check this repository out in your {$PROJECT}/Packages/ folder, under the name com.unity.collab-proxy. The classes will be built by Unity.
+
+## Testing
+In order to run the tests, you will need to add this project to the testables key in your manifest.json - once you have done this, the tests will be picked up by the Unity Test Runner window.
+
+## Building
+You may build this project using msbuild. The commands to do so can be seen under .gitlab-ci.yml.
+
+## Deploying
+Gitlab will automatically build your project when you deploy. You can download the resulting artifact, which will be a dll, and place it in your Editor/bin/ folder. Open the package in Unity to generate the meta files, and then you will be able to publish.
+
+We're currently looking into a way to avoid this manual process.
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta
new file mode 100644
index 00000000..b3ad9937
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ac281230df7b14becb40b3c479f1b429
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta
new file mode 100644
index 00000000..f43ddd35
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1369382d2c5e64dc5b2ec0b6b0a94531
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta
new file mode 100644
index 00000000..b80cefdb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4506ac79f5b274cb1b249ed7f4abfb9a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs
new file mode 100644
index 00000000..ba79a204
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs
@@ -0,0 +1,583 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEditor.Collaboration;
+using UnityEngine.TestTools;
+using NUnit.Framework;
+
+namespace UnityEditor.Collaboration.Tests
+{
+ [TestFixture]
+ internal class HistoryTests
+ {
+ private TestHistoryWindow _window;
+ private TestRevisionsService _service;
+ private CollabHistoryPresenter _presenter;
+
+ [SetUp]
+ public void SetUp()
+ {
+ _window = new TestHistoryWindow();
+ _service = new TestRevisionsService();
+ _presenter = new CollabHistoryPresenter(_window, new CollabHistoryItemFactory(), _service);
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__PropagatesRevisionResult()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(authorName: "authorName", comment: "comment", revisionID: "revisionID"),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual("revisionID", item.id);
+ Assert.AreEqual("authorName", item.authorName);
+ Assert.AreEqual("comment", item.comment);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingIsInOrder()
+ {
+ _service.result = new RevisionsResult()
+ {
+ RevisionsInRepo = 4,
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.AreEqual(4, items[0].index);
+ Assert.AreEqual(3, items[1].index);
+ Assert.AreEqual(2, items[2].index);
+ Assert.AreEqual(1, items[3].index);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingChangesForMorePages()
+ {
+ _service.result = new RevisionsResult()
+ {
+ RevisionsInRepo = 12,
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ new Revision(revisionID: "4"),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var items = _window.items.ToArray();
+
+ Assert.AreEqual(12, items[0].index);
+ Assert.AreEqual(11, items[1].index);
+ Assert.AreEqual(10, items[2].index);
+ Assert.AreEqual(9, items[3].index);
+ Assert.AreEqual(8, items[4].index);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ObtainedIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(isObtained: false),
+ new Revision(isObtained: true),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.IsFalse(items[0].obtained);
+ Assert.IsTrue(items[1].obtained);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__CurrentIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ }
+ };
+ _service.tipRevision = "2";
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.AreEqual(false, items[0].current);
+ Assert.AreEqual(true, items[1].current);
+ Assert.AreEqual(false, items[2].current);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__InProgressIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ }
+ };
+ _window.inProgressRevision = "2";
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.IsFalse(items[0].inProgress);
+ Assert.IsTrue(items[1].inProgress);
+ Assert.IsFalse(items[2].inProgress);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__EnabledIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _window.revisionActionsEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(true, item.enabled);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__DisabledIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _window.revisionActionsEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(false, item.enabled);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenNotTip()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "1"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.None, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateTipHasNoneWhenEnabled()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.None, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenTip()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Configure, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenZeroBuildStatus()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Configure, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenZeroBuildStatuses()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.None, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasSuccessWhenCompleteAndSucceeded()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[1]
+ {
+ new CloudBuildStatus(complete: true, success: true),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Success, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasInProgress()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[1]
+ {
+ new CloudBuildStatus(complete: false),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.InProgress, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailure()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[1]
+ {
+ new CloudBuildStatus(complete: true, success: false),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Failed, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailureWhenAnyBuildsFail()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[3]
+ {
+ new CloudBuildStatus(complete: true, success: false),
+ new CloudBuildStatus(complete: true, success: false),
+ new CloudBuildStatus(complete: true, success: true),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Failed, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ChangesPropagateThrough()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+ var changes = item.changes.ToList();
+
+ Assert.AreEqual("Path0", changes[0].path);
+ Assert.AreEqual("Path1", changes[1].path);
+ Assert.AreEqual("Path2", changes[2].path);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ChangesTotalIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(3, item.changes.Count);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ChangesTruncatedIsCalculated()
+ {
+ for (var i = 0; i < 20; i++)
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0", entries: GenerateChangeActions(i)),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(i > 10, item.changesTruncated);
+ }
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__OnlyKeeps10ChangeActions()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(authorName: "Test", author: "test", entries: GenerateChangeActions(12)),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var item = _window.items.First();
+
+ Assert.AreEqual(10, item.changes.Count);
+ Assert.AreEqual(12, item.changesTotal);
+ Assert.AreEqual(true, item.changesTruncated);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__DeduplicatesMetaFiles()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ authorName: "Test",
+ author: "test",
+ revisionID: "",
+ entries: new ChangeAction[2]
+ {
+ new ChangeAction(path: "Path1", action: "Action1"),
+ new ChangeAction(path: "Path1.meta", action: "Action1"),
+ }
+ ),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var item = _window.items.First();
+
+ Assert.AreEqual(1, item.changes.Count);
+ Assert.AreEqual(1, item.changesTotal);
+ Assert.AreEqual("Path1", item.changes.First().path);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__FolderMetaFilesAreCounted()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ authorName: "Test",
+ author: "test",
+ entries: new ChangeAction[1]
+ {
+ new ChangeAction(path: "Folder1.meta", action: "Action1"),
+ }
+ ),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var item = _window.items.First();
+
+ Assert.AreEqual(1, item.changes.Count);
+ Assert.AreEqual(1, item.changesTotal);
+ Assert.AreEqual("Folder1", item.changes.First().path);
+ }
+
+ private static ChangeAction[] GenerateChangeActions(int count)
+ {
+ var entries = new ChangeAction[count];
+ for (var i = 0; i < count; i++)
+ entries[i] = new ChangeAction(path: "Path" + i, action: "Action" + i);
+ return entries;
+ }
+ }
+
+ internal class TestRevisionsService : IRevisionsService
+ {
+ public RevisionsResult result;
+ public event RevisionsDelegate FetchRevisionsCallback;
+
+ public string tipRevision { get; set; }
+ public string currentUser { get; set; }
+
+ public void GetRevisions(int offset, int count)
+ {
+ if(FetchRevisionsCallback != null)
+ {
+ FetchRevisionsCallback(result);
+ }
+ }
+ }
+
+ internal class TestHistoryWindow : ICollabHistoryWindow
+ {
+ public IEnumerable items;
+
+ public bool revisionActionsEnabled { get; set; }
+ public int itemsPerPage { get; set; }
+ public string errMessage { get; set; }
+ public string inProgressRevision { get; set; }
+ public PageChangeAction OnPageChangeAction { get; set; }
+ public RevisionAction OnGoBackAction { get; set; }
+ public RevisionAction OnUpdateAction { get; set; }
+ public RevisionAction OnRestoreAction { get; set; }
+ public ShowBuildAction OnShowBuildAction { get; set; }
+ public Action OnShowServicesAction { get; set; }
+
+ public void UpdateState(HistoryState state, bool force)
+ {
+ }
+
+ public void UpdateRevisions(IEnumerable items, string tip, int totalRevisions, int currPage)
+ {
+ this.items = items;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta
new file mode 100644
index 00000000..d648a7ff
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 23a56a19774ed42b6b65646af08a003c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef
new file mode 100644
index 00000000..3467a9ed
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef
@@ -0,0 +1,13 @@
+{
+ "name": "Unity.CollabProxy.EditorTests",
+ "references": [
+ "Unity.CollabProxy.Editor"
+ ],
+ "optionalUnityReferences": [
+ "TestAssemblies"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta
new file mode 100644
index 00000000..57db5c7d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 782de34c17796430ba8d0ceddb60944e
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json
new file mode 100644
index 00000000..34022740
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "com.unity.collab-proxy",
+ "displayName": "Unity Collaborate",
+ "version": "1.2.16",
+ "unity": "2018.3",
+ "description": "Collaborate is a simple way for teams to save, share, and sync their Unity project",
+ "keywords": [
+ "collab",
+ "collaborate",
+ "teams",
+ "team",
+ "cloud",
+ "backup"
+ ],
+ "dependencies": {},
+ "repository": {
+ "type": "git",
+ "url": "https://gitlab.cds.internal.unity3d.com/upm-packages/cloud-services/collab-proxy.git",
+ "revision": "070e173b6a36e1d6097b1d95e09c08840c23f6ca"
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta
new file mode 100644
index 00000000..c52d0c60
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 57b0c806ba25b48aa8a6ecb3345a4a9b
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/.gitlab-ci.yml b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/.gitlab-ci.yml
new file mode 100644
index 00000000..4c64e220
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/.gitlab-ci.yml
@@ -0,0 +1,15 @@
+image: node:6.10.0
+
+stages:
+ - push_to_packman_staging
+
+push_to_packman_staging:
+ stage: push_to_packman_staging
+ only:
+ - tags
+ script:
+ - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" package.json
+ - sed -i "s/PLACEHOLDERSHA/$CI_COMMIT_SHA/g" package.json
+ - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" CHANGELOG.md
+ - curl -u $USER_NAME:$API_KEY https://staging-packages.unity.com/auth > .npmrc
+ - npm publish
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md
new file mode 100644
index 00000000..269a7c4e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md
@@ -0,0 +1,22 @@
+# Changelog
+## [1.0.6] - 2020-11-30
+- isExplicitlyReferenced set to 0 (case 1296162)
+## [1.0.5] - 2020-11-04
+- Removed pdb files
+
+## [1.0.4] - 2020-11-03
+- Added the portable-pdb (DSTR-37)
+
+## [1.0.3] - 2020-10-30
+- Fixed being able to load mdb or portable-pdb symbolsbug (DSTR-37)
+- Minimum unity version updated (case 1279253)
+
+## [1.0.2] - 2019-12-04
+
+- Added missed metafiles
+
+## [0.0.1] - 2019-02-21
+
+### This is the first release of *Unity Package com.unity.ext.nunit*.
+
+- Migrated the custom version of nunit from inside of unity.
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md.meta
new file mode 100644
index 00000000..d91fbdec
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f49bbe06ffa5ae24abe32abdab430c24
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/Documentation~/ext.nunit.md b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/Documentation~/ext.nunit.md
new file mode 100644
index 00000000..2a38b9d8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/Documentation~/ext.nunit.md
@@ -0,0 +1,6 @@
+# Custom Nunit build to work with Unity
+
+This version of nunit works with all platforms, il2cpp and Mono AOT.
+
+For Nunit Documentation:
+https://github.com/nunit/docs/wiki/NUnit-Documentation
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md
new file mode 100644
index 00000000..ccc1f59c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md
@@ -0,0 +1,19 @@
+Copyright (c) 2018 Charlie Poole, Rob Prouse
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md.meta
new file mode 100644
index 00000000..90df748f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f91a00d2dca52b843b2d50ccf750737d
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md
new file mode 100644
index 00000000..2a38b9d8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md
@@ -0,0 +1,6 @@
+# Custom Nunit build to work with Unity
+
+This version of nunit works with all platforms, il2cpp and Mono AOT.
+
+For Nunit Documentation:
+https://github.com/nunit/docs/wiki/NUnit-Documentation
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md.meta
new file mode 100644
index 00000000..e9a7f9fa
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5da62a0c1c5218c4aa16b74546a7822d
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35.meta
new file mode 100644
index 00000000..278a2faf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a36d8b72880a8004f96ac54ce4598ff9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom.meta
new file mode 100644
index 00000000..750f82c9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2347243c7aa3e224f9282dc94e6fc3b2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll
new file mode 100644
index 00000000..ac346cb9
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll differ
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll.meta
new file mode 100644
index 00000000..4d8a380f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: f1605f5534186904fa2c4c42acbfe01e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 1
+ isExplicitlyReferenced: 1
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json
new file mode 100644
index 00000000..2ea221dd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json
@@ -0,0 +1,24 @@
+{
+ "displayName": "Custom NUnit",
+ "name": "com.unity.ext.nunit",
+ "version": "1.0.6",
+ "unity": "2019.2",
+ "description": "Custom version of the nunit package build to work with Unity. Used by the Unity Test Framework.",
+ "keywords": [
+ "nunit",
+ "unittest",
+ "test"
+ ],
+ "category": "Libraries",
+ "repository": {
+ "url": "https://github.cds.internal.unity3d.com/unity/com.unity.ext.nunit.git",
+ "type": "git",
+ "revision": "29ea4d6504a5f58fb3a6934db839aa80ae6d9d88"
+ },
+ "relatedPackages": {
+ "com.unity.ext.nunit.tests": "1.0.6"
+ },
+ "upmCi": {
+ "footprint": "e9f76bd265402773096bf08a8ffb51cd3d76f39a"
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json.meta b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json.meta
new file mode 100644
index 00000000..ad884925
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8143d3a8390f2c64685e3bc272bd9e90
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig
new file mode 100644
index 00000000..aca19790
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md
new file mode 100644
index 00000000..c93c8737
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md
@@ -0,0 +1,74 @@
+# Code Editor Package for Rider
+
+## [1.1.4] - 2019-11-21
+
+fix warning - unreachable code
+
+
+## [1.1.3] - 2019-10-17
+
+ - Update External Editor, when new toolbox build was installed
+ - Add xaml to default list of extensions to include in csproj
+ - Avoid initializing Rider package in secondary Unity process, which does Asset processing
+ - Reflect multiple csc.rsp arguments to generated csproj files: https://github.com/JetBrains/resharper-unity/issues/1337
+ - Setting, which allowed to override LangVersion removed in favor of langversion in csc.rsp
+ - Environment.NewLine is used in generated project files instead of Windows line separator.
+
+## [1.1.2] - 2019-09-18
+
+performance optimizations:
+ - avoid multiple evaluations
+ - avoid reflection in DisableSyncSolutionOnceCallBack
+ - project generation optimization
+fixes:
+ - avoid compilation error with incompatible `Test Framework` package
+
+## [1.1.1] - 2019-08-26
+
+parse nowarn in csc.rsp
+warning, when Unity was started from Rider, but external editor was different
+improved unit test support
+workaround to avoid Unity internal project-generation (fix #28)
+
+
+## [1.1.0] - 2019-07-02
+
+new setting to manage list of extensions to be opened with Rider
+avoid breaking everything on any unhandled exception in RiderScriptEditor cctor
+hide Rider settings, when different Editor is selected
+dynamically load only newer rider plugins
+path detection (work on unix symlinks)
+speed up for project generation
+lots of bug fixing
+
+## [1.0.8] - 2019-05-20
+
+Fix NullReferenceException when External editor was pointing to non-existing Rider everything was broken by null-ref.
+
+## [1.0.7] - 2019-05-16
+
+Initial migration steps from rider plugin to package.
+Fix OSX check and opening of files.
+
+## [1.0.6] - 2019-04-30
+
+Ensure asset database is refreshed when generating csproj and solution files.
+
+## [1.0.5] - 2019-04-27
+
+Add support for generating all csproj files.
+
+## [1.0.4] - 2019-04-18
+
+Fix relative package paths.
+Fix opening editor on mac.
+
+## [1.0.3] - 2019-04-12
+
+Fixing null reference issue for callbacks to Asset pipeline.
+
+## [1.0.2] - 2019-01-01
+
+### This is the first release of *Unity Package rider_editor*.
+
+Using the newly created api to integrate Rider with Unity.
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta
new file mode 100644
index 00000000..344cac5d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8645aa9c3c74fb34ba9499e14fb332b5
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md
new file mode 100644
index 00000000..576d0963
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+# Contributing
+
+## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement)
+By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions.
+
+## Once you have a change ready following these ground rules. Simply make a pull request
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta
new file mode 100644
index 00000000..81c20c6f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5e83f8baac96eaa47bdd9ca781cd2002
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md
new file mode 100644
index 00000000..9ddd6348
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md
@@ -0,0 +1,4 @@
+# Code Editor Package for Rider
+
+This package is not intended to be modified by users.
+Nor does it provide any api intended to be included in user projects.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md
new file mode 100644
index 00000000..eb18dfb7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Unity Technologies
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta
new file mode 100644
index 00000000..be2f8e64
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5598b14661b5f4c43bed757f34b6d172
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta
new file mode 100644
index 00000000..cf6222de
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9129183a42052cd43b9c284d6dbd541e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta
new file mode 100644
index 00000000..49130a6e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1b393f6b29a9ee84c803af1ab4944b71
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs
new file mode 100644
index 00000000..6c04ea37
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs
@@ -0,0 +1,457 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using JetBrains.Annotations;
+using Microsoft.Win32;
+using Unity.CodeEditor;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public interface IDiscovery
+ {
+ CodeEditor.Installation[] PathCallback();
+ }
+
+ public class Discovery : IDiscovery
+ {
+ public CodeEditor.Installation[] PathCallback()
+ {
+ return RiderPathLocator.GetAllRiderPaths()
+ .Select(riderInfo => new CodeEditor.Installation
+ {
+ Path = riderInfo.Path,
+ Name = riderInfo.Presentation
+ })
+ .OrderBy(a=>a.Name)
+ .ToArray();
+ }
+ }
+
+ ///
+ /// This code is a modified version of the JetBrains resharper-unity plugin listed here:
+ /// https://github.com/JetBrains/resharper-unity/blob/master/unity/JetBrains.Rider.Unity.Editor/EditorPlugin/RiderPathLocator.cs
+ ///
+ public static class RiderPathLocator
+ {
+#if !(UNITY_4_7 || UNITY_5_5)
+ [UsedImplicitly] // Used in com.unity.ide.rider
+ public static RiderInfo[] GetAllRiderPaths()
+ {
+ try
+ {
+ switch (SystemInfo.operatingSystemFamily)
+ {
+ case OperatingSystemFamily.Windows:
+ {
+ return CollectRiderInfosWindows();
+ }
+
+ case OperatingSystemFamily.MacOSX:
+ {
+ return CollectRiderInfosMac();
+ }
+
+ case OperatingSystemFamily.Linux:
+ {
+ return CollectAllRiderPathsLinux();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogException(e);
+ }
+
+ return new RiderInfo[0];
+ }
+#endif
+
+#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider
+ internal static RiderInfo[] GetAllFoundInfos(OperatingSystemFamilyRider operatingSystemFamily)
+ {
+ try
+ {
+ switch (operatingSystemFamily)
+ {
+ case OperatingSystemFamilyRider.Windows:
+ {
+ return CollectRiderInfosWindows();
+ }
+ case OperatingSystemFamilyRider.MacOSX:
+ {
+ return CollectRiderInfosMac();
+ }
+ case OperatingSystemFamilyRider.Linux:
+ {
+ return CollectAllRiderPathsLinux();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogException(e);
+ }
+
+ return new RiderInfo[0];
+ }
+
+ internal static string[] GetAllFoundPaths(OperatingSystemFamilyRider operatingSystemFamily)
+ {
+ return GetAllFoundInfos(operatingSystemFamily).Select(a=>a.Path).ToArray();
+ }
+#endif
+
+ private static RiderInfo[] CollectAllRiderPathsLinux()
+ {
+ var installInfos = new List();
+ var home = Environment.GetEnvironmentVariable("HOME");
+ if (!string.IsNullOrEmpty(home))
+ {
+ var toolboxRiderRootPath = GetToolboxBaseDir();
+ installInfos.AddRange(CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false)
+ .Select(a => new RiderInfo(a, true)).ToList());
+
+ //$Home/.local/share/applications/jetbrains-rider.desktop
+ var shortcut = new FileInfo(Path.Combine(home, @".local/share/applications/jetbrains-rider.desktop"));
+
+ if (shortcut.Exists)
+ {
+ var lines = File.ReadAllLines(shortcut.FullName);
+ foreach (var line in lines)
+ {
+ if (!line.StartsWith("Exec=\""))
+ continue;
+ var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault();
+ if (string.IsNullOrEmpty(path))
+ continue;
+
+ if (installInfos.Any(a => a.Path == path)) // avoid adding similar build as from toolbox
+ continue;
+ installInfos.Add(new RiderInfo(path, false));
+ }
+ }
+ }
+
+ // snap install
+ var snapInstallPath = "/snap/rider/current/bin/rider.sh";
+ if (new FileInfo(snapInstallPath).Exists)
+ installInfos.Add(new RiderInfo(snapInstallPath, false));
+
+ return installInfos.ToArray();
+ }
+
+ private static RiderInfo[] CollectRiderInfosMac()
+ {
+ var installInfos = new List();
+ // "/Applications/*Rider*.app"
+ var folder = new DirectoryInfo("/Applications");
+ if (folder.Exists)
+ {
+ installInfos.AddRange(folder.GetDirectories("*Rider*.app")
+ .Select(a => new RiderInfo(a.FullName, false))
+ .ToList());
+ }
+
+ // /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app
+ var toolboxRiderRootPath = GetToolboxBaseDir();
+ var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true)
+ .Select(a => new RiderInfo(a, true));
+ installInfos.AddRange(paths);
+
+ return installInfos.ToArray();
+ }
+
+ private static RiderInfo[] CollectRiderInfosWindows()
+ {
+ var installInfos = new List();
+ var toolboxRiderRootPath = GetToolboxBaseDir();
+ var installPathsToolbox = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider64.exe", false).ToList();
+ installInfos.AddRange(installPathsToolbox.Select(a => new RiderInfo(a, true)).ToList());
+
+ var installPaths = new List();
+ const string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
+ CollectPathsFromRegistry(registryKey, installPaths);
+ const string wowRegistryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
+ CollectPathsFromRegistry(wowRegistryKey, installPaths);
+
+ installInfos.AddRange(installPaths.Select(a => new RiderInfo(a, false)).ToList());
+
+ return installInfos.ToArray();
+ }
+
+ private static string GetToolboxBaseDir()
+ {
+ switch (SystemInfo.operatingSystemFamily)
+ {
+ case OperatingSystemFamily.Windows:
+ {
+ var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
+ return Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider");
+ }
+
+ case OperatingSystemFamily.MacOSX:
+ {
+ var home = Environment.GetEnvironmentVariable("HOME");
+ if (!string.IsNullOrEmpty(home))
+ {
+ return Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider");
+ }
+ break;
+ }
+
+ case OperatingSystemFamily.Linux:
+ {
+ var home = Environment.GetEnvironmentVariable("HOME");
+ if (!string.IsNullOrEmpty(home))
+ {
+ return Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider");
+ }
+ break;
+ }
+ }
+ return string.Empty;
+ }
+
+ internal static string GetBuildNumber(string path)
+ {
+ var file = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt()));
+ if (!file.Exists)
+ return string.Empty;
+ var text = File.ReadAllText(file.FullName);
+ if (text.Length > 3)
+ return text.Substring(3);
+ return string.Empty;
+ }
+
+ internal static bool IsToolbox(string path)
+ {
+ return path.StartsWith(GetToolboxBaseDir());
+ }
+
+ private static string GetRelativePathToBuildTxt()
+ {
+ switch (SystemInfo.operatingSystemFamily)
+ {
+ case OperatingSystemFamily.Windows:
+ case OperatingSystemFamily.Linux:
+ return "../../build.txt";
+ case OperatingSystemFamily.MacOSX:
+ return "Contents/Resources/build.txt";
+ }
+ throw new Exception("Unknown OS");
+ }
+
+ private static void CollectPathsFromRegistry(string registryKey, List installPaths)
+ {
+ using (var key = Registry.LocalMachine.OpenSubKey(registryKey))
+ {
+ if (key == null) return;
+ foreach (var subkeyName in key.GetSubKeyNames().Where(a => a.Contains("Rider")))
+ {
+ using (var subkey = key.OpenSubKey(subkeyName))
+ {
+ var folderObject = subkey?.GetValue("InstallLocation");
+ if (folderObject == null) continue;
+ var folder = folderObject.ToString();
+ var possiblePath = Path.Combine(folder, @"bin\rider64.exe");
+ if (File.Exists(possiblePath))
+ installPaths.Add(possiblePath);
+ }
+ }
+ }
+ }
+
+ private static string[] CollectPathsFromToolbox(string toolboxRiderRootPath, string dirName, string searchPattern,
+ bool isMac)
+ {
+ if (!Directory.Exists(toolboxRiderRootPath))
+ return new string[0];
+
+ var channelDirs = Directory.GetDirectories(toolboxRiderRootPath);
+ var paths = channelDirs.SelectMany(channelDir =>
+ {
+ try
+ {
+ // use history.json - last entry stands for the active build https://jetbrains.slack.com/archives/C07KNP99D/p1547807024066500?thread_ts=1547731708.057700&cid=C07KNP99D
+ var historyFile = Path.Combine(channelDir, ".history.json");
+ if (File.Exists(historyFile))
+ {
+ var json = File.ReadAllText(historyFile);
+ var build = ToolboxHistory.GetLatestBuildFromJson(json);
+ if (build != null)
+ {
+ var buildDir = Path.Combine(channelDir, build);
+ var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir);
+ if (executablePaths.Any())
+ return executablePaths;
+ }
+ }
+
+ var channelFile = Path.Combine(channelDir, ".channel.settings.json");
+ if (File.Exists(channelFile))
+ {
+ var json = File.ReadAllText(channelFile).Replace("active-application", "active_application");
+ var build = ToolboxInstallData.GetLatestBuildFromJson(json);
+ if (build != null)
+ {
+ var buildDir = Path.Combine(channelDir, build);
+ var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir);
+ if (executablePaths.Any())
+ return executablePaths;
+ }
+ }
+
+ // changes in toolbox json files format may brake the logic above, so return all found Rider installations
+ return Directory.GetDirectories(channelDir)
+ .SelectMany(buildDir => GetExecutablePaths(dirName, searchPattern, isMac, buildDir));
+ }
+ catch (Exception e)
+ {
+ // do not write to Debug.Log, just log it.
+ Logger.Warn($"Failed to get RiderPath from {channelDir}", e);
+ }
+
+ return new string[0];
+ })
+ .Where(c => !string.IsNullOrEmpty(c))
+ .ToArray();
+ return paths;
+ }
+
+ private static string[] GetExecutablePaths(string dirName, string searchPattern, bool isMac, string buildDir)
+ {
+ var folder = new DirectoryInfo(Path.Combine(buildDir, dirName));
+ if (!folder.Exists)
+ return new string[0];
+
+ if (!isMac)
+ return new[] {Path.Combine(folder.FullName, searchPattern)}.Where(File.Exists).ToArray();
+ return folder.GetDirectories(searchPattern).Select(f => f.FullName)
+ .Where(Directory.Exists).ToArray();
+ }
+
+ // Disable the "field is never assigned" compiler warning. We never assign it, but Unity does.
+ // Note that Unity disable this warning in the generated C# projects
+#pragma warning disable 0649
+
+ [Serializable]
+ class ToolboxHistory
+ {
+ public List history;
+
+ [CanBeNull]
+ public static string GetLatestBuildFromJson(string json)
+ {
+ try
+ {
+#if UNITY_4_7 || UNITY_5_5
+ return JsonConvert.DeserializeObject(json).history.LastOrDefault()?.item.build;
+#else
+ return JsonUtility.FromJson(json).history.LastOrDefault()?.item.build;
+#endif
+ }
+ catch (Exception)
+ {
+ Logger.Warn($"Failed to get latest build from json {json}");
+ }
+
+ return null;
+ }
+ }
+
+ [Serializable]
+ class ItemNode
+ {
+ public BuildNode item;
+ }
+
+ [Serializable]
+ class BuildNode
+ {
+ public string build;
+ }
+
+ // ReSharper disable once ClassNeverInstantiated.Global
+ [Serializable]
+ class ToolboxInstallData
+ {
+ // ReSharper disable once InconsistentNaming
+ public ActiveApplication active_application;
+
+ [CanBeNull]
+ public static string GetLatestBuildFromJson(string json)
+ {
+ try
+ {
+#if UNITY_4_7 || UNITY_5_5
+ var toolbox = JsonConvert.DeserializeObject(json);
+#else
+ var toolbox = JsonUtility.FromJson(json);
+#endif
+ var builds = toolbox.active_application.builds;
+ if (builds != null && builds.Any())
+ return builds.First();
+ }
+ catch (Exception)
+ {
+ Logger.Warn($"Failed to get latest build from json {json}");
+ }
+
+ return null;
+ }
+ }
+
+ [Serializable]
+ class ActiveApplication
+ {
+ // ReSharper disable once InconsistentNaming
+ public List builds;
+ }
+
+#pragma warning restore 0649
+
+ public struct RiderInfo
+ {
+ public bool IsToolbox;
+ public string Presentation;
+ public string BuildVersion;
+ public string Path;
+
+ public RiderInfo(string path, bool isToolbox)
+ {
+ if (path == RiderScriptEditor.CurrentEditor)
+ {
+ RiderScriptEditorData.instance.Init();
+ BuildVersion = RiderScriptEditorData.instance.currentEditorVersion;
+ }
+ else
+ BuildVersion = GetBuildNumber(path);
+ Path = new FileInfo(path).FullName; // normalize separators
+ var presentation = "Rider " + BuildVersion;
+ if (isToolbox)
+ presentation += " (JetBrains Toolbox)";
+
+ Presentation = presentation;
+ IsToolbox = isToolbox;
+ }
+ }
+
+ private static class Logger
+ {
+ internal static void Warn(string message, Exception e = null)
+ {
+#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider
+ Log.GetLog(typeof(RiderPathLocator).Name).Warn(message);
+ if (e != null)
+ Log.GetLog(typeof(RiderPathLocator).Name).Warn(e);
+#else
+ Debug.LogError(message);
+ if (e != null)
+ Debug.LogException(e);
+#endif
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta
new file mode 100644
index 00000000..ea4ef859
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dab656c79e1985c40b31faebcda44442
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs
new file mode 100644
index 00000000..91e9624a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs
@@ -0,0 +1,136 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using Debug = UnityEngine.Debug;
+
+namespace Packages.Rider.Editor
+{
+ public static class EditorPluginInterop
+ {
+ private static string ourEntryPointTypeName = "JetBrains.Rider.Unity.Editor.PluginEntryPoint";
+
+ private static Assembly ourEditorPluginAssembly;
+
+ public static Assembly EditorPluginAssembly
+ {
+ get
+ {
+ if (ourEditorPluginAssembly != null)
+ return ourEditorPluginAssembly;
+ var assemblies = AppDomain.CurrentDomain.GetAssemblies();
+ ourEditorPluginAssembly = assemblies.FirstOrDefault(a => a.GetName().Name.Equals("JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked"));
+ return ourEditorPluginAssembly;
+ }
+ }
+
+
+ private static void DisableSyncSolutionOnceCallBack()
+ {
+ // RiderScriptableSingleton.Instance.CsprojProcessedOnce = true;
+ // Otherwise EditorPlugin regenerates all on every AppDomain reload
+ var assembly = EditorPluginAssembly;
+ if (assembly == null) return;
+ var type = assembly.GetType("JetBrains.Rider.Unity.Editor.Utils.RiderScriptableSingleton");
+ if (type == null) return;
+ var baseType = type.BaseType;
+ if (baseType == null) return;
+ var instance = baseType.GetProperty("Instance");
+ if (instance == null) return;
+ var instanceVal = instance.GetValue(null);
+ var member = type.GetProperty("CsprojProcessedOnce");
+ if (member==null) return;
+ member.SetValue(instanceVal, true);
+ }
+
+ public static string LogPath
+ {
+ get
+ {
+ try
+ {
+ var assembly = EditorPluginAssembly;
+ if (assembly == null) return null;
+ var type = assembly.GetType(ourEntryPointTypeName);
+ if (type == null) return null;
+ var field = type.GetField("LogPath", BindingFlags.NonPublic | BindingFlags.Static);
+ if (field == null) return null;
+ return field.GetValue(null) as string;
+ }
+ catch (Exception)
+ {
+ Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation.");
+ }
+
+ return null;
+ }
+ }
+
+ public static bool OpenFileDllImplementation(string path, int line, int column)
+ {
+ var openResult = false;
+ // reflection for fast OpenFileLineCol, when Rider is started and protocol connection is established
+ try
+ {
+ var assembly = EditorPluginAssembly;
+ if (assembly == null) return false;
+ var type = assembly.GetType(ourEntryPointTypeName);
+ if (type == null) return false;
+ var field = type.GetField("OpenAssetHandler", BindingFlags.NonPublic | BindingFlags.Static);
+ if (field == null) return false;
+ var handlerInstance = field.GetValue(null);
+ var method = handlerInstance.GetType()
+ .GetMethod("OnOpenedAsset", new[] {typeof(string), typeof(int), typeof(int)});
+ if (method == null) return false;
+ var assetFilePath = path;
+ if (!string.IsNullOrEmpty(path))
+ assetFilePath = Path.GetFullPath(path);
+
+ openResult = (bool) method.Invoke(handlerInstance, new object[] {assetFilePath, line, column});
+ }
+ catch (Exception e)
+ {
+ Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation.");
+ Debug.LogException(e);
+ }
+
+ return openResult;
+ }
+
+ public static bool EditorPluginIsLoadedFromAssets(Assembly assembly)
+ {
+ if (assembly == null)
+ return false;
+ var location = assembly.Location;
+ var currentDir = Directory.GetCurrentDirectory();
+ return location.StartsWith(currentDir, StringComparison.InvariantCultureIgnoreCase);
+ }
+
+
+ internal static void InitEntryPoint(Assembly assembly)
+ {
+ try
+ {
+ if (Version.TryParse(RiderScriptEditorData.instance.currentEditorVersion, out var version))
+ {
+ if (version.Major < 192)
+ DisableSyncSolutionOnceCallBack(); // is require for Rider prior to 2019.2
+ }
+ else
+ DisableSyncSolutionOnceCallBack();
+
+ var type = assembly.GetType("JetBrains.Rider.Unity.Editor.AfterUnity56.EntryPoint");
+ if (type == null)
+ type = assembly.GetType("JetBrains.Rider.Unity.Editor.UnitTesting.EntryPoint"); // oldRider
+ RuntimeHelpers.RunClassConstructor(type.TypeHandle);
+ }
+ catch (TypeInitializationException ex)
+ {
+ Debug.LogException(ex);
+ if (ex.InnerException != null)
+ Debug.LogException(ex.InnerException);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta
new file mode 100644
index 00000000..fda18d39
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f9bd02a3a916be64c9b47b1305149423
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs
new file mode 100644
index 00000000..19ef8ab1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs
@@ -0,0 +1,22 @@
+namespace Packages.Rider.Editor
+{
+ public enum LoggingLevel
+ {
+ ///
+ /// Do not use it in logging. Only in config to disable logging.
+ ///
+ OFF,
+ /// For errors that lead to application failure
+ FATAL,
+ /// For errors that must be shown in Exception Browser
+ ERROR,
+ /// Suspicious situations but not errors
+ WARN,
+ /// Regular level for important events
+ INFO,
+ /// Additional info for debbuging
+ VERBOSE,
+ /// Methods & callstacks tracing, more than verbose
+ TRACE,
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta
new file mode 100644
index 00000000..c0494f30
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71bb46b59a9a7a346bbab1e185c723df
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs
new file mode 100644
index 00000000..bda3fcb2
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs
@@ -0,0 +1,128 @@
+using Unity.CodeEditor;
+using UnityEditor;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public class PluginSettings
+ {
+ public static LoggingLevel SelectedLoggingLevel
+ {
+ get => (LoggingLevel) EditorPrefs.GetInt("Rider_SelectedLoggingLevel", 0);
+ set
+ {
+ EditorPrefs.SetInt("Rider_SelectedLoggingLevel", (int) value);
+ }
+ }
+
+ public static bool LogEventsCollectorEnabled
+ {
+ get { return EditorPrefs.GetBool("Rider_LogEventsCollectorEnabled", true); }
+ private set { EditorPrefs.SetBool("Rider_LogEventsCollectorEnabled", value); }
+ }
+
+
+ private static GUIStyle ourVersionInfoStyle = new GUIStyle()
+ {
+ normal = new GUIStyleState()
+ {
+ textColor = new Color(0, 0, 0, .6f),
+ },
+ margin = new RectOffset(4, 4, 4, 4),
+ };
+
+ ///
+ /// Preferences menu layout
+ ///
+ ///
+ /// Contains all 3 toggles: Enable/Disable; Debug On/Off; Writing Launch File On/Off
+ ///
+ [SettingsProvider]
+ private static SettingsProvider RiderPreferencesItem()
+ {
+ if (!RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor))
+ return null;
+ if (!RiderScriptEditorData.instance.shouldLoadEditorPlugin)
+ return null;
+ var provider = new SettingsProvider("Preferences/Rider", SettingsScope.User)
+ {
+ label = "Rider",
+ keywords = new[] { "Rider" },
+ guiHandler = (searchContext) =>
+ {
+ EditorGUIUtility.labelWidth = 200f;
+ EditorGUILayout.BeginVertical();
+
+ GUILayout.BeginVertical();
+ LogEventsCollectorEnabled =
+ EditorGUILayout.Toggle(new GUIContent("Pass Console to Rider:"), LogEventsCollectorEnabled);
+
+ GUILayout.EndVertical();
+ GUILayout.Label("");
+
+ if (!string.IsNullOrEmpty(EditorPluginInterop.LogPath))
+ {
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.PrefixLabel("Log file:");
+ var previous = GUI.enabled;
+ GUI.enabled = previous && SelectedLoggingLevel != LoggingLevel.OFF;
+ var button = GUILayout.Button(new GUIContent("Open log"));
+ if (button)
+ {
+ //UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(PluginEntryPoint.LogPath, 0);
+ // works much faster than the commented code, when Rider is already started
+ CodeEditor.CurrentEditor.OpenProject(EditorPluginInterop.LogPath, 0, 0);
+ }
+
+ GUI.enabled = previous;
+ GUILayout.EndHorizontal();
+ }
+
+ var loggingMsg =
+ @"Sets the amount of Rider Debug output. If you are about to report an issue, please select Verbose logging level and attach Unity console output to the issue.";
+ SelectedLoggingLevel =
+ (LoggingLevel) EditorGUILayout.EnumPopup(new GUIContent("Logging Level:", loggingMsg),
+ SelectedLoggingLevel);
+
+
+ EditorGUILayout.HelpBox(loggingMsg, MessageType.None);
+
+ var githubRepo = "https://github.com/JetBrains/resharper-unity";
+ var caption = $"{githubRepo}";
+ LinkButton(caption: caption, url: githubRepo);
+
+ GUILayout.FlexibleSpace();
+ GUILayout.BeginHorizontal();
+
+ GUILayout.FlexibleSpace();
+ var assembly = EditorPluginInterop.EditorPluginAssembly;
+ if (assembly != null)
+ {
+ var version = assembly.GetName().Version;
+ GUILayout.Label("Plugin version: " + version, ourVersionInfoStyle);
+ }
+
+ GUILayout.EndHorizontal();
+
+ EditorGUILayout.EndVertical();
+ }
+ };
+ return provider;
+ }
+
+ private static void LinkButton(string caption, string url)
+ {
+ var style = GUI.skin.label;
+ style.richText = true;
+
+ var bClicked = GUILayout.Button(caption, style);
+
+ var rect = GUILayoutUtility.GetLastRect();
+ rect.width = style.CalcSize(new GUIContent(caption)).x;
+ EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link);
+
+ if (bClicked)
+ Application.OpenURL(url);
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta
new file mode 100644
index 00000000..279a4cca
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1bfe12aa306c0c74db4f4f1a1a0ae5ce
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta
new file mode 100644
index 00000000..40cdc604
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: aa290bd9a165a0543a4bf85ac73914bc
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs
new file mode 100644
index 00000000..230633fe
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs
@@ -0,0 +1,16 @@
+using Unity.CodeEditor;
+using UnityEditor;
+
+namespace Packages.Rider.Editor.PostProcessors
+{
+ public class RiderAssetPostprocessor: AssetPostprocessor
+ {
+ public static bool OnPreGeneratingCSProjectFiles()
+ {
+ var path = RiderScriptEditor.GetEditorRealPath(CodeEditor.CurrentEditorInstallation);
+ if (RiderScriptEditor.IsRiderInstallation(path))
+ return !ProjectGeneration.isRiderProjectGeneration;
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta
new file mode 100644
index 00000000..68658ccf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 45471ad7b8c1f964da5e3c07d57fbf4f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta
new file mode 100644
index 00000000..37615b9f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 313cbe17019f1934397f91069831062c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs
new file mode 100644
index 00000000..6ea51dcf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs
@@ -0,0 +1,23 @@
+using System;
+using System.IO;
+using System.Text;
+
+namespace Packages.Rider.Editor {
+ class FileIOProvider : IFileIO
+ {
+ public bool Exists(string fileName)
+ {
+ return File.Exists(fileName);
+ }
+
+ public string ReadAllText(string fileName)
+ {
+ return File.ReadAllText(fileName);
+ }
+
+ public void WriteAllText(string fileName, string content)
+ {
+ File.WriteAllText(fileName, content, Encoding.UTF8);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta
new file mode 100644
index 00000000..2763839c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a6ba838b1348d5e46a7eaacd1646c1d3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs
new file mode 100644
index 00000000..476766e5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace Packages.Rider.Editor {
+ class GUIDProvider : IGUIDGenerator
+ {
+ public string ProjectGuid(string projectName, string assemblyName)
+ {
+ return SolutionGuidGenerator.GuidForProject(projectName + assemblyName);
+ }
+
+ public string SolutionGuid(string projectName, string extension)
+ {
+ return SolutionGuidGenerator.GuidForSolution(projectName, extension); // GetExtensionOfSourceFiles(assembly.sourceFiles)
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta
new file mode 100644
index 00000000..7b331f20
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8cfde1a59fb35574189691a9de1df93b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs
new file mode 100644
index 00000000..d0a26649
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs
@@ -0,0 +1,1090 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security;
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.RegularExpressions;
+using Packages.Rider.Editor.Util;
+using UnityEditor;
+using UnityEditor.Compilation;
+using UnityEditor.PackageManager;
+using UnityEditorInternal;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public interface IGenerator
+ {
+ bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles);
+ void Sync();
+ bool HasSolutionBeenGenerated();
+ string SolutionFile();
+ string ProjectDirectory { get; }
+ void GenerateAll(bool generateAll);
+ }
+
+ public interface IFileIO
+ {
+ bool Exists(string fileName);
+
+ string ReadAllText(string fileName);
+ void WriteAllText(string fileName, string content);
+ }
+
+ public interface IGUIDGenerator
+ {
+ string ProjectGuid(string projectName, string assemblyName);
+ string SolutionGuid(string projectName, string extension);
+ }
+
+ public interface IAssemblyNameProvider
+ {
+ string GetAssemblyNameFromScriptPath(string path);
+ IEnumerable GetAssemblies(Func shouldFileBePartOfSolution);
+ IEnumerable GetAllAssetPaths();
+ UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath);
+ ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories);
+ }
+
+ class AssemblyNameProvider : IAssemblyNameProvider
+ {
+ public string GetAssemblyNameFromScriptPath(string path)
+ {
+ return CompilationPipeline.GetAssemblyNameFromScriptPath(path);
+ }
+
+ public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution)
+ {
+ return CompilationPipeline.GetAssemblies()
+ .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution));
+ }
+
+ public IEnumerable GetAllAssetPaths()
+ {
+ return AssetDatabase.GetAllAssetPaths();
+ }
+
+ public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath)
+ {
+ return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath);
+ }
+
+ public ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories)
+ {
+ return CompilationPipeline.ParseResponseFile(
+ responseFilePath,
+ projectDirectory,
+ systemReferenceDirectories
+ );
+ }
+ }
+
+ public class ProjectGeneration : IGenerator
+ {
+ enum ScriptingLanguage
+ {
+ None,
+ CSharp
+ }
+
+ public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003";
+
+ ///
+ /// Map source extensions to ScriptingLanguages
+ ///
+ static readonly Dictionary k_BuiltinSupportedExtensions =
+ new Dictionary
+ {
+ {"cs", ScriptingLanguage.CSharp},
+ {"uxml", ScriptingLanguage.None},
+ {"uss", ScriptingLanguage.None},
+ {"shader", ScriptingLanguage.None},
+ {"compute", ScriptingLanguage.None},
+ {"cginc", ScriptingLanguage.None},
+ {"hlsl", ScriptingLanguage.None},
+ {"glslinc", ScriptingLanguage.None},
+ {"template", ScriptingLanguage.None},
+ {"raytrace", ScriptingLanguage.None}
+ };
+
+ string m_SolutionProjectEntryTemplate = string.Join(Environment.NewLine,
+ @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""",
+ @"EndProject").Replace(" ", "\t");
+
+ string m_SolutionProjectConfigurationTemplate = string.Join(Environment.NewLine,
+ @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU",
+ @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU",
+ @" {{{0}}}.Release|Any CPU.ActiveCfg = Release|Any CPU",
+ @" {{{0}}}.Release|Any CPU.Build.0 = Release|Any CPU").Replace(" ", "\t");
+
+ static readonly string[] k_ReimportSyncExtensions = {".dll", ".asmdef"};
+
+ ///
+ /// Map ScriptingLanguages to project extensions
+ ///
+ /*static readonly Dictionary k_ProjectExtensions = new Dictionary
+ {
+ { ScriptingLanguage.CSharp, ".csproj" },
+ { ScriptingLanguage.None, ".csproj" },
+ };*/
+ static readonly Regex k_ScriptReferenceExpression = new Regex(
+ @"^Library.ScriptAssemblies.(?(?.*)\.dll$)",
+ RegexOptions.Compiled | RegexOptions.IgnoreCase);
+
+ string[] m_ProjectSupportedExtensions = new string[0];
+ bool m_ShouldGenerateAll;
+
+ public string ProjectDirectory { get; }
+
+ public void GenerateAll(bool generateAll)
+ {
+ m_ShouldGenerateAll = generateAll;
+ }
+
+ readonly string m_ProjectName;
+ readonly IAssemblyNameProvider m_AssemblyNameProvider;
+ readonly IFileIO m_FileIOProvider;
+ readonly IGUIDGenerator m_GUIDGenerator;
+ internal static bool isRiderProjectGeneration; // workaround to https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/28
+
+ const string k_ToolsVersion = "4.0";
+ const string k_ProductVersion = "10.0.20506";
+ const string k_BaseDirectory = ".";
+ const string k_TargetFrameworkVersion = "v4.7.1";
+ const string k_TargetLanguageVersion = "latest";
+
+ static readonly Regex scriptReferenceExpression = new Regex(
+ @"^Library.ScriptAssemblies.(?(?.*)\.dll$)",
+ RegexOptions.Compiled | RegexOptions.IgnoreCase);
+
+ public ProjectGeneration() : this(Directory.GetParent(Application.dataPath).FullName)
+ {
+ }
+
+ public ProjectGeneration(string tempDirectory) : this(tempDirectory, new AssemblyNameProvider(), new FileIOProvider(), new GUIDProvider())
+ {
+ }
+
+ public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIoProvider, IGUIDGenerator guidGenerator)
+ {
+ ProjectDirectory = tempDirectory.Replace('\\', '/');
+ m_ProjectName = Path.GetFileName(ProjectDirectory);
+ m_AssemblyNameProvider = assemblyNameProvider;
+ m_FileIOProvider = fileIoProvider;
+ m_GUIDGenerator = guidGenerator;
+ }
+
+ ///
+ /// Syncs the scripting solution if any affected files are relevant.
+ ///
+ ///
+ /// Whether the solution was synced.
+ ///
+ ///
+ /// A set of files whose status has changed
+ ///
+ ///
+ /// A set of files that got reimported
+ ///
+ public bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles)
+ {
+ SetupProjectSupportedExtensions();
+
+ if (HasFilesBeenModified(affectedFiles, reimportedFiles))
+ {
+ Sync();
+ return true;
+ }
+
+ return false;
+ }
+
+ bool HasFilesBeenModified(IEnumerable affectedFiles, IEnumerable reimportedFiles)
+ {
+ return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset);
+ }
+
+ static bool ShouldSyncOnReimportedAsset(string asset)
+ {
+ return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension);
+ }
+
+ public void Sync()
+ {
+ SetupProjectSupportedExtensions();
+ var types = GetAssetPostprocessorTypes();
+ isRiderProjectGeneration = true;
+ bool externalCodeAlreadyGeneratedProjects = OnPreGeneratingCSProjectFiles(types);
+ isRiderProjectGeneration = false;
+ if (!externalCodeAlreadyGeneratedProjects)
+ {
+ GenerateAndWriteSolutionAndProjects(types);
+ }
+
+ OnGeneratedCSProjectFiles(types);
+ }
+
+ public bool HasSolutionBeenGenerated()
+ {
+ return m_FileIOProvider.Exists(SolutionFile());
+ }
+
+ void SetupProjectSupportedExtensions()
+ {
+ m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions;
+ }
+
+ bool ShouldFileBePartOfSolution(string file)
+ {
+ string extension = Path.GetExtension(file);
+
+ // Exclude files coming from packages except if they are internalized.
+ if (!m_ShouldGenerateAll && IsInternalizedPackagePath(file))
+ {
+ return false;
+ }
+
+ // Dll's are not scripts but still need to be included..
+ if (extension == ".dll")
+ return true;
+
+ if (file.ToLower().EndsWith(".asmdef"))
+ return true;
+
+ return IsSupportedExtension(extension);
+ }
+
+ bool IsSupportedExtension(string extension)
+ {
+ extension = extension.TrimStart('.');
+ if (k_BuiltinSupportedExtensions.ContainsKey(extension))
+ return true;
+ if (m_ProjectSupportedExtensions.Contains(extension))
+ return true;
+ return false;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(Assembly island)
+ {
+ return ScriptingLanguageFor(GetExtensionOfSourceFiles(island.sourceFiles));
+ }
+
+ static string GetExtensionOfSourceFiles(string[] files)
+ {
+ return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA";
+ }
+
+ static string GetExtensionOfSourceFile(string file)
+ {
+ var ext = Path.GetExtension(file).ToLower();
+ ext = ext.Substring(1); //strip dot
+ return ext;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(string extension)
+ {
+ return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result)
+ ? result
+ : ScriptingLanguage.None;
+ }
+
+ public void GenerateAndWriteSolutionAndProjects(Type[] types)
+ {
+ // Only synchronize islands that have associated source files and ones that we actually want in the project.
+ // This also filters out DLLs coming from .asmdef files in packages.
+ var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution);
+
+ var allAssetProjectParts = GenerateAllAssetProjectParts();
+
+ var monoIslands = assemblies.ToList();
+
+ SyncSolution(monoIslands, types);
+ var allProjectIslands = RelevantIslandsForMode(monoIslands).ToList();
+ foreach (Assembly assembly in allProjectIslands)
+ {
+ var responseFileData = ParseResponseFileData(assembly);
+ SyncProject(assembly, allAssetProjectParts, responseFileData, allProjectIslands, types);
+ }
+ }
+
+ IEnumerable ParseResponseFileData(Assembly assembly)
+ {
+ var systemReferenceDirectories =
+ CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel);
+
+ Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary(
+ x => x, x => m_AssemblyNameProvider.ParseResponseFile(
+ x,
+ ProjectDirectory,
+ systemReferenceDirectories
+ ));
+
+ Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any())
+ .ToDictionary(x => x.Key, x => x.Value);
+
+ if (responseFilesWithErrors.Any())
+ {
+ foreach (var error in responseFilesWithErrors)
+ foreach (var valueError in error.Value.Errors)
+ {
+ Debug.LogError($"{error.Key} Parse Error : {valueError}");
+ }
+ }
+
+ return responseFilesData.Select(x => x.Value);
+ }
+
+ Dictionary GenerateAllAssetProjectParts()
+ {
+ Dictionary stringBuilders = new Dictionary();
+
+ foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths())
+ {
+ // Exclude files coming from packages except if they are internalized.
+ if (!m_ShouldGenerateAll && IsInternalizedPackagePath(asset))
+ {
+ continue;
+ }
+
+ string extension = Path.GetExtension(asset);
+ if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension))
+ {
+ // Find assembly the asset belongs to by adding script extension and using compilation pipeline.
+ var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset + ".cs");
+
+ if (string.IsNullOrEmpty(assemblyName))
+ {
+ continue;
+ }
+
+ assemblyName = FileSystemUtil.FileNameWithoutExtension(assemblyName);
+
+ if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder))
+ {
+ projectBuilder = new StringBuilder();
+ stringBuilders[assemblyName] = projectBuilder;
+ }
+
+ projectBuilder.Append(" ")
+ .Append(Environment.NewLine);
+ }
+ }
+
+ var result = new Dictionary();
+
+ foreach (var entry in stringBuilders)
+ result[entry.Key] = entry.Value.ToString();
+
+ return result;
+ }
+
+ bool IsInternalizedPackagePath(string file)
+ {
+ if (string.IsNullOrWhiteSpace(file))
+ {
+ return false;
+ }
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(file);
+ if (packageInfo == null)
+ {
+ return false;
+ }
+
+ var packageSource = packageInfo.source;
+ return packageSource != PackageSource.Embedded && packageSource != PackageSource.Local;
+ }
+
+ void SyncProject(
+ Assembly island,
+ Dictionary allAssetsProjectParts,
+ IEnumerable responseFilesData,
+ List allProjectIslands,
+ Type[] types)
+ {
+ SyncProjectFileIfNotChanged(ProjectFile(island),
+ ProjectText(island, allAssetsProjectParts, responseFilesData.ToList(), allProjectIslands), types);
+ }
+
+ void SyncProjectFileIfNotChanged(string path, string newContents, Type[] types)
+ {
+ if (Path.GetExtension(path) == ".csproj")
+ {
+ newContents = OnGeneratedCSProject(path, newContents, types);
+ }
+
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ void SyncSolutionFileIfNotChanged(string path, string newContents, Type[] types)
+ {
+ newContents = OnGeneratedSlnSolution(path, newContents, types);
+
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ static List SafeGetTypes(System.Reflection.Assembly a)
+ {
+ List ret;
+
+ try
+ {
+ ret = a.GetTypes().ToList();
+ }
+ catch (System.Reflection.ReflectionTypeLoadException rtl)
+ {
+ ret = rtl.Types.ToList();
+ }
+ catch (Exception)
+ {
+ return new List();
+ }
+
+ return ret.Where(r => r != null).ToList();
+ }
+
+ static void OnGeneratedCSProjectFiles(Type[] types)
+ {
+ var args = new object[0];
+ foreach (var type in types)
+ {
+ var method = type.GetMethod("OnGeneratedCSProjectFiles",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ method.Invoke(null, args);
+ }
+ }
+
+ public static Type[] GetAssetPostprocessorTypes()
+ {
+ return TypeCache.GetTypesDerivedFrom().ToArray(); // doesn't find types from EditorPlugin, which is fine
+ }
+
+ static bool OnPreGeneratingCSProjectFiles(Type[] types)
+ {
+ bool result = false;
+ foreach (var type in types)
+ {
+ var args = new object[0];
+ var method = type.GetMethod("OnPreGeneratingCSProjectFiles",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ var returnValue = method.Invoke(null, args);
+ if (method.ReturnType == typeof(bool))
+ {
+ result |= (bool) returnValue;
+ }
+ }
+
+ return result;
+ }
+
+ static string OnGeneratedCSProject(string path, string content, Type[] types)
+ {
+ foreach (var type in types)
+ {
+ var args = new[] {path, content};
+ var method = type.GetMethod("OnGeneratedCSProject",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ var returnValue = method.Invoke(null, args);
+ if (method.ReturnType == typeof(string))
+ {
+ content = (string) returnValue;
+ }
+ }
+
+ return content;
+ }
+
+ static string OnGeneratedSlnSolution(string path, string content, Type[] types)
+ {
+ foreach (var type in types)
+ {
+ var args = new[] {path, content};
+ var method = type.GetMethod("OnGeneratedSlnSolution",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ var returnValue = method.Invoke(null, args);
+ if (method.ReturnType == typeof(string))
+ {
+ content = (string) returnValue;
+ }
+ }
+
+ return content;
+ }
+
+ void SyncFileIfNotChanged(string filename, string newContents)
+ {
+ try
+ {
+ if (m_FileIOProvider.Exists(filename) && newContents == m_FileIOProvider.ReadAllText(filename))
+ {
+ return;
+ }
+ }
+ catch (Exception exception)
+ {
+ Debug.LogException(exception);
+ }
+
+ m_FileIOProvider.WriteAllText(filename, newContents);
+ }
+
+ string ProjectText(Assembly assembly,
+ Dictionary allAssetsProjectParts,
+ List responseFilesData,
+ List allProjectIslands)
+ {
+ var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData));
+ var references = new List();
+ var projectReferences = new List();
+
+ foreach (string file in assembly.sourceFiles)
+ {
+ if (!ShouldFileBePartOfSolution(file))
+ continue;
+
+ var extension = Path.GetExtension(file).ToLower();
+ var fullFile = EscapedRelativePathFor(file);
+ if (".dll" != extension)
+ {
+ projectBuilder.Append(" ").Append(Environment.NewLine);
+ }
+ else
+ {
+ references.Add(fullFile);
+ }
+ }
+
+ // Append additional non-script files that should be included in project generation.
+ if (allAssetsProjectParts.TryGetValue(assembly.name, out var additionalAssetsForProject))
+ projectBuilder.Append(additionalAssetsForProject);
+
+ var islandRefs = references.Union(assembly.allReferences);
+ foreach (string reference in islandRefs)
+ {
+ if (reference.EndsWith("/UnityEditor.dll", StringComparison.Ordinal)
+ || reference.EndsWith("/UnityEngine.dll", StringComparison.Ordinal)
+ || reference.EndsWith("\\UnityEditor.dll", StringComparison.Ordinal)
+ || reference.EndsWith("\\UnityEngine.dll", StringComparison.Ordinal))
+ continue;
+
+ var match = k_ScriptReferenceExpression.Match(reference);
+ if (match.Success)
+ {
+ // assume csharp language
+ // Add a reference to a project except if it's a reference to a script assembly
+ // that we are not generating a project for. This will be the case for assemblies
+ // coming from .assembly.json files in non-internalized packages.
+ var dllName = match.Groups["dllname"].Value;
+ if (allProjectIslands.Any(i => Path.GetFileName(i.outputPath) == dllName))
+ {
+ projectReferences.Add(match);
+ continue;
+ }
+ }
+
+ string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference);
+
+ AppendReference(fullReference, projectBuilder);
+ }
+
+ var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r));
+ foreach (var reference in responseRefs)
+ {
+ AppendReference(reference, projectBuilder);
+ }
+
+ if (0 < projectReferences.Count)
+ {
+ projectBuilder.AppendLine(" ");
+ projectBuilder.AppendLine(" ");
+ foreach (Match reference in projectReferences)
+ {
+ var referencedProject = reference.Groups["project"].Value;
+
+ projectBuilder.Append(" ").Append(Environment.NewLine);
+ projectBuilder
+ .Append(" {")
+ .Append(m_GUIDGenerator.ProjectGuid(m_ProjectName, reference.Groups["project"].Value))
+ .Append("}")
+ .Append(Environment.NewLine);
+ projectBuilder.Append(" ").Append(referencedProject).Append("").Append(Environment.NewLine);
+ projectBuilder.AppendLine(" ");
+ }
+ }
+
+ projectBuilder.Append(ProjectFooter());
+ return projectBuilder.ToString();
+ }
+
+ static void AppendReference(string fullReference, StringBuilder projectBuilder)
+ {
+ //replace \ with / and \\ with /
+ var escapedFullPath = SecurityElement.Escape(fullReference);
+ escapedFullPath = escapedFullPath.Replace("\\\\", "/").Replace("\\", "/");
+ projectBuilder.Append(" ").Append(Environment.NewLine);
+ projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(Environment.NewLine);
+ projectBuilder.Append(" ").Append(Environment.NewLine);
+ }
+
+ public string ProjectFile(Assembly assembly)
+ {
+ return Path.Combine(ProjectDirectory, $"{assembly.name}.csproj");
+ }
+
+ public string SolutionFile()
+ {
+ return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln");
+ }
+
+ string ProjectHeader(
+ Assembly assembly,
+ List responseFilesData
+ )
+ {
+ var otherResponseFilesData = GetOtherArgumentsFromResponseFilesData(responseFilesData);
+ var arguments = new object[]
+ {
+ k_ToolsVersion, k_ProductVersion, m_GUIDGenerator.ProjectGuid(m_ProjectName, assembly.name),
+ InternalEditorUtility.GetEngineAssemblyPath(),
+ InternalEditorUtility.GetEditorAssemblyPath(),
+ string.Join(";",
+ new[] {"DEBUG", "TRACE"}.Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Concat(assembly.defines)
+ .Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()),
+ MSBuildNamespaceUri,
+ assembly.name,
+ EditorSettings.projectGenerationRootNamespace,
+ k_TargetFrameworkVersion,
+ GenerateLangVersion(otherResponseFilesData["langversion"]),
+ k_BaseDirectory,
+ assembly.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe),
+ GenerateNoWarn(otherResponseFilesData["nowarn"].Distinct().ToArray()),
+ GenerateAnalyserItemGroup(otherResponseFilesData["analyzer"].Concat(otherResponseFilesData["a"]).SelectMany(x=>x.Split(';')).Distinct().ToArray()),
+ GenerateAnalyserAdditionalFiles(otherResponseFilesData["additionalfile"].SelectMany(x=>x.Split(';')).Distinct().ToArray()),
+ GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Distinct().ToArray()),
+ GenerateWarningLevel(otherResponseFilesData["warn"].Concat(otherResponseFilesData["w"]).Distinct()),
+ GenerateWarningAsError(otherResponseFilesData["warnaserror"]),
+ GenerateDocumentationFile(otherResponseFilesData["doc"])
+ };
+
+ try
+ {
+ return string.Format(GetProjectHeaderTemplate(), arguments);
+ }
+ catch (Exception)
+ {
+ throw new NotSupportedException(
+ "Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " +
+ arguments.Length);
+ }
+ }
+
+ private string GenerateDocumentationFile(IEnumerable paths)
+ {
+ if (!paths.Any())
+ return String.Empty;
+
+
+ return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}";
+ }
+
+ private string GenerateWarningAsError(IEnumerable enumerable)
+ {
+ string returnValue = String.Empty;
+ bool allWarningsAsErrors = false;
+ List warningIds = new List();
+
+ foreach (string s in enumerable)
+ {
+ if (s == "+") allWarningsAsErrors = true;
+ else if (s == "-") allWarningsAsErrors = false;
+ else
+ {
+ warningIds.Add(s);
+ }
+ }
+
+ returnValue += $@" {allWarningsAsErrors}";
+ if (warningIds.Any())
+ {
+ returnValue += $"{Environment.NewLine} {string.Join(";", warningIds)}";
+ }
+
+ return $"{Environment.NewLine}{returnValue}";
+ }
+
+ private string GenerateWarningLevel(IEnumerable warningLevel)
+ {
+ var level = warningLevel.FirstOrDefault();
+ if (!string.IsNullOrWhiteSpace(level))
+ return level;
+
+ return 4.ToString();
+ }
+
+ static string GetSolutionText()
+ {
+ return string.Join(Environment.NewLine,
+ @"",
+ @"Microsoft Visual Studio Solution File, Format Version {0}",
+ @"# Visual Studio {1}",
+ @"{2}",
+ @"Global",
+ @" GlobalSection(SolutionConfigurationPlatforms) = preSolution",
+ @" Debug|Any CPU = Debug|Any CPU",
+ @" Release|Any CPU = Release|Any CPU",
+ @" EndGlobalSection",
+ @" GlobalSection(ProjectConfigurationPlatforms) = postSolution",
+ @"{3}",
+ @" EndGlobalSection",
+ @" GlobalSection(SolutionProperties) = preSolution",
+ @" HideSolutionNode = FALSE",
+ @" EndGlobalSection",
+ @"EndGlobal",
+ @"").Replace(" ", "\t");
+ }
+
+ static string GetProjectFooterTemplate()
+ {
+ return string.Join(Environment.NewLine,
+ @" ",
+ @" ",
+ @" ",
+ @"",
+ @"");
+ }
+
+ static string GetProjectHeaderTemplate()
+ {
+ var header = new[]
+ {
+ @"",
+ @"",
+ @" ",
+ @" {10}",
+ @" <_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package",
+ @" <_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package",
+ @" true{16}",
+ @" ",
+ @" ",
+ @" Debug",
+ @" AnyCPU",
+ @" {1}",
+ @" 2.0",
+ @" {8}",
+ @" {{{2}}}",
+ @" Library",
+ @" Properties",
+ @" {7}",
+ @" {9}",
+ @" 512",
+ @" {11}",
+ @" ",
+ @" ",
+ @" true",
+ @" full",
+ @" false",
+ @" Temp\bin\Debug\",
+ @" {5}",
+ @" prompt",
+ @" {17}",
+ @" 0169{13}",
+ @" {12}{18}{19}",
+ @" ",
+ @" ",
+ @" pdbonly",
+ @" true",
+ @" Temp\bin\Release\",
+ @" prompt",
+ @" {17}",
+ @" 0169{13}",
+ @" {12}{18}{19}",
+ @" "
+ };
+
+ var forceExplicitReferences = new[]
+ {
+ @" ",
+ @" true",
+ @" true",
+ @" false",
+ @" false",
+ @" false",
+ @" "
+ };
+
+ var itemGroupStart = new[]
+ {
+ @" "
+ };
+
+ var footer = new[]
+ {
+ @" ",
+ @" {3}",
+ @" ",
+ @" ",
+ @" {4}",
+ @" ",
+ @" {14}{15}",
+ @" ",
+ @""
+ };
+
+ var pieces = header.Concat(forceExplicitReferences).Concat(itemGroupStart).Concat(footer).ToArray();
+ return string.Join(Environment.NewLine, pieces);
+ }
+
+ void SyncSolution(IEnumerable islands, Type[] types)
+ {
+ SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands), types);
+ }
+
+ string SolutionText(IEnumerable islands)
+ {
+ var fileversion = "11.00";
+ var vsversion = "2010";
+
+ var relevantIslands = RelevantIslandsForMode(islands);
+ string projectEntries = GetProjectEntries(relevantIslands);
+ string projectConfigurations = string.Join(Environment.NewLine,
+ relevantIslands.Select(i => GetProjectActiveConfigurations(m_GUIDGenerator.ProjectGuid(m_ProjectName, i.name))).ToArray());
+ return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations);
+ }
+
+ private static string GenerateAnalyserItemGroup(string[] paths)
+ {
+ //
+ //
+ //
+ //
+ if (!paths.Any())
+ return string.Empty;
+
+ var analyserBuilder = new StringBuilder();
+ analyserBuilder.AppendLine(" ");
+ foreach (var path in paths)
+ {
+ analyserBuilder.AppendLine($" ");
+ }
+ analyserBuilder.AppendLine(" ");
+ return analyserBuilder.ToString();
+ }
+
+ private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData)
+ {
+ var paths = responseFilesData.SelectMany(x =>
+ {
+ return x.OtherArguments
+ .Where(a => a.StartsWith("/") || a.StartsWith("-"))
+ .Select(b =>
+ {
+ var index = b.IndexOf(":", StringComparison.Ordinal);
+ if (index > 0 && b.Length > index)
+ {
+ var key = b.Substring(1, index - 1);
+ return new KeyValuePair(key, b.Substring(index + 1));
+ }
+
+ const string warnaserror = "warnaserror";
+ if (b.Substring(1).StartsWith(warnaserror))
+ {
+ return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length+ 1) );
+ }
+
+ return default;
+ });
+ })
+ .Distinct()
+ .ToLookup(o => o.Key, pair => pair.Value);
+ return paths;
+ }
+
+ private string GenerateLangVersion(IEnumerable langVersionList)
+ {
+ var langVersion = langVersionList.FirstOrDefault();
+ if (!string.IsNullOrWhiteSpace(langVersion))
+ return langVersion;
+ return k_TargetLanguageVersion;
+ }
+
+ private static string GenerateAnalyserRuleSet(string[] paths)
+ {
+ //..\path\to\myrules.ruleset
+ if (!paths.Any())
+ return string.Empty;
+
+ return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}";
+ }
+
+ private static string GenerateAnalyserAdditionalFiles(string[] paths)
+ {
+ if (!paths.Any())
+ return string.Empty;
+
+
+ var analyserBuilder = new StringBuilder();
+ analyserBuilder.AppendLine(" ");
+ foreach (var path in paths)
+ {
+ analyserBuilder.AppendLine($" ");
+ }
+ analyserBuilder.AppendLine(" ");
+ return analyserBuilder.ToString();
+ }
+
+ private static string GenerateNoWarn(string[] codes)
+ {
+ if (!codes.Any())
+ return string.Empty;
+
+ return $",{string.Join(",", codes)}";
+ }
+
+ static IEnumerable RelevantIslandsForMode(IEnumerable islands)
+ {
+ IEnumerable relevantIslands = islands.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i));
+ return relevantIslands;
+ }
+
+ ///
+ /// Get a Project("{guid}") = "MyProject", "MyProject.unityproj", "{projectguid}"
+ /// entry for each relevant language
+ ///
+ string GetProjectEntries(IEnumerable islands)
+ {
+ var projectEntries = islands.Select(i => string.Format(
+ m_SolutionProjectEntryTemplate,
+ m_GUIDGenerator.SolutionGuid(m_ProjectName, GetExtensionOfSourceFiles(i.sourceFiles)),
+ i.name,
+ Path.GetFileName(ProjectFile(i)),
+ m_GUIDGenerator.ProjectGuid(m_ProjectName, i.name)
+ ));
+
+ return string.Join(Environment.NewLine, projectEntries.ToArray());
+ }
+
+ ///
+ /// Generate the active configuration string for a given project guid
+ ///
+ string GetProjectActiveConfigurations(string projectGuid)
+ {
+ return string.Format(
+ m_SolutionProjectConfigurationTemplate,
+ projectGuid);
+ }
+
+ string EscapedRelativePathFor(string file)
+ {
+ var projectDir = ProjectDirectory.Replace('/', '\\');
+ file = file.Replace('/', '\\');
+ var path = SkipPathPrefix(file, projectDir);
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/'));
+ if (packageInfo != null)
+ {
+ // We have to normalize the path, because the PackageManagerRemapper assumes
+ // dir seperators will be os specific.
+ var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\');
+ path = SkipPathPrefix(absolutePath, projectDir);
+ }
+
+ return SecurityElement.Escape(path);
+ }
+
+ static string SkipPathPrefix(string path, string prefix)
+ {
+ if (path.Replace("\\", "/").StartsWith($"{prefix}/"))
+ return path.Substring(prefix.Length + 1);
+ return path;
+ }
+
+ static string NormalizePath(string path)
+ {
+ if (Path.DirectorySeparatorChar == '\\')
+ return path.Replace('/', Path.DirectorySeparatorChar);
+ return path.Replace('\\', Path.DirectorySeparatorChar);
+ }
+
+ static string ProjectFooter()
+ {
+ return GetProjectFooterTemplate();
+ }
+
+ static string GetProjectExtension()
+ {
+ return ".csproj";
+ }
+ }
+
+ public static class SolutionGuidGenerator
+ {
+ public static string GuidForProject(string projectName)
+ {
+ return ComputeGuidHashFor(projectName + "salt");
+ }
+
+ public static string GuidForSolution(string projectName, string sourceFileExtension)
+ {
+ if (sourceFileExtension.ToLower() == "cs")
+ // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs
+ return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
+
+ return ComputeGuidHashFor(projectName);
+ }
+
+ static string ComputeGuidHashFor(string input)
+ {
+ var hash = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
+ return HashAsGuid(HashToString(hash));
+ }
+
+ static string HashAsGuid(string hash)
+ {
+ var guid = hash.Substring(0, 8) + "-" + hash.Substring(8, 4) + "-" + hash.Substring(12, 4) + "-" +
+ hash.Substring(16, 4) + "-" + hash.Substring(20, 12);
+ return guid.ToUpper();
+ }
+
+ static string HashToString(byte[] bs)
+ {
+ var sb = new StringBuilder();
+ foreach (byte b in bs)
+ sb.Append(b.ToString("x2"));
+ return sb.ToString();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta
new file mode 100644
index 00000000..4a0705c1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7078f19173ceac84fb9e29b9f6175201
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs
new file mode 100644
index 00000000..d481133b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs
@@ -0,0 +1,38 @@
+using System;
+using System.IO;
+using UnityEngine;
+using Debug = UnityEngine.Debug;
+
+namespace Packages.Rider.Editor
+{
+ internal class RiderInitializer
+ {
+ public void Initialize(string editorPath)
+ {
+ var assembly = EditorPluginInterop.EditorPluginAssembly;
+ if (EditorPluginInterop.EditorPluginIsLoadedFromAssets(assembly))
+ {
+ Debug.LogError($"Please delete {assembly.Location}. Unity 2019.2+ loads it directly from Rider installation. To disable this, open Rider's settings, search and uncheck 'Automatically install and update Rider's Unity editor plugin'.");
+ return;
+ }
+
+ var dllName = "JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked.dll";
+ var relPath = "../../plugins/rider-unity/EditorPlugin";
+ if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX)
+ relPath = "Contents/plugins/rider-unity/EditorPlugin";
+ var dllFile = new FileInfo(Path.Combine(Path.Combine(editorPath, relPath), dllName));
+
+ if (dllFile.Exists)
+ {
+ var bytes = File.ReadAllBytes(dllFile.FullName);
+ assembly = AppDomain.CurrentDomain.Load(bytes); // doesn't lock assembly on disk
+ // assembly = AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(dllFile.FullName)); // use this for external source debug
+ EditorPluginInterop.InitEntryPoint(assembly);
+ }
+ else
+ {
+ Debug.Log($"Unable to find Rider EditorPlugin {dllFile.FullName} for Unity ");
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta
new file mode 100644
index 00000000..11d46bcb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f5a0cc9645f0e2d4fb816156dcf3f4dd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs
new file mode 100644
index 00000000..debee95b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs
@@ -0,0 +1,404 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using Packages.Rider.Editor.Util;
+using Unity.CodeEditor;
+using UnityEditor;
+using UnityEngine;
+using Debug = UnityEngine.Debug;
+
+namespace Packages.Rider.Editor
+{
+ [InitializeOnLoad]
+ public class RiderScriptEditor : IExternalCodeEditor
+ {
+ IDiscovery m_Discoverability;
+ IGenerator m_ProjectGeneration;
+ RiderInitializer m_Initiliazer = new RiderInitializer();
+
+ static RiderScriptEditor()
+ {
+ try
+ {
+ var projectGeneration = new ProjectGeneration();
+ var editor = new RiderScriptEditor(new Discovery(), projectGeneration);
+ CodeEditor.Register(editor);
+ var path = GetEditorRealPath(CodeEditor.CurrentEditorInstallation);
+
+ if (IsRiderInstallation(path))
+ {
+ if (!RiderScriptEditorData.instance.InitializedOnce)
+ {
+ var installations = editor.Installations;
+ // is toolbox and outdated - update
+ if (installations.Any() && RiderPathLocator.IsToolbox(path) && installations.All(a => a.Path != path))
+ {
+ var toolboxInstallations = installations.Where(a => a.Name.Contains("(JetBrains Toolbox)")).ToArray();
+ if (toolboxInstallations.Any())
+ {
+ var newEditor = toolboxInstallations.Last().Path;
+ CodeEditor.SetExternalScriptEditor(newEditor);
+ path = newEditor;
+ }
+ else
+ {
+ var newEditor = installations.Last().Path;
+ CodeEditor.SetExternalScriptEditor(newEditor);
+ path = newEditor;
+ }
+ }
+
+ // exists, is non toolbox and outdated - notify
+ if (installations.Any() && FileSystemUtil.EditorPathExists(path) && installations.All(a => a.Path != path))
+ {
+ var newEditorName = installations.Last().Name;
+ Debug.LogWarning($"Consider updating External Editor in Unity to Rider {newEditorName}.");
+ }
+
+ ShowWarningOnUnexpectedScriptEditor(path);
+ RiderScriptEditorData.instance.InitializedOnce = true;
+ }
+
+ if (!FileSystemUtil.EditorPathExists(path)) // previously used rider was removed
+ {
+ var installations = editor.Installations;
+ if (installations.Any())
+ {
+ var newEditor = installations.Last().Path;
+ CodeEditor.SetExternalScriptEditor(newEditor);
+ path = newEditor;
+ }
+ }
+ RiderScriptEditorData.instance.Init();
+
+ editor.CreateSolutionIfDoesntExist();
+ if (RiderScriptEditorData.instance.shouldLoadEditorPlugin)
+ {
+ editor.m_Initiliazer.Initialize(path);
+ }
+
+ InitProjectFilesWatcher();
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogException(e);
+ }
+ }
+
+ private static void ShowWarningOnUnexpectedScriptEditor(string path)
+ {
+ // Show warning, when Unity was started from Rider, but external editor is different https://github.com/JetBrains/resharper-unity/issues/1127
+ var args = Environment.GetCommandLineArgs();
+ var commandlineParser = new CommandLineParser(args);
+ if (commandlineParser.Options.ContainsKey("-riderPath"))
+ {
+ var originRiderPath = commandlineParser.Options["-riderPath"];
+ var originRealPath = GetEditorRealPath(originRiderPath);
+ var originVersion = RiderPathLocator.GetBuildNumber(originRealPath);
+ var version = RiderPathLocator.GetBuildNumber(path);
+ if (originVersion != string.Empty && originVersion != version)
+ {
+ Debug.LogWarning("Unity was started by a version of Rider that is not the current default external editor. Advanced integration features cannot be enabled.");
+ Debug.Log($"Unity was started by Rider {originVersion}, but external editor is set to: {path}");
+ }
+ }
+ }
+
+ private static void InitProjectFilesWatcher()
+ {
+ var watcher = new FileSystemWatcher();
+ watcher.Path = Directory.GetCurrentDirectory();
+ watcher.NotifyFilter = NotifyFilters.LastWrite; //Watch for changes in LastWrite times
+ watcher.Filter = "*.*";
+
+ // Add event handlers.
+ watcher.Changed += OnChanged;
+ watcher.Created += OnChanged;
+
+ watcher.EnableRaisingEvents = true; // Begin watching.
+
+ AppDomain.CurrentDomain.DomainUnload += (EventHandler) ((_, __) =>
+ {
+ watcher.Dispose();
+ });
+ }
+
+ private static void OnChanged(object sender, FileSystemEventArgs e)
+ {
+ var extension = Path.GetExtension(e.FullPath);
+ if (extension == ".sln" || extension == ".csproj")
+ RiderScriptEditorData.instance.HasChanges = true;
+ }
+
+ internal static string GetEditorRealPath(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return path;
+ }
+
+ if (!FileSystemUtil.EditorPathExists(path))
+ return path;
+
+ if (SystemInfo.operatingSystemFamily != OperatingSystemFamily.Windows)
+ {
+ var realPath = FileSystemUtil.GetFinalPathName(path);
+
+ // case of snap installation
+ if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.Linux)
+ {
+ if (new FileInfo(path).Name.ToLowerInvariant() == "rider" &&
+ new FileInfo(realPath).Name.ToLowerInvariant() == "snap")
+ {
+ var snapInstallPath = "/snap/rider/current/bin/rider.sh";
+ if (new FileInfo(snapInstallPath).Exists)
+ return snapInstallPath;
+ }
+ }
+
+ // in case of symlink
+ return realPath;
+ }
+
+ return path;
+ }
+
+ const string unity_generate_all = "unity_generate_all_csproj";
+
+ public RiderScriptEditor(IDiscovery discovery, IGenerator projectGeneration)
+ {
+ m_Discoverability = discovery;
+ m_ProjectGeneration = projectGeneration;
+ }
+
+ private static string[] defaultExtensions
+ {
+ get
+ {
+ var customExtensions = new[] {"json", "asmdef", "log", "xaml"};
+ return EditorSettings.projectGenerationBuiltinExtensions.Concat(EditorSettings.projectGenerationUserExtensions)
+ .Concat(customExtensions).Distinct().ToArray();
+ }
+ }
+
+ private static string[] HandledExtensions
+ {
+ get
+ {
+ return HandledExtensionsString.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.TrimStart('.', '*'))
+ .ToArray();
+ }
+ }
+
+ private static string HandledExtensionsString
+ {
+ get { return EditorPrefs.GetString("Rider_UserExtensions", string.Join(";", defaultExtensions));}
+ set { EditorPrefs.SetString("Rider_UserExtensions", value); }
+ }
+
+ private static bool SupportsExtension(string path)
+ {
+ var extension = Path.GetExtension(path);
+ if (string.IsNullOrEmpty(extension))
+ return false;
+ return HandledExtensions.Contains(extension.TrimStart('.'));
+ }
+
+ public void OnGUI()
+ {
+ var prevGenerate = EditorPrefs.GetBool(unity_generate_all, false);
+ var generateAll = EditorGUILayout.Toggle("Generate all .csproj files.", prevGenerate);
+ if (generateAll != prevGenerate)
+ {
+ EditorPrefs.SetBool(unity_generate_all, generateAll);
+ }
+
+ m_ProjectGeneration.GenerateAll(generateAll);
+
+ if (RiderScriptEditorData.instance.shouldLoadEditorPlugin)
+ {
+ HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString);
+ }
+ }
+
+ public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles,
+ string[] importedFiles)
+ {
+ m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles),
+ importedFiles);
+ }
+
+ public void SyncAll()
+ {
+ AssetDatabase.Refresh();
+ if (RiderScriptEditorData.instance.HasChanges)
+ {
+ m_ProjectGeneration.Sync();
+ RiderScriptEditorData.instance.HasChanges = false;
+ }
+ }
+
+ public void Initialize(string editorInstallationPath) // is called each time ExternalEditor is changed
+ {
+ RiderScriptEditorData.instance.Invalidate(editorInstallationPath);
+ m_ProjectGeneration.Sync(); // regenerate csproj and sln for new editor
+ }
+
+ public bool OpenProject(string path, int line, int column)
+ {
+ if (path != "" && !SupportsExtension(path)) // Assets - Open C# Project passes empty path here
+ {
+ return false;
+ }
+
+ if (path == "" && SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX)
+ {
+ // there is a bug in DllImplementation - use package implementation here instead https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/21
+ return OpenOSXApp(path, line, column);
+ }
+
+ if (!IsUnityScript(path))
+ {
+ var fastOpenResult = EditorPluginInterop.OpenFileDllImplementation(path, line, column);
+ if (fastOpenResult)
+ return true;
+ }
+
+ if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX)
+ {
+ return OpenOSXApp(path, line, column);
+ }
+
+ var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync.
+ solution = solution == "" ? "" : $"\"{solution}\"";
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = CodeEditor.CurrentEditorInstallation,
+ Arguments = $"{solution} -l {line} \"{path}\"",
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+
+ return true;
+ }
+
+ private bool OpenOSXApp(string path, int line, int column)
+ {
+ var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync.
+ solution = solution == "" ? "" : $"\"{solution}\"";
+ var pathArguments = path == "" ? "" : $"-l {line} \"{path}\"";
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "open",
+ Arguments = $"-n \"{CodeEditor.CurrentEditorInstallation}\" --args {solution} {pathArguments}",
+ CreateNoWindow = true,
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+
+ return true;
+ }
+
+ private string GetSolutionFile(string path)
+ {
+ if (IsUnityScript(path))
+ {
+ return Path.Combine(GetBaseUnityDeveloperFolder(), "Projects/CSharp/Unity.CSharpProjects.gen.sln");
+ }
+
+ var solutionFile = m_ProjectGeneration.SolutionFile();
+ if (File.Exists(solutionFile))
+ {
+ return solutionFile;
+ }
+
+ return "";
+ }
+
+ static bool IsUnityScript(string path)
+ {
+ if (UnityEditor.Unsupported.IsDeveloperBuild())
+ {
+ var baseFolder = GetBaseUnityDeveloperFolder().Replace("\\", "/");
+ var lowerPath = path.ToLowerInvariant().Replace("\\", "/");
+
+ if (lowerPath.Contains((baseFolder + "/Runtime").ToLowerInvariant())
+ || lowerPath.Contains((baseFolder + "/Editor").ToLowerInvariant()))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ static string GetBaseUnityDeveloperFolder()
+ {
+ return Directory.GetParent(EditorApplication.applicationPath).Parent.Parent.FullName;
+ }
+
+ public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation)
+ {
+ if (FileSystemUtil.EditorPathExists(editorPath) && IsRiderInstallation(editorPath))
+ {
+ var info = new RiderPathLocator.RiderInfo(editorPath, false);
+ installation = new CodeEditor.Installation
+ {
+ Name = info.Presentation,
+ Path = info.Path
+ };
+ return true;
+ }
+
+ installation = default;
+ return false;
+ }
+
+ public static bool IsRiderInstallation(string path)
+ {
+ if (IsAssetImportWorkerProcess())
+ return false;
+
+ if (string.IsNullOrEmpty(path))
+ {
+ return false;
+ }
+
+ var fileInfo = new FileInfo(path);
+ var filename = fileInfo.Name.ToLowerInvariant();
+ return filename.StartsWith("rider", StringComparison.Ordinal);
+ }
+
+ private static bool IsAssetImportWorkerProcess()
+ {
+#if UNITY_2019_3_OR_NEWER
+ return UnityEditor.Experimental.AssetDatabaseExperimental.IsAssetImportWorkerProcess();
+#else
+ return false;
+#endif
+ }
+
+ public static string CurrentEditor // works fast, doesn't validate if executable really exists
+ => EditorPrefs.GetString("kScriptsDefaultApp");
+
+ public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback();
+
+ public void CreateSolutionIfDoesntExist()
+ {
+ if (!m_ProjectGeneration.HasSolutionBeenGenerated())
+ {
+ m_ProjectGeneration.Sync();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta
new file mode 100644
index 00000000..16764836
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c4095d72f77fbb64ea39b8b3ca246622
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs
new file mode 100644
index 00000000..f75ed0d8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs
@@ -0,0 +1,29 @@
+using System;
+using UnityEditor;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public class RiderScriptEditorData : ScriptableSingleton
+ {
+ [SerializeField] internal bool HasChanges = true; // sln/csproj files were changed
+ [SerializeField] internal bool shouldLoadEditorPlugin;
+ [SerializeField] internal bool InitializedOnce;
+ [SerializeField] internal string currentEditorVersion;
+
+ public void Init()
+ {
+ if (string.IsNullOrEmpty(currentEditorVersion))
+ Invalidate(RiderScriptEditor.CurrentEditor);
+ }
+
+ public void Invalidate(string editorInstallationPath)
+ {
+ currentEditorVersion = RiderPathLocator.GetBuildNumber(editorInstallationPath);
+ if (!Version.TryParse(currentEditorVersion, out var version))
+ shouldLoadEditorPlugin = false;
+
+ shouldLoadEditorPlugin = version >= new Version("191.7141.156");
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta
new file mode 100644
index 00000000..21a5abc7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f079e3afd077fb94fa2bda74d6409499
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta
new file mode 100644
index 00000000..f6e86c98
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a52391bc44c477f40a547ed4ef3b9560
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs
new file mode 100644
index 00000000..01573faf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using JetBrains.Annotations;
+using UnityEditor;
+
+namespace Packages.Rider.Editor.UnitTesting
+{
+ public class CallbackData : ScriptableSingleton
+ {
+ public bool isRider;
+
+ [UsedImplicitly] public static event EventHandler Changed = (sender, args) => { };
+
+ internal void RaiseChangedEvent()
+ {
+ Changed(null, EventArgs.Empty);
+ }
+
+ public List events = new List();
+
+ [UsedImplicitly]
+ public void Clear()
+ {
+ events.Clear();
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta
new file mode 100644
index 00000000..ce327225
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 010246a07de7cb34185a2a7b1c1fad59
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs
new file mode 100644
index 00000000..10d528b7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs
@@ -0,0 +1,18 @@
+#if TEST_FRAMEWORK
+using UnityEditor;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace Packages.Rider.Editor.UnitTesting
+{
+ [InitializeOnLoad]
+ internal static class CallbackInitializer
+ {
+ static CallbackInitializer()
+ {
+ if (CallbackData.instance.isRider)
+ ScriptableObject.CreateInstance().RegisterCallbacks(ScriptableObject.CreateInstance(), 0);
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta
new file mode 100644
index 00000000..d47c38c9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: aa1c6b1a353ab464782fc1e7c051eb02
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs
new file mode 100644
index 00000000..e08c3465
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs
@@ -0,0 +1,47 @@
+using JetBrains.Annotations;
+using UnityEngine;
+#if TEST_FRAMEWORK
+using UnityEditor;
+using UnityEditor.TestTools.TestRunner.Api;
+#endif
+
+namespace Packages.Rider.Editor.UnitTesting
+{
+ public static class RiderTestRunner
+ {
+#if TEST_FRAMEWORK
+ private static readonly TestsCallback Callback = ScriptableObject.CreateInstance();
+#endif
+ [UsedImplicitly]
+ public static void RunTests(int testMode, string[] assemblyNames, string[] testNames, string[] categoryNames, string[] groupNames, int? buildTarget)
+ {
+#if !TEST_FRAMEWORK
+ Debug.LogError("Update Test Framework package to v.1.1.1+ to run tests from Rider.");
+#else
+ CallbackData.instance.isRider = true;
+
+ var api = ScriptableObject.CreateInstance();
+ var settings = new ExecutionSettings();
+ var filter = new Filter
+ {
+ assemblyNames = assemblyNames,
+ testNames = testNames,
+ categoryNames = categoryNames,
+ groupNames = groupNames,
+ targetPlatform = (BuildTarget?) buildTarget
+ };
+
+ if (testMode > 0) // for future use - test-framework would allow running both Edit and Play test at once
+ filter.testMode = (TestMode) testMode;
+
+ settings.filters = new []{
+ filter
+ };
+ api.Execute(settings);
+
+ api.UnregisterCallbacks(Callback); // avoid multiple registrations
+ api.RegisterCallbacks(Callback); // This can be used to receive information about when the test suite and individual tests starts and stops. Provide this with a scriptable object implementing ICallbacks
+#endif
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta
new file mode 100644
index 00000000..6ef53130
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5c3b27069cb3ddf42ba1260eeefcdd1c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs
new file mode 100644
index 00000000..ce2e1b7e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs
@@ -0,0 +1,31 @@
+using System;
+using NUnit.Framework.Interfaces;
+
+namespace Packages.Rider.Editor.UnitTesting
+{
+ [Serializable]
+ public enum EventType { TestStarted, TestFinished, RunFinished }
+
+ [Serializable]
+ public class TestEvent
+ {
+ public EventType type;
+ public string id;
+ public string assemblyName;
+ public string output;
+ public TestStatus testStatus;
+ public double duration;
+ public string parentId;
+
+ public TestEvent(EventType type, string id, string assemblyName, string output, double duration, TestStatus testStatus, string parentID)
+ {
+ this.type = type;
+ this.id = id;
+ this.assemblyName = assemblyName;
+ this.output = output;
+ this.testStatus = testStatus;
+ this.duration = duration;
+ parentId = parentID;
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta
new file mode 100644
index 00000000..7ec7c71f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f9413c47b3a14a64e8810ce76d1a6032
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs
new file mode 100644
index 00000000..9995050f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs
@@ -0,0 +1,83 @@
+#if TEST_FRAMEWORK
+using System;
+using System.Text;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace Packages.Rider.Editor.UnitTesting
+{
+ public class TestsCallback : ScriptableObject, ICallbacks
+ {
+ public void RunFinished(ITestResultAdaptor result)
+ {
+ CallbackData.instance.isRider = false;
+
+ CallbackData.instance.events.Add(
+ new TestEvent(EventType.RunFinished, "", "","", 0, ParseTestStatus(result.TestStatus), ""));
+ CallbackData.instance.RaiseChangedEvent();
+ }
+
+ public void TestStarted(ITestAdaptor result)
+ {
+ if (result.Method == null) return;
+
+ CallbackData.instance.events.Add(
+ new TestEvent(EventType.TestStarted, GetUniqueName(result), result.Method.TypeInfo.Assembly.GetName().Name, "", 0, ParseTestStatus(TestStatus.Passed), result.ParentFullName));
+ CallbackData.instance.RaiseChangedEvent();
+ }
+
+ public void TestFinished(ITestResultAdaptor result)
+ {
+ if (result.Test.Method == null) return;
+
+ CallbackData.instance.events.Add(
+ new TestEvent(EventType.TestFinished, GetUniqueName(result.Test), result.Test.Method.TypeInfo.Assembly.GetName().Name, ExtractOutput(result), result.Duration, ParseTestStatus(result.TestStatus), result.Test.ParentFullName));
+ CallbackData.instance.RaiseChangedEvent();
+ }
+
+ // todo: reimplement JetBrains.Rider.Unity.Editor.AfterUnity56.UnitTesting.TestEventsSender.GetUniqueName
+ private static string GetUniqueName(ITestAdaptor test)
+ {
+ string str = test.FullName;
+ return str;
+ }
+
+ public void RunStarted(ITestAdaptor testsToRun)
+ {
+ }
+
+ private static NUnit.Framework.Interfaces.TestStatus ParseTestStatus(TestStatus testStatus)
+ {
+ return (NUnit.Framework.Interfaces.TestStatus)Enum.Parse(typeof(NUnit.Framework.Interfaces.TestStatus), testStatus.ToString());
+ }
+
+ private static string ExtractOutput(ITestResultAdaptor testResult)
+ {
+ var stringBuilder = new StringBuilder();
+ if (testResult.Message != null)
+ {
+ stringBuilder.AppendLine("Message: ");
+ stringBuilder.AppendLine(testResult.Message);
+ }
+
+ if (!string.IsNullOrEmpty(testResult.Output))
+ {
+ stringBuilder.AppendLine("Output: ");
+ stringBuilder.AppendLine(testResult.Output);
+ }
+
+ if (!string.IsNullOrEmpty(testResult.StackTrace))
+ {
+ stringBuilder.AppendLine("Stacktrace: ");
+ stringBuilder.AppendLine(testResult.StackTrace);
+ }
+
+ var result = stringBuilder.ToString();
+ if (result.Length > 0)
+ return result;
+
+ return testResult.Output ?? string.Empty;
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta
new file mode 100644
index 00000000..068cba1a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 58aa570dbe0761f43b25ff6c2265bbe2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta
new file mode 100644
index 00000000..d7ba88e9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5e726086cd652f82087d59d67d2c24cd
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs
new file mode 100644
index 00000000..c41490a4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs
@@ -0,0 +1,36 @@
+using System.Collections.Generic;
+
+namespace Packages.Rider.Editor.Util
+{
+ public class CommandLineParser
+ {
+ public Dictionary Options = new Dictionary();
+
+ public CommandLineParser(string[] args)
+ {
+ var i = 0;
+ while (i < args.Length)
+ {
+ var arg = args[i];
+ if (!arg.StartsWith("-"))
+ {
+ i++;
+ continue;
+ }
+
+ string value = null;
+ if (i + 1 < args.Length && !args[i + 1].StartsWith("-"))
+ {
+ value = args[i + 1];
+ i++;
+ }
+
+ if (!(Options.ContainsKey(arg)))
+ {
+ Options.Add(arg, value);
+ }
+ i++;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta
new file mode 100644
index 00000000..536d707f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 154ace4bd16de9f4e84052ac257786d6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs
new file mode 100644
index 00000000..f558acac
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs
@@ -0,0 +1,66 @@
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.Text;
+using JetBrains.Annotations;
+using UnityEngine;
+
+namespace Packages.Rider.Editor.Util
+{
+ public static class FileSystemUtil
+ {
+ [NotNull]
+ public static string GetFinalPathName([NotNull] string path)
+ {
+ if (path == null) throw new ArgumentNullException("path");
+
+ // up to MAX_PATH. MAX_PATH on Linux currently 4096, on Mac OS X 1024
+ // doc: http://man7.org/linux/man-pages/man3/realpath.3.html
+ var sb = new StringBuilder(8192);
+ var result = LibcNativeInterop.realpath(path, sb);
+ if (result == IntPtr.Zero)
+ {
+ throw new Win32Exception($"{path} was not resolved.");
+ }
+
+ return new FileInfo(sb.ToString()).FullName;
+ }
+
+ public static string FileNameWithoutExtension(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return "";
+ }
+
+ var indexOfDot = -1;
+ var indexOfSlash = 0;
+ for (var i = path.Length - 1; i >= 0; i--)
+ {
+ if (indexOfDot == -1 && path[i] == '.')
+ {
+ indexOfDot = i;
+ }
+
+ if (indexOfSlash == 0 && path[i] == '/' || path[i] == '\\')
+ {
+ indexOfSlash = i + 1;
+ break;
+ }
+ }
+
+ if (indexOfDot == -1)
+ {
+ indexOfDot = path.Length;
+ }
+
+ return path.Substring(indexOfSlash, indexOfDot - indexOfSlash);
+ }
+
+ public static bool EditorPathExists(string editorPath)
+ {
+ return SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX && new DirectoryInfo(editorPath).Exists
+ || SystemInfo.operatingSystemFamily != OperatingSystemFamily.MacOSX && new FileInfo(editorPath).Exists;
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta
new file mode 100644
index 00000000..ebc001b7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bdbd564a9fdad0b738e76d030cad1204
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs
new file mode 100644
index 00000000..a4070f28
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Packages.Rider.Editor.Util
+{
+ internal static class LibcNativeInterop
+ {
+ [DllImport("libc", SetLastError = true)]
+ public static extern IntPtr realpath(string path, StringBuilder resolved_path);
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta
new file mode 100644
index 00000000..fe70ee09
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 071c17858dc6c47ada7b2a1f1ded5402
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs
new file mode 100644
index 00000000..63acff63
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs
@@ -0,0 +1,25 @@
+using JetBrains.Annotations;
+using Packages.Rider.Editor;
+using Unity.CodeEditor;
+
+// Is called via commandline from Rider Notification after checking out from source control.
+
+// ReSharper disable once CheckNamespace
+namespace JetBrains.Rider.Unity.Editor
+{
+ public static class RiderMenu
+ {
+ [UsedImplicitly]
+ public static void MenuOpenProject()
+ {
+ if (RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor))
+ {
+ // Force the project files to be sync
+ CodeEditor.CurrentEditor.SyncAll();
+
+ // Load Project
+ CodeEditor.CurrentEditor.OpenProject();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta
new file mode 100644
index 00000000..b78dfae8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a8860c53ca4073d4f92c403e709c12ba
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs
new file mode 100644
index 00000000..03c9922e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Linq;
+using UnityEngine;
+
+namespace Packages.Rider.Editor.Util
+{
+ public static class UnityUtils
+ {
+ internal static readonly string UnityApplicationVersion = Application.unityVersion;
+
+ public static Version UnityVersion
+ {
+ get
+ {
+ var ver = UnityApplicationVersion.Split(".".ToCharArray()).Take(2).Aggregate((a, b) => a + "." + b);
+ return new Version(ver);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta
new file mode 100644
index 00000000..9a4e6fe1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3ec9edad2de6c4df3a146b543a0fbc4c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef
new file mode 100644
index 00000000..4caebc4e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef
@@ -0,0 +1,22 @@
+{
+ "name": "Unity.Rider.Editor",
+ "references": [
+ "GUID:0acc523941302664db1f4e527237feb3"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.test-framework",
+ "expression": "1.1.1",
+ "define": "TEST_FRAMEWORK"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta
new file mode 100644
index 00000000..7a89700b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d528c8c98d269ca44a06cd9624a03945
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json
new file mode 100644
index 00000000..eb7d7d5e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "com.unity.ide.rider",
+ "displayName": "Rider Editor",
+ "description": "Code editor integration for supporting Rider as code editor for unity. Adds support for generating csproj files for code completion, auto discovery of installations, etc.",
+ "version": "1.1.4",
+ "unity": "2019.2",
+ "unityRelease": "0a12",
+ "dependencies": {
+ "com.unity.test-framework": "1.1.1"
+ },
+ "relatedPackages": {
+ "com.unity.ide.rider.tests": "1.1.4"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.rider.git",
+ "revision": "d2ef95989104a4ce866cdcb7f94cf3c67476fcc9"
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta
new file mode 100644
index 00000000..11bcd7b9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 66c95bb3c74257f41bae2622511dc02d
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md
new file mode 100644
index 00000000..20f40724
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md
@@ -0,0 +1,79 @@
+# Code Editor Package for Visual Studio Code
+
+## [1.2.3] - 2020-10-23
+
+Remove workaround for VSCode omnisharp (as of https://github.com/OmniSharp/omnisharp-vscode/issues/4113 we no longer need to disable the referenceoutputassemblies).
+
+
+## [1.2.2] - 2020-09-04
+
+VSC-14 - synchronize solution file when adding new assembly
+
+
+## [1.2.1] - 2020-05-15
+
+Source filtering adds support for asmref
+
+
+## [1.2.0] - 2020-03-04
+
+Do not reference projects that has not been generated (case 1211057)
+Only open files that exists (case 1188394)
+Add individual toggle buttons for generating csprojects for packages
+Add support for Roslyn analyzers in project generation through csc.rsp and compiled assembly references
+Remove Release build target from csproj and sln
+
+
+## [1.1.4] - 2020-01-02
+
+Delta project generation, only recompute the csproj files whose script modified.
+
+
+## [1.1.3] - 2019-10-22
+
+Exe version of vscode will use Normal ProcessWindowStyle while cmd will use Hidden
+
+
+## [1.1.2] - 2019-08-30
+
+Fixing OSX open command arguments
+
+
+## [1.1.1] - 2019-08-19
+
+Support for Player Project. Generates specific csproj files containing files, reference, defines,
+etc. that will show how the assembly will be compiled for a target platform.
+
+
+## [1.1.0] - 2019-08-07
+
+Adds support for choosing extensions to be opened with VSCode. This can be done through the GUI in Preferences.
+Avoids opening all extensions after the change in core unity.
+
+
+## [1.0.7] - 2019-05-15
+
+Fix various OSX specific issues.
+Generate project on load if they are not generated.
+Fix path recognition.
+
+
+## [1.0.6] - 2019-04-30
+
+Ensure asset database is refreshed when generating csproj and solution files.
+
+## [1.0.5] - 2019-04-27
+
+Add support for generating all csproj files.
+
+## [1.0.4] - 2019-04-18
+
+Fix relative package paths.
+Fix opening editor on mac.
+Add %LOCALAPPDATA%/Programs to the path of install paths.
+
+## [1.0.3] - 2019-01-01
+
+### This is the first release of *Unity Package vscode_editor*.
+
+Using the newly created api to integrate Visual Studio Code with Unity.
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md.meta
new file mode 100644
index 00000000..65aea0bb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4ddcdc3816429494a8bea67e973875f7
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md
new file mode 100644
index 00000000..576d0963
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+# Contributing
+
+## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement)
+By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions.
+
+## Once you have a change ready following these ground rules. Simply make a pull request
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md.meta
new file mode 100644
index 00000000..31e836f7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fcb9be00baf924c4183fc0313e6185c5
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Documentation~/README.md b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Documentation~/README.md
new file mode 100644
index 00000000..d0a565f7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Documentation~/README.md
@@ -0,0 +1,4 @@
+# Code Editor Package for Visual Studio Code
+
+This package is not intended to be modified by users.
+Nor does it provide any api intended to be included in user projects.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor.meta
new file mode 100644
index 00000000..568fa030
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 58628227479c34542ac8c5193ccced84
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration.meta
new file mode 100644
index 00000000..48ed36c1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c779d3735d950f341ba35154e8b3234b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs
new file mode 100644
index 00000000..c442d876
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs
@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor;
+using UnityEditor.Compilation;
+using UnityEditor.PackageManager;
+
+namespace VSCodeEditor
+{
+ public interface IAssemblyNameProvider
+ {
+ string[] ProjectSupportedExtensions { get; }
+ ProjectGenerationFlag ProjectGenerationFlag { get; }
+ string GetAssemblyNameFromScriptPath(string path);
+ IEnumerable GetAssemblies(Func shouldFileBePartOfSolution);
+ IEnumerable GetAllAssetPaths();
+ IEnumerable GetRoslynAnalyzerPaths();
+ UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath);
+ ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories);
+ bool IsInternalizedPackagePath(string path);
+ void ToggleProjectGeneration(ProjectGenerationFlag preference);
+ }
+
+ internal class AssemblyNameProvider : IAssemblyNameProvider
+ {
+ ProjectGenerationFlag m_ProjectGenerationFlag = (ProjectGenerationFlag)EditorPrefs.GetInt("unity_project_generation_flag", 0);
+
+ public string[] ProjectSupportedExtensions => EditorSettings.projectGenerationUserExtensions;
+
+ public ProjectGenerationFlag ProjectGenerationFlag
+ {
+ get => m_ProjectGenerationFlag;
+ private set
+ {
+ EditorPrefs.SetInt("unity_project_generation_flag", (int)value);
+ m_ProjectGenerationFlag = value;
+ }
+ }
+
+ public string GetAssemblyNameFromScriptPath(string path)
+ {
+ return CompilationPipeline.GetAssemblyNameFromScriptPath(path);
+ }
+
+ public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution)
+ {
+ return CompilationPipeline.GetAssemblies()
+ .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution));
+ }
+
+ public IEnumerable GetAllAssetPaths()
+ {
+ return AssetDatabase.GetAllAssetPaths();
+ }
+
+ public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath)
+ {
+ return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath);
+ }
+
+ public ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories)
+ {
+ return CompilationPipeline.ParseResponseFile(
+ responseFilePath,
+ projectDirectory,
+ systemReferenceDirectories
+ );
+ }
+
+ public bool IsInternalizedPackagePath(string path)
+ {
+ if (string.IsNullOrWhiteSpace(path))
+ {
+ return false;
+ }
+ var packageInfo = FindForAssetPath(path);
+ if (packageInfo == null)
+ {
+ return false;
+ }
+ var packageSource = packageInfo.source;
+ switch (packageSource)
+ {
+ case PackageSource.Embedded:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Embedded);
+ case PackageSource.Registry:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Registry);
+ case PackageSource.BuiltIn:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.BuiltIn);
+ case PackageSource.Unknown:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Unknown);
+ case PackageSource.Local:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Local);
+ case PackageSource.Git:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Git);
+#if UNITY_2019_3_OR_NEWER
+ case PackageSource.LocalTarball:
+ return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.LocalTarBall);
+#endif
+ }
+
+ return false;
+ }
+
+ public void ToggleProjectGeneration(ProjectGenerationFlag preference)
+ {
+ if (ProjectGenerationFlag.HasFlag(preference))
+ {
+ ProjectGenerationFlag ^= preference;
+ }
+ else
+ {
+ ProjectGenerationFlag |= preference;
+ }
+ }
+
+ public IEnumerable GetRoslynAnalyzerPaths()
+ {
+ return PluginImporter.GetAllImporters()
+ .Where(i => !i.isNativePlugin && AssetDatabase.GetLabels(i).SingleOrDefault(l => l == "RoslynAnalyzer") != null)
+ .Select(i => i.assetPath);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta
new file mode 100644
index 00000000..a8ae38b5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1d93ffb668978f7488211a331977b73b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs
new file mode 100644
index 00000000..aeff22e5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs
@@ -0,0 +1,38 @@
+using System.IO;
+using System.Text;
+
+namespace VSCodeEditor
+{
+ public interface IFileIO
+ {
+ bool Exists(string fileName);
+
+ string ReadAllText(string fileName);
+ void WriteAllText(string fileName, string content);
+
+ void CreateDirectory(string pathName);
+ }
+
+ class FileIOProvider : IFileIO
+ {
+ public bool Exists(string fileName)
+ {
+ return File.Exists(fileName);
+ }
+
+ public string ReadAllText(string fileName)
+ {
+ return File.ReadAllText(fileName);
+ }
+
+ public void WriteAllText(string fileName, string content)
+ {
+ File.WriteAllText(fileName, content, Encoding.UTF8);
+ }
+
+ public void CreateDirectory(string pathName)
+ {
+ Directory.CreateDirectory(pathName);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs.meta
new file mode 100644
index 00000000..91d8212c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eb221cf55b3544646b0c3b6bc790080f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs
new file mode 100644
index 00000000..06549664
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs
@@ -0,0 +1,21 @@
+namespace VSCodeEditor
+{
+ public interface IGUIDGenerator
+ {
+ string ProjectGuid(string projectName, string assemblyName);
+ string SolutionGuid(string projectName, string extension);
+ }
+
+ class GUIDProvider : IGUIDGenerator
+ {
+ public string ProjectGuid(string projectName, string assemblyName)
+ {
+ return SolutionGuidGenerator.GuidForProject(projectName + assemblyName);
+ }
+
+ public string SolutionGuid(string projectName, string extension)
+ {
+ return SolutionGuidGenerator.GuidForSolution(projectName, extension); // GetExtensionOfSourceFiles(assembly.sourceFiles)
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs.meta
new file mode 100644
index 00000000..9ce342e0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e58bd3cca6475e54b93632bb6837aeea
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs
new file mode 100644
index 00000000..45527281
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs
@@ -0,0 +1,777 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security;
+using System.Security.Cryptography;
+using System.Text;
+using UnityEditor;
+using UnityEditor.Compilation;
+using UnityEngine;
+using UnityEngine.Profiling;
+
+namespace VSCodeEditor
+{
+ public interface IGenerator
+ {
+ bool SyncIfNeeded(List affectedFiles, string[] reimportedFiles);
+ void Sync();
+ string SolutionFile();
+ string ProjectDirectory { get; }
+ IAssemblyNameProvider AssemblyNameProvider { get; }
+ void GenerateAll(bool generateAll);
+ bool SolutionExists();
+ }
+
+ public class ProjectGeneration : IGenerator
+ {
+ enum ScriptingLanguage
+ {
+ None,
+ CSharp
+ }
+
+ public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003";
+
+ const string k_WindowsNewline = "\r\n";
+
+ const string k_SettingsJson = @"{
+ ""files.exclude"":
+ {
+ ""**/.DS_Store"":true,
+ ""**/.git"":true,
+ ""**/.gitignore"":true,
+ ""**/.gitmodules"":true,
+ ""**/*.booproj"":true,
+ ""**/*.pidb"":true,
+ ""**/*.suo"":true,
+ ""**/*.user"":true,
+ ""**/*.userprefs"":true,
+ ""**/*.unityproj"":true,
+ ""**/*.dll"":true,
+ ""**/*.exe"":true,
+ ""**/*.pdf"":true,
+ ""**/*.mid"":true,
+ ""**/*.midi"":true,
+ ""**/*.wav"":true,
+ ""**/*.gif"":true,
+ ""**/*.ico"":true,
+ ""**/*.jpg"":true,
+ ""**/*.jpeg"":true,
+ ""**/*.png"":true,
+ ""**/*.psd"":true,
+ ""**/*.tga"":true,
+ ""**/*.tif"":true,
+ ""**/*.tiff"":true,
+ ""**/*.3ds"":true,
+ ""**/*.3DS"":true,
+ ""**/*.fbx"":true,
+ ""**/*.FBX"":true,
+ ""**/*.lxo"":true,
+ ""**/*.LXO"":true,
+ ""**/*.ma"":true,
+ ""**/*.MA"":true,
+ ""**/*.obj"":true,
+ ""**/*.OBJ"":true,
+ ""**/*.asset"":true,
+ ""**/*.cubemap"":true,
+ ""**/*.flare"":true,
+ ""**/*.mat"":true,
+ ""**/*.meta"":true,
+ ""**/*.prefab"":true,
+ ""**/*.unity"":true,
+ ""build/"":true,
+ ""Build/"":true,
+ ""Library/"":true,
+ ""library/"":true,
+ ""obj/"":true,
+ ""Obj/"":true,
+ ""ProjectSettings/"":true,
+ ""temp/"":true,
+ ""Temp/"":true
+ }
+}";
+
+ ///
+ /// Map source extensions to ScriptingLanguages
+ ///
+ static readonly Dictionary k_BuiltinSupportedExtensions = new Dictionary
+ {
+ { "cs", ScriptingLanguage.CSharp },
+ { "uxml", ScriptingLanguage.None },
+ { "uss", ScriptingLanguage.None },
+ { "shader", ScriptingLanguage.None },
+ { "compute", ScriptingLanguage.None },
+ { "cginc", ScriptingLanguage.None },
+ { "hlsl", ScriptingLanguage.None },
+ { "glslinc", ScriptingLanguage.None },
+ { "template", ScriptingLanguage.None },
+ { "raytrace", ScriptingLanguage.None }
+ };
+
+ string m_SolutionProjectEntryTemplate = string.Join("\r\n", @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", @"EndProject").Replace(" ", "\t");
+
+ string m_SolutionProjectConfigurationTemplate = string.Join("\r\n", @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU").Replace(" ", "\t");
+
+ static readonly string[] k_ReimportSyncExtensions = { ".dll", ".asmdef" };
+
+ string[] m_ProjectSupportedExtensions = new string[0];
+ public string ProjectDirectory { get; }
+ IAssemblyNameProvider IGenerator.AssemblyNameProvider => m_AssemblyNameProvider;
+
+ public void GenerateAll(bool generateAll)
+ {
+ m_AssemblyNameProvider.ToggleProjectGeneration(
+ ProjectGenerationFlag.BuiltIn
+ | ProjectGenerationFlag.Embedded
+ | ProjectGenerationFlag.Git
+ | ProjectGenerationFlag.Local
+#if UNITY_2019_3_OR_NEWER
+ | ProjectGenerationFlag.LocalTarBall
+#endif
+ | ProjectGenerationFlag.PlayerAssemblies
+ | ProjectGenerationFlag.Registry
+ | ProjectGenerationFlag.Unknown);
+ }
+
+ readonly string m_ProjectName;
+ readonly IAssemblyNameProvider m_AssemblyNameProvider;
+ readonly IFileIO m_FileIOProvider;
+ readonly IGUIDGenerator m_GUIDProvider;
+
+ const string k_ToolsVersion = "4.0";
+ const string k_ProductVersion = "10.0.20506";
+ const string k_BaseDirectory = ".";
+ const string k_TargetFrameworkVersion = "v4.7.1";
+ const string k_TargetLanguageVersion = "latest";
+
+ public ProjectGeneration(string tempDirectory)
+ : this(tempDirectory, new AssemblyNameProvider(), new FileIOProvider(), new GUIDProvider()) { }
+
+ public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIO, IGUIDGenerator guidGenerator)
+ {
+ ProjectDirectory = tempDirectory.Replace('\\', '/');
+ m_ProjectName = Path.GetFileName(ProjectDirectory);
+ m_AssemblyNameProvider = assemblyNameProvider;
+ m_FileIOProvider = fileIO;
+ m_GUIDProvider = guidGenerator;
+ }
+
+ ///
+ /// Syncs the scripting solution if any affected files are relevant.
+ ///
+ ///
+ /// Whether the solution was synced.
+ ///
+ ///
+ /// A set of files whose status has changed
+ ///
+ ///
+ /// A set of files that got reimported
+ ///
+ public bool SyncIfNeeded(List affectedFiles, string[] reimportedFiles)
+ {
+ Profiler.BeginSample("SolutionSynchronizerSync");
+ SetupProjectSupportedExtensions();
+
+ // Don't sync if we haven't synced before
+ if (SolutionExists() && HasFilesBeenModified(affectedFiles, reimportedFiles))
+ {
+ var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution);
+ var allProjectAssemblies = RelevantAssembliesForMode(assemblies).ToList();
+ SyncSolution(allProjectAssemblies);
+
+ var allAssetProjectParts = GenerateAllAssetProjectParts();
+
+ var affectedNames = affectedFiles.Select(asset => m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset)).Where(name => !string.IsNullOrWhiteSpace(name)).Select(name => name.Split(new [] {".dll"}, StringSplitOptions.RemoveEmptyEntries)[0]);
+ var reimportedNames = reimportedFiles.Select(asset => m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset)).Where(name => !string.IsNullOrWhiteSpace(name)).Select(name => name.Split(new [] {".dll"}, StringSplitOptions.RemoveEmptyEntries)[0]);
+ var affectedAndReimported = new HashSet(affectedNames.Concat(reimportedNames));
+ var assemblyNames = new HashSet(allProjectAssemblies.Select(assembly => Path.GetFileName(assembly.outputPath)));
+
+ foreach (var assembly in allProjectAssemblies)
+ {
+ if (!affectedAndReimported.Contains(assembly.name))
+ continue;
+
+ SyncProject(assembly, allAssetProjectParts, ParseResponseFileData(assembly), assemblyNames);
+ }
+
+ Profiler.EndSample();
+ return true;
+ }
+
+ Profiler.EndSample();
+ return false;
+ }
+
+ bool HasFilesBeenModified(List affectedFiles, string[] reimportedFiles)
+ {
+ return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset);
+ }
+
+ static bool ShouldSyncOnReimportedAsset(string asset)
+ {
+ return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension);
+ }
+
+ public void Sync()
+ {
+ SetupProjectSupportedExtensions();
+ GenerateAndWriteSolutionAndProjects();
+ }
+
+ public bool SolutionExists()
+ {
+ return m_FileIOProvider.Exists(SolutionFile());
+ }
+
+ void SetupProjectSupportedExtensions()
+ {
+ m_ProjectSupportedExtensions = m_AssemblyNameProvider.ProjectSupportedExtensions;
+ }
+
+ bool ShouldFileBePartOfSolution(string file)
+ {
+ // Exclude files coming from packages except if they are internalized.
+ if (m_AssemblyNameProvider.IsInternalizedPackagePath(file))
+ {
+ return false;
+ }
+
+ return HasValidExtension(file);
+ }
+
+ bool HasValidExtension(string file)
+ {
+ string extension = Path.GetExtension(file);
+
+ // Dll's are not scripts but still need to be included..
+ if (extension == ".dll")
+ return true;
+
+ if (file.ToLower().EndsWith(".asmdef"))
+ return true;
+
+ return IsSupportedExtension(extension);
+ }
+
+ bool IsSupportedExtension(string extension)
+ {
+ extension = extension.TrimStart('.');
+ if (k_BuiltinSupportedExtensions.ContainsKey(extension))
+ return true;
+ if (m_ProjectSupportedExtensions.Contains(extension))
+ return true;
+ return false;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(Assembly assembly)
+ {
+ return ScriptingLanguageFor(GetExtensionOfSourceFiles(assembly.sourceFiles));
+ }
+
+ static string GetExtensionOfSourceFiles(string[] files)
+ {
+ return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA";
+ }
+
+ static string GetExtensionOfSourceFile(string file)
+ {
+ var ext = Path.GetExtension(file).ToLower();
+ ext = ext.Substring(1); //strip dot
+ return ext;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(string extension)
+ {
+ return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result)
+ ? result
+ : ScriptingLanguage.None;
+ }
+
+ public void GenerateAndWriteSolutionAndProjects()
+ {
+ // Only synchronize assemblies that have associated source files and ones that we actually want in the project.
+ // This also filters out DLLs coming from .asmdef files in packages.
+ var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution);
+
+ var allAssetProjectParts = GenerateAllAssetProjectParts();
+
+ SyncSolution(assemblies);
+ var allProjectAssemblies = RelevantAssembliesForMode(assemblies).ToList();
+ var assemblyNames = new HashSet(allProjectAssemblies.Select(assembly => Path.GetFileName(assembly.outputPath)));
+ foreach (Assembly assembly in allProjectAssemblies)
+ {
+ var responseFileData = ParseResponseFileData(assembly);
+ SyncProject(assembly, allAssetProjectParts, responseFileData, assemblyNames);
+ }
+
+ WriteVSCodeSettingsFiles();
+ }
+
+ List ParseResponseFileData(Assembly assembly)
+ {
+ var systemReferenceDirectories = CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel);
+
+ Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary(x => x, x => m_AssemblyNameProvider.ParseResponseFile(
+ x,
+ ProjectDirectory,
+ systemReferenceDirectories
+ ));
+
+ Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any())
+ .ToDictionary(x => x.Key, x => x.Value);
+
+ if (responseFilesWithErrors.Any())
+ {
+ foreach (var error in responseFilesWithErrors)
+ foreach (var valueError in error.Value.Errors)
+ {
+ Debug.LogError($"{error.Key} Parse Error : {valueError}");
+ }
+ }
+
+ return responseFilesData.Select(x => x.Value).ToList();
+ }
+
+ Dictionary GenerateAllAssetProjectParts()
+ {
+ Dictionary stringBuilders = new Dictionary();
+
+ foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths())
+ {
+ // Exclude files coming from packages except if they are internalized.
+ // TODO: We need assets from the assembly API
+ if (m_AssemblyNameProvider.IsInternalizedPackagePath(asset))
+ {
+ continue;
+ }
+
+ string extension = Path.GetExtension(asset);
+ if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension))
+ {
+ // Find assembly the asset belongs to by adding script extension and using compilation pipeline.
+ var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset);
+
+ if (string.IsNullOrEmpty(assemblyName))
+ {
+ continue;
+ }
+
+ assemblyName = Path.GetFileNameWithoutExtension(assemblyName);
+
+ if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder))
+ {
+ projectBuilder = new StringBuilder();
+ stringBuilders[assemblyName] = projectBuilder;
+ }
+
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+ }
+
+ var result = new Dictionary();
+
+ foreach (var entry in stringBuilders)
+ result[entry.Key] = entry.Value.ToString();
+
+ return result;
+ }
+
+ void SyncProject(
+ Assembly assembly,
+ Dictionary allAssetsProjectParts,
+ List responseFilesData,
+ HashSet assemblyNames)
+ {
+ SyncProjectFileIfNotChanged(ProjectFile(assembly), ProjectText(assembly, allAssetsProjectParts, responseFilesData, assemblyNames, GetAllRoslynAnalyzerPaths().ToArray()));
+ }
+
+ private IEnumerable GetAllRoslynAnalyzerPaths()
+ {
+ return m_AssemblyNameProvider.GetRoslynAnalyzerPaths();
+ }
+
+ void SyncProjectFileIfNotChanged(string path, string newContents)
+ {
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ void SyncSolutionFileIfNotChanged(string path, string newContents)
+ {
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ void SyncFileIfNotChanged(string filename, string newContents)
+ {
+ if (m_FileIOProvider.Exists(filename))
+ {
+ var currentContents = m_FileIOProvider.ReadAllText(filename);
+
+ if (currentContents == newContents)
+ {
+ return;
+ }
+ }
+
+ m_FileIOProvider.WriteAllText(filename, newContents);
+ }
+
+ string ProjectText(
+ Assembly assembly,
+ Dictionary allAssetsProjectParts,
+ List responseFilesData,
+ HashSet assemblyNames,
+ string[] roslynAnalyzerDllPaths)
+ {
+ var projectBuilder = new StringBuilder();
+ ProjectHeader(assembly, responseFilesData, roslynAnalyzerDllPaths, projectBuilder);
+ var references = new List();
+
+ foreach (string file in assembly.sourceFiles)
+ {
+ if (!HasValidExtension(file))
+ continue;
+
+ var extension = Path.GetExtension(file).ToLower();
+ var fullFile = EscapedRelativePathFor(file);
+ if (".dll" != extension)
+ {
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+ else
+ {
+ references.Add(fullFile);
+ }
+ }
+
+ // Append additional non-script files that should be included in project generation.
+ if (allAssetsProjectParts.TryGetValue(assembly.name, out var additionalAssetsForProject))
+ projectBuilder.Append(additionalAssetsForProject);
+
+ var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r));
+ var internalAssemblyReferences = assembly.assemblyReferences
+ .Where(i => !i.sourceFiles.Any(ShouldFileBePartOfSolution)).Select(i => i.outputPath);
+ var allReferences =
+ assembly.compiledAssemblyReferences
+ .Union(responseRefs)
+ .Union(references)
+ .Union(internalAssemblyReferences)
+ .Except(roslynAnalyzerDllPaths);
+
+ foreach (var reference in allReferences)
+ {
+ string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference);
+ AppendReference(fullReference, projectBuilder);
+ }
+
+ if (0 < assembly.assemblyReferences.Length)
+ {
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ foreach (Assembly reference in assembly.assemblyReferences.Where(i => i.sourceFiles.Any(ShouldFileBePartOfSolution)))
+ {
+ var referencedProject = reference.outputPath;
+
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" {").Append(ProjectGuid(reference.name)).Append("}").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(reference.name).Append("").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+ }
+
+ projectBuilder.Append(ProjectFooter());
+ return projectBuilder.ToString();
+ }
+
+ static void AppendReference(string fullReference, StringBuilder projectBuilder)
+ {
+ //replace \ with / and \\ with /
+ var escapedFullPath = SecurityElement.Escape(fullReference);
+ escapedFullPath = escapedFullPath.Replace("\\\\", "/");
+ escapedFullPath = escapedFullPath.Replace("\\", "/");
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+
+ public string ProjectFile(Assembly assembly)
+ {
+ var fileBuilder = new StringBuilder(assembly.name);
+ fileBuilder.Append(".csproj");
+ return Path.Combine(ProjectDirectory, fileBuilder.ToString());
+ }
+
+ public string SolutionFile()
+ {
+ return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln");
+ }
+
+ void ProjectHeader(
+ Assembly assembly,
+ List responseFilesData,
+ string[] roslynAnalyzerDllPaths,
+ StringBuilder builder
+ )
+ {
+ var otherArguments = GetOtherArgumentsFromResponseFilesData(responseFilesData);
+ GetProjectHeaderTemplate(
+ builder,
+ ProjectGuid(assembly.name),
+ assembly.name,
+ string.Join(";", new[] { "DEBUG", "TRACE" }.Concat(assembly.defines).Concat(responseFilesData.SelectMany(x => x.Defines)).Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Distinct().ToArray()),
+ assembly.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe),
+ GenerateAnalyserItemGroup(otherArguments["analyzer"].Concat(otherArguments["a"])
+ .SelectMany(x => x.Split(';'))
+ .Concat(roslynAnalyzerDllPaths)
+ .Distinct()
+ .ToArray()));
+ }
+
+ private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData)
+ {
+ var paths = responseFilesData.SelectMany(x =>
+ {
+ return x.OtherArguments.Where(a => a.StartsWith("/") || a.StartsWith("-"))
+ .Select(b =>
+ {
+ var index = b.IndexOf(":", StringComparison.Ordinal);
+ if (index > 0 && b.Length > index)
+ {
+ var key = b.Substring(1, index - 1);
+ return new KeyValuePair(key, b.Substring(index + 1));
+ }
+
+ const string warnaserror = "warnaserror";
+ if (b.Substring(1).StartsWith(warnaserror))
+ {
+ return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length + 1));
+ }
+
+ return default;
+ });
+ })
+ .Distinct()
+ .ToLookup(o => o.Key, pair => pair.Value);
+ return paths;
+ }
+
+ private static string GenerateAnalyserItemGroup(string[] paths)
+ {
+ //
+ //
+ //
+ //
+ if (!paths.Any())
+ return string.Empty;
+
+ var analyserBuilder = new StringBuilder();
+ analyserBuilder.Append(" ").Append(k_WindowsNewline);
+ foreach (var path in paths)
+ {
+ analyserBuilder.Append($" ").Append(k_WindowsNewline);
+ }
+ analyserBuilder.Append(" ").Append(k_WindowsNewline);
+ return analyserBuilder.ToString();
+ }
+
+ static string GetSolutionText()
+ {
+ return string.Join("\r\n", @"", @"Microsoft Visual Studio Solution File, Format Version {0}", @"# Visual Studio {1}", @"{2}", @"Global", @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", @" Debug|Any CPU = Debug|Any CPU", @" EndGlobalSection", @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", @"{3}", @" EndGlobalSection", @" GlobalSection(SolutionProperties) = preSolution", @" HideSolutionNode = FALSE", @" EndGlobalSection", @"EndGlobal", @"").Replace(" ", "\t");
+ }
+
+ static string GetProjectFooterTemplate()
+ {
+ return string.Join("\r\n", @" ", @" ", @" ", @"", @"");
+ }
+
+ static void GetProjectHeaderTemplate(
+ StringBuilder builder,
+ string assemblyGUID,
+ string assemblyName,
+ string defines,
+ bool allowUnsafe,
+ string analyzerBlock
+ )
+ {
+ builder.Append(@"").Append(k_WindowsNewline);
+ builder.Append(@"").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_TargetLanguageVersion).Append("").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" Debug").Append(k_WindowsNewline);
+ builder.Append(@" AnyCPU").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_ProductVersion).Append("").Append(k_WindowsNewline);
+ builder.Append(@" 2.0").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(EditorSettings.projectGenerationRootNamespace).Append("").Append(k_WindowsNewline);
+ builder.Append(@" {").Append(assemblyGUID).Append("}").Append(k_WindowsNewline);
+ builder.Append(@" Library").Append(k_WindowsNewline);
+ builder.Append(@" Properties").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(assemblyName).Append("").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_TargetFrameworkVersion).Append("").Append(k_WindowsNewline);
+ builder.Append(@" 512").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_BaseDirectory).Append("").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" true").Append(k_WindowsNewline);
+ builder.Append(@" full").Append(k_WindowsNewline);
+ builder.Append(@" false").Append(k_WindowsNewline);
+ builder.Append(@" Temp\bin\Debug\").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(defines).Append("").Append(k_WindowsNewline);
+ builder.Append(@" prompt").Append(k_WindowsNewline);
+ builder.Append(@" 4").Append(k_WindowsNewline);
+ builder.Append(@" 0169").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(allowUnsafe).Append("").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(@" true").Append(k_WindowsNewline);
+ builder.Append(@" true").Append(k_WindowsNewline);
+ builder.Append(@" false").Append(k_WindowsNewline);
+ builder.Append(@" false").Append(k_WindowsNewline);
+ builder.Append(@" false").Append(k_WindowsNewline);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ builder.Append(analyzerBlock);
+ builder.Append(@" ").Append(k_WindowsNewline);
+ }
+
+ void SyncSolution(IEnumerable assemblies)
+ {
+ SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(assemblies));
+ }
+
+ string SolutionText(IEnumerable assemblies)
+ {
+ var fileversion = "11.00";
+ var vsversion = "2010";
+
+ var relevantAssemblies = RelevantAssembliesForMode(assemblies);
+ string projectEntries = GetProjectEntries(relevantAssemblies);
+ string projectConfigurations = string.Join(k_WindowsNewline, relevantAssemblies.Select(i => GetProjectActiveConfigurations(ProjectGuid(i.name))).ToArray());
+ return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations);
+ }
+
+ static IEnumerable RelevantAssembliesForMode(IEnumerable assemblies)
+ {
+ return assemblies.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i));
+ }
+
+ ///
+ /// Get a Project("{guid}") = "MyProject", "MyProject.csproj", "{projectguid}"
+ /// entry for each relevant language
+ ///
+ string GetProjectEntries(IEnumerable assemblies)
+ {
+ var projectEntries = assemblies.Select(i => string.Format(
+ m_SolutionProjectEntryTemplate,
+ SolutionGuid(i),
+ i.name,
+ Path.GetFileName(ProjectFile(i)),
+ ProjectGuid(i.name)
+ ));
+
+ return string.Join(k_WindowsNewline, projectEntries.ToArray());
+ }
+
+ ///
+ /// Generate the active configuration string for a given project guid
+ ///
+ string GetProjectActiveConfigurations(string projectGuid)
+ {
+ return string.Format(
+ m_SolutionProjectConfigurationTemplate,
+ projectGuid);
+ }
+
+ string EscapedRelativePathFor(string file)
+ {
+ var projectDir = ProjectDirectory.Replace('/', '\\');
+ file = file.Replace('/', '\\');
+ var path = SkipPathPrefix(file, projectDir);
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/'));
+ if (packageInfo != null)
+ {
+ // We have to normalize the path, because the PackageManagerRemapper assumes
+ // dir seperators will be os specific.
+ var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\');
+ path = SkipPathPrefix(absolutePath, projectDir);
+ }
+
+ return SecurityElement.Escape(path);
+ }
+
+ static string SkipPathPrefix(string path, string prefix)
+ {
+ if (path.StartsWith($@"{prefix}\"))
+ return path.Substring(prefix.Length + 1);
+ return path;
+ }
+
+ static string NormalizePath(string path)
+ {
+ if (Path.DirectorySeparatorChar == '\\')
+ return path.Replace('/', Path.DirectorySeparatorChar);
+ return path.Replace('\\', Path.DirectorySeparatorChar);
+ }
+
+ string ProjectGuid(string assembly)
+ {
+ return m_GUIDProvider.ProjectGuid(m_ProjectName, assembly);
+ }
+
+ string SolutionGuid(Assembly assembly)
+ {
+ return m_GUIDProvider.SolutionGuid(m_ProjectName, GetExtensionOfSourceFiles(assembly.sourceFiles));
+ }
+
+ static string ProjectFooter()
+ {
+ return GetProjectFooterTemplate();
+ }
+
+ static string GetProjectExtension()
+ {
+ return ".csproj";
+ }
+
+ void WriteVSCodeSettingsFiles()
+ {
+ var vsCodeDirectory = Path.Combine(ProjectDirectory, ".vscode");
+
+ if (!m_FileIOProvider.Exists(vsCodeDirectory))
+ m_FileIOProvider.CreateDirectory(vsCodeDirectory);
+
+ var vsCodeSettingsJson = Path.Combine(vsCodeDirectory, "settings.json");
+
+ if (!m_FileIOProvider.Exists(vsCodeSettingsJson))
+ m_FileIOProvider.WriteAllText(vsCodeSettingsJson, k_SettingsJson);
+ }
+ }
+
+ public static class SolutionGuidGenerator
+ {
+ static MD5 mD5 = MD5CryptoServiceProvider.Create();
+
+ public static string GuidForProject(string projectName)
+ {
+ return ComputeGuidHashFor(projectName + "salt");
+ }
+
+ public static string GuidForSolution(string projectName, string sourceFileExtension)
+ {
+ if (sourceFileExtension.ToLower() == "cs")
+
+ // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs
+ return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
+
+ return ComputeGuidHashFor(projectName);
+ }
+
+ static string ComputeGuidHashFor(string input)
+ {
+ var hash = mD5.ComputeHash(Encoding.Default.GetBytes(input));
+ return new Guid(hash).ToString();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs.meta
new file mode 100644
index 00000000..5039705b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 97d6c87381e3e51488b49f5891490b70
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs
new file mode 100644
index 00000000..e51dd43f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs
@@ -0,0 +1,18 @@
+using System;
+
+namespace VSCodeEditor
+{
+ [Flags]
+ public enum ProjectGenerationFlag
+ {
+ None = 0,
+ Embedded = 1,
+ Local = 2,
+ Registry = 4,
+ Git = 8,
+ BuiltIn = 16,
+ Unknown = 32,
+ PlayerAssemblies = 64,
+ LocalTarBall = 128,
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta
new file mode 100644
index 00000000..35bf0278
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f239f506223a98f4e9b5dd3a9f80edea
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef
new file mode 100644
index 00000000..032da7cb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef
@@ -0,0 +1,9 @@
+{
+ "name": "Unity.VSCode.Editor",
+ "references": [],
+ "optionalUnityReferences": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef.meta
new file mode 100644
index 00000000..4c94f56d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8b845b123ab418448a8be2935fa804e0
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs
new file mode 100644
index 00000000..609d2cdf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs
@@ -0,0 +1,137 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Unity.CodeEditor;
+
+namespace VSCodeEditor
+{
+ public interface IDiscovery
+ {
+ CodeEditor.Installation[] PathCallback();
+ }
+
+ public class VSCodeDiscovery : IDiscovery
+ {
+ List m_Installations;
+
+ public CodeEditor.Installation[] PathCallback()
+ {
+ if (m_Installations == null)
+ {
+ m_Installations = new List();
+ FindInstallationPaths();
+ }
+
+ return m_Installations.ToArray();
+ }
+
+ void FindInstallationPaths()
+ {
+ string[] possiblePaths =
+#if UNITY_EDITOR_OSX
+ {
+ "/Applications/Visual Studio Code.app",
+ "/Applications/Visual Studio Code - Insiders.app"
+ };
+#elif UNITY_EDITOR_WIN
+ {
+ GetProgramFiles() + @"/Microsoft VS Code/bin/code.cmd",
+ GetProgramFiles() + @"/Microsoft VS Code/Code.exe",
+ GetProgramFiles() + @"/Microsoft VS Code Insiders/bin/code-insiders.cmd",
+ GetProgramFiles() + @"/Microsoft VS Code Insiders/Code.exe",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code/bin/code.cmd",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code/Code.exe",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/bin/code-insiders.cmd",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/Code.exe",
+ };
+#else
+ {
+ "/usr/bin/code",
+ "/bin/code",
+ "/usr/local/bin/code",
+ "/var/lib/flatpak/exports/bin/com.visualstudio.code",
+ "/snap/current/bin/code"
+ };
+#endif
+ var existingPaths = possiblePaths.Where(VSCodeExists).ToList();
+ if (!existingPaths.Any())
+ {
+ return;
+ }
+
+ var lcp = GetLongestCommonPrefix(existingPaths);
+ switch (existingPaths.Count)
+ {
+ case 1:
+ {
+ var path = existingPaths.First();
+ m_Installations = new List
+ {
+ new CodeEditor.Installation
+ {
+ Path = path,
+ Name = path.Contains("Insiders")
+ ? "Visual Studio Code Insiders"
+ : "Visual Studio Code"
+ }
+ };
+ break;
+ }
+ case 2 when existingPaths.Any(path => !(path.Substring(lcp.Length).Contains("/") || path.Substring(lcp.Length).Contains("\\"))):
+ {
+ goto case 1;
+ }
+ default:
+ {
+ m_Installations = existingPaths.Select(path => new CodeEditor.Installation
+ {
+ Name = $"Visual Studio Code Insiders ({path.Substring(lcp.Length)})",
+ Path = path
+ }).ToList();
+
+ break;
+ }
+ }
+ }
+
+#if UNITY_EDITOR_WIN
+ static string GetProgramFiles()
+ {
+ return Environment.GetEnvironmentVariable("ProgramFiles")?.Replace("\\", "/");
+ }
+
+ static string GetLocalAppData()
+ {
+ return Environment.GetEnvironmentVariable("LOCALAPPDATA")?.Replace("\\", "/");
+ }
+#endif
+
+ static string GetLongestCommonPrefix(List paths)
+ {
+ var baseLength = paths.First().Length;
+ for (var pathIndex = 1; pathIndex < paths.Count; pathIndex++)
+ {
+ baseLength = Math.Min(baseLength, paths[pathIndex].Length);
+ for (var i = 0; i < baseLength; i++)
+ {
+ if (paths[pathIndex][i] == paths[0][i]) continue;
+
+ baseLength = i;
+ break;
+ }
+ }
+
+ return paths[0].Substring(0, baseLength);
+ }
+
+ static bool VSCodeExists(string path)
+ {
+#if UNITY_EDITOR_OSX
+ return System.IO.Directory.Exists(path);
+#else
+ return new FileInfo(path).Exists;
+#endif
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs.meta
new file mode 100644
index 00000000..cbeca1b7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 380f7372e785c7d408552e2c760d269d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs
new file mode 100644
index 00000000..7efc69fb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs
@@ -0,0 +1,280 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Diagnostics;
+using UnityEditor;
+using UnityEngine;
+using Unity.CodeEditor;
+
+namespace VSCodeEditor
+{
+ [InitializeOnLoad]
+ public class VSCodeScriptEditor : IExternalCodeEditor
+ {
+ const string vscode_argument = "vscode_arguments";
+ const string vscode_extension = "vscode_userExtensions";
+ static readonly GUIContent k_ResetArguments = EditorGUIUtility.TrTextContent("Reset argument");
+ string m_Arguments;
+
+ IDiscovery m_Discoverability;
+ IGenerator m_ProjectGeneration;
+
+ static readonly string[] k_SupportedFileNames = { "code.exe", "visualstudiocode.app", "visualstudiocode-insiders.app", "vscode.app", "code.app", "code.cmd", "code-insiders.cmd", "code", "com.visualstudio.code" };
+
+ static bool IsOSX => Application.platform == RuntimePlatform.OSXEditor;
+
+ static string DefaultApp => EditorPrefs.GetString("kScriptsDefaultApp");
+
+ static string DefaultArgument { get; } = "\"$(ProjectPath)\" -g \"$(File)\":$(Line):$(Column)";
+
+ string Arguments
+ {
+ get => m_Arguments ?? (m_Arguments = EditorPrefs.GetString(vscode_argument, DefaultArgument));
+ set
+ {
+ m_Arguments = value;
+ EditorPrefs.SetString(vscode_argument, value);
+ }
+ }
+
+ static string[] defaultExtensions
+ {
+ get
+ {
+ var customExtensions = new[] { "json", "asmdef", "log" };
+ return EditorSettings.projectGenerationBuiltinExtensions
+ .Concat(EditorSettings.projectGenerationUserExtensions)
+ .Concat(customExtensions)
+ .Distinct().ToArray();
+ }
+ }
+
+ static string[] HandledExtensions
+ {
+ get
+ {
+ return HandledExtensionsString
+ .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
+ .Select(s => s.TrimStart('.', '*'))
+ .ToArray();
+ }
+ }
+
+ static string HandledExtensionsString
+ {
+ get => EditorPrefs.GetString(vscode_extension, string.Join(";", defaultExtensions));
+ set => EditorPrefs.SetString(vscode_extension, value);
+ }
+
+ public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation)
+ {
+ var lowerCasePath = editorPath.ToLower();
+ var filename = Path.GetFileName(lowerCasePath).Replace(" ", "");
+ var installations = Installations;
+ if (!k_SupportedFileNames.Contains(filename))
+ {
+ installation = default;
+ return false;
+ }
+
+ if (!installations.Any())
+ {
+ installation = new CodeEditor.Installation
+ {
+ Name = "Visual Studio Code",
+ Path = editorPath
+ };
+ }
+ else
+ {
+ try
+ {
+ installation = installations.First(inst => inst.Path == editorPath);
+ }
+ catch (InvalidOperationException)
+ {
+ installation = new CodeEditor.Installation
+ {
+ Name = "Visual Studio Code",
+ Path = editorPath
+ };
+ }
+ }
+
+ return true;
+ }
+
+ public void OnGUI()
+ {
+ Arguments = EditorGUILayout.TextField("External Script Editor Args", Arguments);
+ if (GUILayout.Button(k_ResetArguments, GUILayout.Width(120)))
+ {
+ Arguments = DefaultArgument;
+ }
+
+ EditorGUILayout.LabelField("Generate .csproj files for:");
+ EditorGUI.indentLevel++;
+ SettingsButton(ProjectGenerationFlag.Embedded, "Embedded packages", "");
+ SettingsButton(ProjectGenerationFlag.Local, "Local packages", "");
+ SettingsButton(ProjectGenerationFlag.Registry, "Registry packages", "");
+ SettingsButton(ProjectGenerationFlag.Git, "Git packages", "");
+ SettingsButton(ProjectGenerationFlag.BuiltIn, "Built-in packages", "");
+#if UNITY_2019_3_OR_NEWER
+ SettingsButton(ProjectGenerationFlag.LocalTarBall, "Local tarball", "");
+#endif
+ SettingsButton(ProjectGenerationFlag.Unknown, "Packages from unknown sources", "");
+ RegenerateProjectFiles();
+ EditorGUI.indentLevel--;
+
+ HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString);
+ }
+
+ void RegenerateProjectFiles()
+ {
+ var rect = EditorGUI.IndentedRect(EditorGUILayout.GetControlRect(new GUILayoutOption[] { }));
+ rect.width = 252;
+ if (GUI.Button(rect, "Regenerate project files"))
+ {
+ m_ProjectGeneration.Sync();
+ }
+ }
+
+ void SettingsButton(ProjectGenerationFlag preference, string guiMessage, string toolTip)
+ {
+ var prevValue = m_ProjectGeneration.AssemblyNameProvider.ProjectGenerationFlag.HasFlag(preference);
+ var newValue = EditorGUILayout.Toggle(new GUIContent(guiMessage, toolTip), prevValue);
+ if (newValue != prevValue)
+ {
+ m_ProjectGeneration.AssemblyNameProvider.ToggleProjectGeneration(preference);
+ }
+ }
+
+ public void CreateIfDoesntExist()
+ {
+ if (!m_ProjectGeneration.SolutionExists())
+ {
+ m_ProjectGeneration.Sync();
+ }
+ }
+
+ public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles, string[] importedFiles)
+ {
+ m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles).ToList(), importedFiles);
+ }
+
+ public void SyncAll()
+ {
+ AssetDatabase.Refresh();
+ m_ProjectGeneration.Sync();
+ }
+
+ public bool OpenProject(string path, int line, int column)
+ {
+ if (path != "" && (!SupportsExtension(path) || !File.Exists(path))) // Assets - Open C# Project passes empty path here
+ {
+ return false;
+ }
+
+ if (line == -1)
+ line = 1;
+ if (column == -1)
+ column = 0;
+
+ string arguments;
+ if (Arguments != DefaultArgument)
+ {
+ arguments = m_ProjectGeneration.ProjectDirectory != path
+ ? CodeEditor.ParseArgument(Arguments, path, line, column)
+ : m_ProjectGeneration.ProjectDirectory;
+ }
+ else
+ {
+ arguments = $@"""{m_ProjectGeneration.ProjectDirectory}""";
+ if (m_ProjectGeneration.ProjectDirectory != path && path.Length != 0)
+ {
+ arguments += $@" -g ""{path}"":{line}:{column}";
+ }
+ }
+
+ if (IsOSX)
+ {
+ return OpenOSX(arguments);
+ }
+
+ var app = DefaultApp;
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = app,
+ Arguments = arguments,
+ WindowStyle = app.EndsWith(".cmd", StringComparison.OrdinalIgnoreCase) ? ProcessWindowStyle.Hidden : ProcessWindowStyle.Normal,
+ CreateNoWindow = true,
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+ return true;
+ }
+
+ static bool OpenOSX(string arguments)
+ {
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "open",
+ Arguments = $"-n \"{DefaultApp}\" --args {arguments}",
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+ return true;
+ }
+
+ static bool SupportsExtension(string path)
+ {
+ var extension = Path.GetExtension(path);
+ if (string.IsNullOrEmpty(extension))
+ return false;
+ return HandledExtensions.Contains(extension.TrimStart('.'));
+ }
+
+ public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback();
+
+ public VSCodeScriptEditor(IDiscovery discovery, IGenerator projectGeneration)
+ {
+ m_Discoverability = discovery;
+ m_ProjectGeneration = projectGeneration;
+ }
+
+ static VSCodeScriptEditor()
+ {
+ var editor = new VSCodeScriptEditor(new VSCodeDiscovery(), new ProjectGeneration(Directory.GetParent(Application.dataPath).FullName));
+ CodeEditor.Register(editor);
+
+ if (IsVSCodeInstallation(CodeEditor.CurrentEditorInstallation))
+ {
+ editor.CreateIfDoesntExist();
+ }
+ }
+
+ static bool IsVSCodeInstallation(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return false;
+ }
+
+ var lowerCasePath = path.ToLower();
+ var filename = Path
+ .GetFileName(lowerCasePath.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar))
+ .Replace(" ", "");
+ return k_SupportedFileNames.Contains(filename);
+ }
+
+ public void Initialize(string editorInstallationPath) { }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs.meta
new file mode 100644
index 00000000..a0aa5a48
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ac3f13489022aa34d861a0320a6917b9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md
new file mode 100644
index 00000000..eb18dfb7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Unity Technologies
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md.meta
new file mode 100644
index 00000000..20c91bd9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c9aabac5924106d4790d7b3a924ca34d
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json
new file mode 100644
index 00000000..6f6f1c14
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "com.unity.ide.vscode",
+ "displayName": "Visual Studio Code Editor",
+ "description": "Code editor integration for supporting Visual Studio Code as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.",
+ "version": "1.2.3",
+ "unity": "2019.2",
+ "unityRelease": "0a12",
+ "relatedPackages": {
+ "com.unity.ide.vscode.tests": "1.2.3"
+ },
+ "upmCi": {
+ "footprint": "ab99793db10bad3c377fc6971b0b21989002c495"
+ },
+ "repository": {
+ "url": "https://github.cds.internal.unity3d.com/unity/com.unity.ide.vscode.git",
+ "type": "git",
+ "revision": "547f63839bdc87e0aed2c9e0d84f8f6336a83ea3"
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json.meta b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json.meta
new file mode 100644
index 00000000..e5597112
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ffc6271f08270b64ca0aae9c49235d81
+PackageManifestImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CHANGELOG.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CHANGELOG.md
new file mode 100644
index 00000000..dd790dd6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CHANGELOG.md
@@ -0,0 +1,187 @@
+# Changelog
+## [1.1.22] - 2021-01-21
+- Fixed issue where test result of an explicit test was set to skipped in case it was passing and running from command line with testfilter set to the explicit test (DS-1236).
+- Fixed an issue where tests located in assemblies that did not directly reference any test assemblies were not included (DSTR-30).
+- Fixed an issue where UnitySetup methods were incorrectly being rerun when entering playmode, rather than being skipped (DSTR-68).
+- Internal: Remove ##utp message AssemblyCompilationErrors (DS-1277)
+- Fixed issue where if the timeout was exceeded in SetUp the timeout exception was not thrown(DSTR-21).
+- Removed ability to `Enable playmode tests for all assemblies` from the TestRunner UI, since it is a deprecated behavior. It enforces to use of assembly definition files (DSTR-45).
+- Fixed typo in `LogAssert.cs` documentation.
+
+## [1.1.21] - 2021-01-14
+- Fixed issue where test result of an explicit test was set to skipped in case it was passing and running from command line with testfilter set to the explicit test (DS-1236).
+- Fixed an issue where tests located in assemblies that did not directly reference any test assemblies were not included (DSTR-30).
+- Fixed an issue where UnitySetup methods were incorrectly being rerun when entering playmode, rather than being skipped (DSTR-68).
+- Internal: Remove ##utp message AssemblyCompilationErrors (DS-1277)
+- Fixed issue where if the timeout was exceeded in SetUp the timeout exception was not thrown(DSTR-21).
+- Removed ability to `Enable playmode tests for all assemblies` from the TestRunner UI, since it is a deprecated behavior. It enforces to use of assembly definition files (DSTR-45).
+
+## [1.1.20] - 2020-12-04
+- The logscope is now available in OneTimeTearDown.
+- Fixed an issue where failing tests would not result in the correct exit code if a domain reload happens after the test has run (DS-1304).
+- If a player build fails, the test specific build settings should be cleaned up and the original values restored as intended (DS-1001).
+- Added better error message when using TestRunCallbackAttribute and the implementation is stripped away (DS-454).
+- Fixed an issue where the test results xml would have a zero end-time for tests executed before a domain reload (DSTR-63).
+- Fixed OpenSource in case of a Test in a nested class (DSTR-6)
+- UnityTests with a domain reload now works correctly in combination with Retry and Repeat attributes (DS-428).
+- Fixed OpenSource in case of Tests located inside a package (DS-432)
+
+## [1.1.19] - 2020-11-17
+- Command line runs with an inconclusive test result now exit with exit code 2 (case DS-951).
+- Fixed timeout during UnitySetUp which caoused test to pass instead of failing due to wrong time format.
+- Timeout exeption thrown when timeout time is exeded in the UnitySetup when using `WaitForSeconds(n)`.
+- Updating `com.unity.ext.nunit` version
+- Method marked with UnityTest that are not returning IEnumerator is now giving a proper error (DS-1059).
+
+## [1.1.18] - 2020-10-07
+- Fixed issue of timeout during UnitySetUp which wasn't detected and allowed the test to pass instead of failing (case DSTR-21)
+
+## [1.1.17] - 2020-10-05
+- Fixed an issue where the WaitForDomainReload yield instruction would sometimes let the test continue for one frame before the domain reload.
+- Added support for negation in filters using !. E.g. !CategoryToExclude.
+- Fixed an issue where if the first test enters PlayMode from UnitySetup then the test body will not run on consecutive runs (case 1260901).
+- Clear Results button clears the test results in the GUI (DSTR-16)
+- Improved UI in Test Runner window, added new options:
+ - Run Selected Tests in player
+ - Build/Export project with all tests in player
+ - Build/Export project with selected tests in player
+- Fixed issue on loading EditMode or Playmode test tree in the wrong tab when switching between tabs when TestRunner is loading (DS-865)
+
+## [1.1.16] - 2020-07-09
+- Follow up on fix when UTF picks up on outdated compilation errors
+
+## [1.1.15] - 2020-07-02
+- Fixed an issue where an exception is thrown on getting the enumerator of a UnityTest would result in stopping the test run instead of failing it (case 1212000).
+- Including a trailing semi-colon in a testName filter no longer results in all tests being run (case 1171200).
+- Fixed and issue when Unity Test Framework exits editor on an outdated script compilation error (during api updates)
+
+## [1.1.14] - 2020-04-03
+- Added the 'assemblyNames' command line argument for filtering on the assembly level.
+- The dll and project level of the tree view should now correctly show the results when running tests in a player (case 1197026).
+- Optimize usage of player connection when transfering test results (case 1229200).
+- Ignore internal test framework tests assertions (case 1206961).
+
+## [1.1.13] - 2020-03-16
+- Fixed an issue where a combination of Entering / Exiting playmode and recompiling scripts would result in the test run repeating (case 1213958).
+- Fixed a regression from 1.1.12 where prefabs left in the scene would be cleaned up to aggressively.
+- Fixed Test execution timed out. No activity received from the player in 600 seconds error when player is not supposed to start (case 1225147)
+
+## [1.1.12] - 2020-03-02
+- Now 'Open error line' for a failed UTF test does not throw exceptions for corrupted testable pdb in Editor release mode (case 1118259)
+- Fixed an issue where running a test fixture would also run other fixtures with the same full name (namespace plus classname) in other assemblies (case 1197385).
+- Running tests with the same full name, with a domain reload inbetween, will no longer fail to initialize the fixture of the second class (case 1205240).
+- Running a playmode tests with "Maximize on Play" will now correctly show the result of the tests in the test runner window (case 1014908).
+- Fixed an issue where leaving a game object in a scene with a DontSaveInEditor hideFlags would result in an error on cleanup (case 1136883).
+- Now ITestPlayerBuildModifier.ModifyOptions is called as expected when running tests on a device (case 1213845)
+
+## [1.1.11] - 2020-01-16
+- Fixed test runner dlls got included into player build (case 1211624)
+- Passing a non-full-path of XML file for -testResults in Unity Batchmode issue resolved, now passing "result.xml" creates the result file in the project file directory (case 959078)
+- Respect Script Debugging build setting when running tests
+
+## [1.1.10] - 2019-12-19
+- Introduced PostSuccessfulLaunchAction callback
+- Fixed an issue where canceling a UnityTest while it was running would incorrectly mark it as passed instead of canceled.
+- Added command line argument for running tests synchronously.
+- The test search bar now handles null values correctly.
+- The test output pane now retains its size on domain reloads.
+
+## [1.1.9] - 2019-12-12
+- Rolled back refactoring to the test run system, as it caused issues in some corner cases.
+
+## [1.1.8] - 2019-11-15
+- Ensured that a resumed test run is continued instantly.
+
+## [1.1.7] - 2019-11-14
+- Fixed an issue with test runs after domain reload.
+
+## [1.1.6] - 2019-11-12
+- Building a player for test will no longer look in unrelated assemblies for relevant attributes.
+
+## [1.1.5] - 2019-10-23
+- Fixed a regression to synchronous runs introduced in 1.1.4.
+
+## [1.1.4] - 2019-10-15
+- Running tests in batch mode now correctly returns error code 3 (RunError) when a timeout or a build error occurs.
+- Fixed an issue where a test run in a player would time out, if the player takes longer than 10 minutes to run.
+- Added command line argument and api setting for specifying custom heartbeat timeout for running on players.
+
+## [1.1.3] - 2019-09-23
+- Fixed a regression where tests in a player would report a timeout after a test run is finished.
+- Made it possible for the ui to change its test items when the test tree changes without script compilation.
+- Added synchronous runs as an option to the TestRunnerApi.
+
+## [1.1.2] - 2019-09-11
+- Fixed an issue where Run Selected would run all tests in the category, if a category filter was selected, regardless of what tests were selected.
+- Unsupported attributes used in UnityTests now give an explicit error.
+- Added support for the Repeat and Retry attributes in UnityTests (case 1131940).
+- Tests with a explicit timeout higher than 10 minutes, no longer times out after running longer than 10 minutes when running from command line (case 1125991).
+- Fixed a performance regression in the test runner api result reporting, introduced in 2018.3 (case 1109865).
+- Fixed an issue where parameterized test fixtures would not run if selected in the test tree (case 1092244).
+- Pressing Clear Results now also correctly clears the counters on the test list (case 1181763).
+- Prebuild setup now handles errors logged with Debug.LogError and stops the run if any is logged (case 1115240). It now also supports LogAssert.Expect.
+
+## [1.1.1] - 2019-08-07
+- Tests retrieved as a test list with the test runner api incorrectly showed both mode as their TestMode.
+- Fixed a compatibility issue with running tests from rider.
+
+## [1.1.0] - 2019-07-30
+- Introduced the TestRunnerApi for running tests programmatically from elsewhere inside the Editor.
+- Introduced yield instructions for recompiling scripts and awaiting a domain reload in Edit Mode tests.
+- Added a button to the Test Runner UI for clearing the results.
+
+## [1.0.18] - 2019-07-15
+- Included new full documentation of the test framework.
+
+## [1.0.17] - 2019-07-11
+- Fixed an issue where the Test Runner window wouldn’t frame selected items after search filter is cleared.
+- Fixed a regression where playmode test application on the IOS platform would not quit after the tests are done.
+
+## [1.0.16] - 2019-06-20
+- Fixed an issue where the Test Runner window popped out if it was docked, or if something else was docked next to it, when re-opened (case 1158961)
+- Fixed a regression where the running standalone playmode tests from the ui would result in an error.
+
+## [1.0.15] - 2019-06-18
+- Added new `[TestMustExpectAllLogs]` attribute, which automatically does `LogAssert.NoUnexpectedReceived()` at the end of affected tests. See docs for this attribute for more info on usage.
+- Fixed a regression where no tests would be run if multiple filters are specified. E.g. selecting both a whole assembly and an individual test in the ui.
+- Fixed an issue where performing `Run Selected` on a selected assembly would run all assemblies.
+- Introduced the capability to do a split build and run, when running playmode tests on standalone devices.
+- Fixed an error in ConditionalIgnore, if the condition were not set.
+
+## [1.0.14] - 2019-05-27
+- Fixed issue preventing scene creation in IPrebuildSetup.Setup callback when running standalone playmode tests.
+- Fixed an issue where test assemblies would sometimes not be ordered alphabetically.
+- Added module references to the package for the required modules: imgui and jsonserialize.
+- Added a ConditionalIgnore attribute to help ignoring tests only under specific conditions.
+- Fixed a typo in the player test window (case 1148671).
+
+## [1.0.13] - 2019-05-07
+- Fixed a regression where results from the player would no longer update correctly in the UI (case 1151147).
+
+## [1.0.12] - 2019-04-16
+- Added specific unity release to the package information.
+
+## [1.0.11] - 2019-04-10
+- Fixed a regression from 1.0.10 where test-started events were triggered multiple times after a domain reload.
+
+## [1.0.10] - 2019-04-08
+- Fixed an issue where test-started events would not be fired correctly after a test performing a domain reload (case 1141530).
+- The UI should correctly run tests inside a nested class, when that class is selected.
+- All actions should now correctly display a prefix when reporting test result. E.g. "TearDown :".
+- Errors logged with Debug.LogError in TearDowns now append the error, rather than overwriting the existing result (case 1114306).
+- Incorrect implementations of IWrapTestMethod and IWrapSetUpTearDown now gives a meaningful error.
+- Fixed a regression where the Test Framework would run TearDown in a base class before the inheriting class (case 1142553).
+- Fixed a regression introduced in 1.0.9 where tests with the Explicit attribute could no longer be executed.
+
+## [1.0.9] - 2019-03-27
+- Fixed an issue where a corrupt instance of the test runner window would block for a new being opened.
+- Added the required modules to the list of package requirements.
+- Fixed an issue where errors would happen if the test filter ui was clicked before the ui is done loading.
+- Fix selecting items with duplicate names in test hierarchy of Test Runner window (case 987587).
+- Fixed RecompileScripts instruction which we use in tests (case 1128994).
+- Fixed an issue where using multiple filters on tests would sometimes give an incorrect result.
+
+## [1.0.7] - 2019-03-12
+### This is the first release of *Unity Package com.unity.test-framework*.
+
+- Migrated the test-framework from the current extension in unity.
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CHANGELOG.md.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CHANGELOG.md.meta
new file mode 100644
index 00000000..4fca79ed
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d691174143fd3774ba63d7c493633b99
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CONTRIBUTING.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CONTRIBUTING.md
new file mode 100644
index 00000000..9f299b10
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CONTRIBUTING.md
@@ -0,0 +1,9 @@
+# Contributing
+
+## If you are interested in contributing, here are some ground rules:
+* ... Define guidelines & rules for what contributors need to know to successfully make Pull requests against your repo ...
+
+## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement)
+By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions.
+
+## Once you have a change ready following these ground rules. Simply make a pull request
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CONTRIBUTING.md.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CONTRIBUTING.md.meta
new file mode 100644
index 00000000..39e850ae
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/CONTRIBUTING.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 57d2ac5c7d5786e499d4794973fe0d4e
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/TableOfContents.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/TableOfContents.md
new file mode 100644
index 00000000..3155c1fc
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/TableOfContents.md
@@ -0,0 +1,66 @@
+* [Unity Test Framework overview](./index.md)
+* [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md)
+* [Getting started with UTF](./getting-started.md)
+ * [How to create a new test assembly](./workflow-create-test-assembly.md)
+ * [How to create a test](./workflow-create-test.md)
+ * [How to run a test](./workflow-run-test.md)
+ * [How to create a Play Mode test](./workflow-create-playmode-test.md)
+ * [How to run a Play Mode test as standalone](./workflow-run-playmode-test-standalone.md)
+* [Resources](./resources.md)
+* [Extending UTF](./extending.md)
+ * [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run-for-player-mode-tests)
+ * [How to run tests programmatically](./extension-run-tests.md)
+ * [How to get test results](./extension-get-test-results.md)
+ * [How to retrieve the list of tests](./extension-retrieve-test-list.md)
+* [Reference](./manual.md#reference)
+ * [Running tests from the command-line](./reference-command-line.md)
+ * [UnityTest attribute](./reference-attribute-unitytest.md)
+ * [Setup and cleanup at build time](./reference-setup-and-cleanup.md)
+ * [IPrebuildSetup](./reference-setup-and-cleanup.md#iprebuildsetup)
+ * [IPostBuildCleanup](./reference-setup-and-cleanup.md#ipostbuildcleanup)
+ * [Actions outside of tests](./reference-actions-outside-tests.md)
+ * [Action execution order](./reference-actions-outside-tests.md#action-execution-order)
+ * [UnitySetUp and UnityTearDown](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+ * [OuterUnityTestAction](./reference-actions-outside-tests.md#outerunitytestaction)
+ * [Domain Reloads](./reference-actions-outside-tests.md#domain-reloads)
+ * [Custom attributes](./reference-custom-attributes.md)
+ * [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md)
+ * [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup)
+ * [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup)
+ * [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md)
+ * [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md)
+ * [TestRunCallback attribute](./reference-attribute-testruncallback.md)
+ * [UnityPlatform attribute](./reference-attribute-unityplatform.md)
+ * [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+ * [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+ * [UnityTest attribute](./reference-attribute-unitytest.md)
+ * [Custom equality comparers](./reference-custom-equality-comparers.md)
+ * [ColorEqualityComparer](./reference-comparer-color.md)
+ * [FloatEqualityComparer](./reference-comparer-float.md)
+ * [QuaternionEqualityComparer](./reference-comparer-quaternion.md)
+ * [Vector2EqualityComparer](./reference-comparer-vector2.md)
+ * [Vector3EqualityComparer](./reference-comparer-vector3.md)
+ * [Vector4EqualityComparer](./reference-comparer-vector4.md)
+ * [Custom equality comparers with equals operator](./reference-comparer-equals.md)
+ * [Test Utils](./reference-test-utils.md)
+ * [Custom yield instructions](./reference-custom-yield-instructions.md)
+ * [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md#IEditModeTestYieldInstruction)
+ * [EnterPlayMode](./reference-custom-yield-instructions.md#enterplaymode)
+ * [ExitPlayMode](./reference-custom-yield-instructions.md#exitplaymode)
+ * [RecompileScripts](./reference-recompile-scripts.md)
+ * [WaitForDomainReload](./reference-wait-for-domain-reload.md)
+ * [Custom assertion](./reference-custom-assertion.md)
+ * [LogAssert](./reference-custom-assertion.md#logassert)
+ * [Custom constraints](./reference-custom-constraints.md)
+ * [Is](./reference-custom-constraints.md#is)
+ * [Parameterized tests](./reference-tests-parameterized.md)
+ * [MonoBehaviour tests](./reference-tests-monobehaviour.md)
+ * [MonoBehaviourTest<T>](./reference-tests-monobehaviour.md#monobehaviourtestt)
+ * [IMonoBehaviourTest](./reference-tests-monobehaviour.md#imonobehaviourtest)
+ * [TestRunnerApi](./reference-test-runner-api.md)
+ * [ExecutionSettings](./reference-execution-settings.md)
+ * [Filter](./reference-filter.md)
+ * [ITestRunSettings](./reference-itest-run-settings.md)
+ * [ICallbacks](./reference-icallbacks.md)
+ * [IErrorCallbacks](./reference-ierror-callbacks.md)
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/edit-mode-vs-play-mode-tests.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/edit-mode-vs-play-mode-tests.md
new file mode 100644
index 00000000..54596396
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/edit-mode-vs-play-mode-tests.md
@@ -0,0 +1,53 @@
+# Edit Mode vs. Play Mode tests
+
+Let’s clarify a bit what Play Mode and Edit Mode test means from the Unity Test Framework perspective:
+
+## Edit Mode tests
+
+**Edit Mode** tests (also known as Editor tests) are only run in the Unity Editor and have access to the Editor code in addition to the game code.
+
+With Edit Mode tests it is possible to test any of your [Editor extensions](https://docs.unity3d.com/Manual/ExtendingTheEditor.html) using the [UnityTest](./reference-attribute-unitytest.md) attribute. For Edit Mode tests, your test code runs in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop.
+
+> **Note**: You can also control entering and exiting Play Mode from your Edit Mode test. This allow your test to make changes before entering Play Mode.
+
+Edit Mode tests should meet one of the following conditions:
+
+* They should have an [assembly definition](./workflow-create-test-assembly.md) with reference to *nunit.framework.dll* and has only the Editor as a target platform:
+
+```assembly
+ "includePlatforms": [
+ "Editor"
+ ],
+```
+
+* Legacy condition: put tests in the project’s [Editor](https://docs.unity3d.com/Manual/SpecialFolders.html) folder.
+
+## Play Mode tests
+
+You can run **Play Mode** tests as a [standalone in a Player](./workflow-run-playmode-test-standalone.md) or inside the Editor. Play Mode tests allow you to exercise your game code, as the tests run as [coroutines](https://docs.unity3d.com/ScriptReference/Coroutine.html) if marked with the `UnityTest` attribute.
+
+Play Mode tests should correspond to the following conditions:
+
+* Have an [assembly definition](./workflow-create-test-assembly.md) with reference to *nunit.framework.dll*.
+* Have the test scripts located in a folder with the .asmdef file.
+* The test assembly should reference an assembly within the code that you need to test.
+
+```assembly
+ "references": [
+ "NewAssembly"
+ ],
+ "optionalUnityReferences": [
+ "TestAssemblies"
+ ],
+ "includePlatforms": [],
+```
+
+## Recommendations
+
+### Attributes
+
+Use the [NUnit](http://www.nunit.org/) `Test` attribute instead of the `UnityTest` attribute, unless you need to [yield special instructions](./reference-custom-yield-instructions.md), in Edit Mode, or if you need to skip a frame or wait for a certain amount of time in Play Mode.
+
+### References
+
+It is possible for your Test Assemblies to reference the test tools in `UnityEngine.TestRunner` and `UnityEditor.TestRunner`. The latter is only available in Edit Mode. You can specify these references in the `Assembly Definition References` on the Assembly Definition.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extending.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extending.md
new file mode 100644
index 00000000..045c94a8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extending.md
@@ -0,0 +1,10 @@
+# Extending Unity Test Framework
+It is possible to extend the Unity Test Framework (UTF) in many ways, for custom workflows for your projects and for other packages to build on top of UTF.
+
+These extensions are a supplement to the ones already offered by [NUnit](https://github.com/nunit/docs/wiki/Framework-Extensibility).
+
+Some workflows for extending UTF include:
+* [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run-for-player-mode-tests)
+* [How to run tests programmatically](./extension-run-tests.md)
+* [How to get test results](./extension-get-test-results.md)
+* [How to retrieve the list of tests](./extension-retrieve-test-list.md)
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-get-test-results.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-get-test-results.md
new file mode 100644
index 00000000..8b71d7ed
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-get-test-results.md
@@ -0,0 +1,45 @@
+# How to get test results
+You can receive callbacks when the active test run, or individual tests, starts and finishes. You can register callbacks by invoking `RegisterCallbacks` on the [TestRunnerApi](./reference-test-runner-api.md) with an instance of a class that implements [ICallbacks](./reference-icallbacks.md). There are four `ICallbacks` methods for the start and finish of both the whole run and each level of the test tree.
+
+## Example
+An example of how listeners can be set up:
+
+> **Note**: Listeners receive callbacks from all test runs, regardless of the registered `TestRunnerApi` for that instance.
+
+``` C#
+public void SetupListeners()
+{
+ var api = ScriptableObject.CreateInstance();
+ api.RegisterCallbacks(new MyCallbacks());
+}
+
+private class MyCallbacks : ICallbacks
+{
+ public void RunStarted(ITestAdaptor testsToRun)
+ {
+
+ }
+
+ public void RunFinished(ITestResultAdaptor result)
+ {
+
+ }
+
+ public void TestStarted(ITestAdaptor test)
+ {
+
+ }
+
+ public void TestFinished(ITestResultAdaptor result)
+ {
+ if (!result.HasChildren && result.ResultState != "Success")
+ {
+ Debug.Log(string.Format("Test {0} {1}", result.Test.Name, result.ResultState));
+ }
+ }
+}
+```
+
+> **Note**: The registered callbacks are not persisted on domain reloads. So it is necessary to re-register the callback after a domain reloads, usually with [InitializeOnLoad](https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html).
+
+It is possible to provide a `priority` as an integer as the second argument when registering a callback. This influences the invocation order of different callbacks. The default value is zero. It is also possible to provide `RegisterCallbacks` with a class instance that implements [IErrorCallbacks](./reference-ierror-callbacks.md) that is an extended version of `ICallbacks`. `IErrorCallbacks` also has a callback method for `OnError` that invokes if the run fails to start, for example, due to compilation errors or if an [IPrebuildSetup](./reference-setup-and-cleanup.md) throws an exception.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-retrieve-test-list.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-retrieve-test-list.md
new file mode 100644
index 00000000..dedc7fab
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-retrieve-test-list.md
@@ -0,0 +1,13 @@
+# How to retrieve the list of tests
+It is possible to use the [TestRunnerApi](./reference-test-runner-api.md) to retrieve the test tree for a given test mode (**Edit Mode** or **Play Mode**). You can retrieve the test tree by invoking `RetrieveTestList` with the desired `TestMode` and a callback action, with an [ITestAdaptor](./reference-itest-adaptor.md) representing the test tree.
+
+## Example
+The following example retrieves the test tree for Edit Mode tests and prints the number of total test cases:
+``` C#
+var api = ScriptableObject.CreateInstance();
+api.RetrieveTestList(TestMode.EditMode, (testRoot) =>
+{
+ Debug.Log(string.Format("Tree contains {0} tests.", testRoot.TestCaseCount));
+});
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-run-tests.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-run-tests.md
new file mode 100644
index 00000000..60ff3dc7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/extension-run-tests.md
@@ -0,0 +1,72 @@
+# How to run tests programmatically
+## Filters
+
+Run tests by calling `Execute` on the [TestRunnerApi](./reference-test-runner-api.md), and provide some execution settings that consists of a [Filter](./reference-filter.md). The `Filter` specifies what tests to run.
+
+### Example
+
+The following is an example of how to run all **Play Mode** tests in a project:
+
+``` C#
+var testRunnerApi = ScriptableObject.CreateInstance();
+var filter = new Filter()
+{
+ testMode = TestMode.PlayMode
+};
+testRunnerApi.Execute(new ExecutionSettings(filter));
+```
+## Multiple filter values
+
+It is possible to specify a more specific filter by filling out the fields on the `Filter` class in more detail.
+
+Many of the fields allow for multiple values. The runner tries to match tests against at least one of the values provided and then runs any tests that match.
+
+### Example
+
+In this example, the API runs tests with full names that fit either of the two names provided:
+
+``` C#
+var api = ScriptableObject.CreateInstance();
+api.Execute(new ExecutionSettings(new Filter()
+{
+ testNames = new[] {"MyTestClass.NameOfMyTest", "SpecificTestFixture.NameOfAnotherTest"}
+}));
+```
+## Multiple filter fields
+
+If using multiple different fields on the filter, then it matches against tests that fulfill all the different fields.
+
+### Example
+
+In this example, it runs any test that fits either of the two test names, and that also belongs to a test assembly that fits the given name.
+
+``` C#
+var api = ScriptableObject.CreateInstance();
+api.Execute(new ExecutionSettings(new Filter()
+{
+ assemblyNames = new [] {"MyTestAssembly"},
+ testNames = new [] {"MyTestClass.NameOfMyTest", "MyTestClass.AnotherNameOfATest"}
+}));
+```
+## Multiple constructor filters
+
+The execution settings take one or more filters in its constructor. If there is no filter provided, then it runs all **Edit Mode** tests by default. If there are multiple filters provided, then a test runs if it matches any of the filters.
+
+### Example
+
+In this example, it runs any tests that are either in the assembly named `MyTestAssembly` or if the full name of the test matches either of the two provided test names:
+
+``` C#
+var api = ScriptableObject.CreateInstance();
+api.Execute(new ExecutionSettings(
+ new Filter()
+ {
+ assemblyNames = new[] {"MyTestAssembly"},
+ },
+ new Filter()
+ {
+ testNames = new[] {"MyTestClass.NameOfMyTest", "MyTestClass.AnotherNameOfATest"}
+ }
+));
+```
+> **Note**: Specifying different test modes or platforms in each `Filter` is not currently supported. The test mode and platform is from the first `Filter` only and defaults to Edit Mode, if not supplied.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/getting-started.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/getting-started.md
new file mode 100644
index 00000000..a8051f26
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/getting-started.md
@@ -0,0 +1,18 @@
+# Getting started with Unity Test Framework
+
+To access the Unity Test Framework (UTF) in the Unity Editor, open the **Test Runner** window; go to **Window** > **General** > **Test Runner**.
+
+![Unity Test Runner window](./images/test-runner-window.png)
+
+To get started with UTF, follow the workflows below:
+
+* [How to create a new test assembly](./workflow-create-test-assembly.md)
+* [How to create a test](./workflow-create-test.md)
+* [How to run a test](./workflow-run-test.md)
+* [How to create a Play Mode test](./workflow-create-playmode-test.md)
+* [How to run a Play Mode test as standalone](./workflow-run-playmode-test-standalone.md)
+
+
+
+For further information, see the [resources](./resources.md) and [reference](./manual.md#reference) sections.
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-create-test-script.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-create-test-script.png
new file mode 100644
index 00000000..fc9af556
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-create-test-script.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-run-test.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-run-test.png
new file mode 100644
index 00000000..df1b53c5
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-run-test.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-run-tests.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-run-tests.png
new file mode 100644
index 00000000..c890d815
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-run-tests.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-tab.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-tab.png
new file mode 100644
index 00000000..e1b00d7a
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/editmode-tab.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/import-settings.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/import-settings.png
new file mode 100644
index 00000000..6a34e924
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/import-settings.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/new-test-script.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/new-test-script.png
new file mode 100644
index 00000000..21de0810
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/new-test-script.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-enable-all.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-enable-all.png
new file mode 100644
index 00000000..961991ae
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-enable-all.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-results-standalone.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-results-standalone.png
new file mode 100644
index 00000000..de40c031
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-results-standalone.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-run-standalone.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-run-standalone.png
new file mode 100644
index 00000000..ded57927
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-run-standalone.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-tab.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-tab.png
new file mode 100644
index 00000000..9d315cb9
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/playmode-tab.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/test-runner-window.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/test-runner-window.png
new file mode 100644
index 00000000..f3023fb3
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/test-runner-window.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/test-templates.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/test-templates.png
new file mode 100644
index 00000000..753a1552
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/test-templates.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/tests-folder-assembly.png b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/tests-folder-assembly.png
new file mode 100644
index 00000000..4e63751b
Binary files /dev/null and b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/images/tests-folder-assembly.png differ
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/index.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/index.md
new file mode 100644
index 00000000..604a9163
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/index.md
@@ -0,0 +1,54 @@
+# About Unity Test Framework
+
+The Unity Test Framework (UTF) enables Unity users to test their code in both **Edit Mode** and **Play Mode**, and also on target platforms such as [Standalone](https://docs.unity3d.com/Manual/Standalone.html), Android, iOS, etc.
+
+This package provides a standard test framework for users of Unity and developers at Unity so that both benefit from the same features and can write tests the same way.
+
+UTF uses a Unity integration of NUnit library, which is an open-source unit testing library for .Net languages. For more information about NUnit, see the [official NUnit website](http://www.nunit.org/) and the [NUnit documentation on GitHub](https://github.com/nunit/docs/wiki/NUnit-Documentation).
+
+> **Note**: UTF is not a new concept or toolset; it is an adjusted and more descriptive naming for the toolset otherwise known as Unity Test Runner, which is now available as this package.
+
+# Installing Unity Test Framework
+
+To install this package, follow the instructions in the [Package Manager documentation](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@latest/index.html).
+
+> **Note**: Search for the Test Framework package. In Unity 2019.2 and higher, you may need to enable the package before use.
+
+# Using Unity Test Framework
+
+To learn how to use the Unity Test Framework package in your project, read the [manual](./manual.md).
+
+# Technical details
+
+## Requirements
+
+This version of the Unity Test Framework is compatible with the following versions of the Unity Editor:
+
+* 2019.2 and later.
+
+## Known limitations
+
+Unity Test Framework version 1.0.18 includes the following known limitations:
+
+* The `UnityTest` attribute does not support WebGL and WSA platforms.
+* The `UnityTest` attribute does not support [Parameterized tests](https://github.com/nunit/docs/wiki/Parameterized-Tests) (except for `ValueSource`).
+* The `UnityTest` attribute does not support the `NUnit` [Repeat](https://github.com/nunit/docs/wiki/Repeat-Attribute) attribute.
+* Nested test fixture cannot run from the Editor UI.
+* When using the `NUnit` [Retry](https://github.com/nunit/docs/wiki/Retry-Attribute) attribute in PlayMode tests, it throws `InvalidCastException`.
+
+## Package contents
+
+The following table indicates the root folders in the package where you can find useful resources:
+
+| Location | Description |
+| :----------------------------------------- | :------------------------------------------ |
+| _/com.unity.test-framework/Documentation~_ | Contains the documentation for the package. |
+
+## Document revision history
+
+| Date | Reason |
+| :----------- | :---------------------------------------------------- |
+| August 23, 2019 | Applied feedback to the documentation |
+| July 25, 2019 | Documentation updated to include features in version 1.1.0 |
+| July 11, 2019 | Documentation updated. Matches package version 1.0.18 |
+| May 27, 2019 | Documentation created. Matches package version 1.0.14 |
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/manual.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/manual.md
new file mode 100644
index 00000000..e50f7add
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/manual.md
@@ -0,0 +1,80 @@
+# Unity Test Framework manual
+
+This is the manual for the Unity Test Framework (UTF):
+
+## **Introduction**
+
+* [Unity Test Framework overview](./index.md)
+* [Edit Mode vs. Play Mode tests](edit-mode-vs-play-mode-tests.md)
+
+## **Getting started**
+
+* [Getting started with UTF](./getting-started.md)
+ * Workflows:
+ * [How to create a new test assembly](./workflow-create-test-assembly.md)
+ * [How to create a test](./workflow-create-test.md)
+ * [How to run a test](workflow-run-test.md)
+ * [How to create a Play Mode test](./workflow-create-playmode-test.md)
+ * [How to run a Play Mode test in player](./workflow-run-playmode-test-standalone.md)
+* [Resources](./resources.md)
+
+## Extending UTF
+
+* [Extending UTF](./extending.md)
+ * Workflows:
+ * [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run)
+ * [How to run tests programmatically](./extension-run-tests.md)
+ * [How to get test results](./extension-get-test-results.md)
+ * [How to retrieve the list of tests](./extension-retrieve-test-list.md)
+
+## Reference
+
+* [Running tests from the command-line](./reference-command-line.md)
+* [UnityTest attribute](./reference-attribute-unitytest.md)
+* [Setup and cleanup at build time](./reference-setup-and-cleanup.md)
+ * [IPrebuildSetup](./reference-setup-and-cleanup.md#iprebuildsetup)
+ * [IPostBuildCleanup](./reference-setup-and-cleanup.md#ipostbuildcleanup)
+* [Actions outside of tests](./reference-actions-outside-tests.md)
+ * [Action execution order](./reference-actions-outside-tests.md#action-execution-order)
+ * [UnitySetUp and UnityTearDown](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+ * [OuterUnityTestAction](./reference-actions-outside-tests.md#outerunitytestaction)
+ * [Domain Reloads](./reference-actions-outside-tests.md#domain-reloads)
+* [Custom attributes](./reference-custom-attributes.md)
+ * [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md)
+ * [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup)
+ * [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup)
+ * [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md)
+ * [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md)
+ * [TestRunCallback attribute](./reference-attribute-testruncallback.md)
+ * [UnityPlatform attribute](./reference-attribute-unityplatform.md)
+ * [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+ * [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+ * [UnityTest attribute](./reference-attribute-unitytest.md)
+* [Custom equality comparers](./reference-custom-equality-comparers.md)
+ * [ColorEqualityComparer](./reference-comparer-color.md)
+ * [FloatEqualityComparer](./reference-comparer-float.md)
+ * [QuaternionEqualityComparer](./reference-comparer-quaternion.md)
+ * [Vector2EqualityComparer](./reference-comparer-vector2.md)
+ * [Vector3EqualityComparer](./reference-comparer-vector3.md)
+ * [Vector4EqualityComparer](./reference-comparer-vector4.md)
+ * [Custom equality comparers with equals operator](./reference-comparer-equals.md)
+ * [Test Utils](./reference-test-utils.md)
+* [Custom yield instructions](./reference-custom-yield-instructions.md)
+ * [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md#IEditModeTestYieldInstruction)
+ * [EnterPlayMode](./reference-custom-yield-instructions.md#enterplaymode)
+ * [ExitPlayMode](./reference-custom-yield-instructions.md#exitplaymode)
+* [Custom assertion](./reference-custom-assertion.md)
+ * [LogAssert](./reference-custom-assertion.md#logassert)
+* [Custom constraints](./reference-custom-constraints.md)
+ * [Is](./reference-custom-constraints.md#is)
+* [Parameterized tests](./reference-tests-parameterized.md)
+* [MonoBehaviour tests](./reference-tests-monobehaviour.md)
+ * [MonoBehaviourTest](./reference-tests-monobehaviour.md#monobehaviourtestt)
+ * [IMonoBehaviourTest](./reference-tests-monobehaviour.md#imonobehaviourtest)
+
+* [TestRunnerApi](./reference-test-runner-api.md)
+ * [ExecutionSettings](./reference-execution-settings.md)
+ * [Filter](./reference-filter.md)
+ * [ITestRunSettings](./reference-itest-run-settings.md)
+ * [ICallbacks](./reference-icallbacks.md)
+ * [IErrorCallbacks](./reference-ierror-callbacks.md)
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-actions-outside-tests.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-actions-outside-tests.md
new file mode 100644
index 00000000..252e157b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-actions-outside-tests.md
@@ -0,0 +1,98 @@
+# Actions outside of tests
+
+When writing tests, it is possible to avoid duplication of code by using the [SetUp and TearDown](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) methods built into [NUnit](http://www.nunit.org/). The Unity Test Framework has extended these methods with extra functionality, which can yield commands and skip frames, in the same way as [UnityTest](./reference-attribute-unitytest.md).
+
+## Action execution order
+
+The actions related to a test run in the following order:
+
+* Attributes implementing [IApplyToContext](https://github.com/nunit/docs/wiki/IApplyToContext-Interface)
+* Any attribute implementing [OuterUnityTestAction](#outerunitytestaction) has its `BeforeTest` invoked
+* Tests with [UnitySetUp](#unitysetup-and-unityteardown) methods in their test class.
+* Attributes implementing [IWrapSetUpTearDown](https://github.com/nunit/docs/wiki/ICommandWrapper-Interface)
+* Any [SetUp](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) attributes
+* [Action attributes](https://nunit.org/docs/2.6/actionAttributes.html) have their `BeforeTest` method invoked
+* Attributes implementing of [IWrapTestMethod](https://github.com/nunit/docs/wiki/ICommandWrapper-Interface)
+* **The test itself runs**
+* [Action attributes](https://nunit.org/docs/2.6/actionAttributes.html) have their `AfterTest` method invoked
+* Any method with the [TearDown](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) attribute
+* Tests with [UnityTearDown](#unitysetup-and-unityteardown) methods in their test class
+* Any [OuterUnityTestAction](#outerunitytestaction) has its `AfterTest` invoked
+
+The list of actions is the same for both `Test` and `UnityTest`.
+
+## UnitySetUp and UnityTearDown
+
+The `UnitySetUp` and `UnityTearDown` attributes are identical to the standard `SetUp` and `TearDown` attributes, with the exception that they allow for [yielding instructions](reference-custom-yield-instructions.md). The `UnitySetUp` and `UnityTearDown` attributes expect a return type of [IEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerator?view=netframework-4.8).
+
+### Example
+
+```c#
+public class SetUpTearDownExample
+{
+ [UnitySetUp]
+ public IEnumerator SetUp()
+ {
+ yield return new EnterPlayMode();
+ }
+
+ [Test]
+ public void MyTest()
+ {
+ Debug.Log("This runs inside playmode");
+ }
+
+ [UnityTearDown]
+ public IEnumerator TearDown()
+ {
+
+ yield return new ExitPlayMode();
+ }
+}
+```
+
+
+
+## OuterUnityTestAction
+
+`OuterUnityTestAction` is a wrapper outside of the tests, which allows for any tests with this attribute to run code before and after the tests. This method allows for yielding commands in the same way as `UnityTest`. The attribute must inherit the `NUnit` attribute and implement `IOuterUnityTestAction`.
+
+### Example
+
+```c#
+using System.Collections;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+public class MyTestClass
+{
+ [UnityTest, MyOuterActionAttribute]
+ public IEnumerator MyTestInsidePlaymode()
+ {
+ Assert.IsTrue(Application.isPlaying);
+ yield return null;
+ }
+}
+
+public class MyOuterActionAttribute : NUnitAttribute, IOuterUnityTestAction
+{
+ public IEnumerator BeforeTest(ITest test)
+ {
+ yield return new EnterPlayMode();
+ }
+
+ public IEnumerator AfterTest(ITest test)
+ {
+ yield return new ExitPlayMode();
+ }
+}
+
+```
+
+
+
+## Domain Reloads
+
+In **Edit Mode** tests it is possible to yield instructions that can result in a domain reload, such as entering or exiting **Play Mode** (see [Custom yield instructions](./reference-custom-yield-instructions.md)). When a domain reload happens, all non-Unity actions (such as `OneTimeSetup` and `Setup`) are rerun before the code, which initiated the domain reload, continues. Unity actions (such as `UnitySetup`) are not rerun. If the Unity action is the code that initiated the domain reload, then the rest of the code in the `UnitySetup` method runs after the domain reload.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-conditionalignore.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-conditionalignore.md
new file mode 100644
index 00000000..c051e018
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-conditionalignore.md
@@ -0,0 +1,39 @@
+# ConditionalIgnore attribute
+
+This attribute is an alternative to the standard `Ignore` attribute in [NUnit](http://www.nunit.org/). It allows for ignoring tests only under a specified condition. The condition evaluates during `OnLoad`, referenced by ID.
+
+## Example
+
+The following example shows a method to use the `ConditionalIgnore` attribute to ignore a test if the Unity Editor is running macOS:
+
+```C#
+using UnityEditor;
+using NUnit.Framework;
+using UnityEngine.TestTools;
+
+[InitializeOnLoad]
+public class OnLoad
+{
+ static OnLoad()
+ {
+ var editorIsOSX = false;
+ #if UNITY_EDITOR_OSX
+ editorIsOSX = true;
+ #endif
+
+ ConditionalIgnoreAttribute.AddConditionalIgnoreMapping("IgnoreInMacEditor", editorIsOSX);
+ }
+}
+
+public class MyTestClass
+{
+ [Test, ConditionalIgnore("IgnoreInMacEditor", "Ignored on Mac editor.")]
+ public void TestNeverRunningInMacEditor()
+ {
+ Assert.Pass();
+ }
+}
+
+```
+
+> **Note**: You can only use `InitializeOnLoad` in **Edit Mode** tests.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testmustexpectalllogs.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testmustexpectalllogs.md
new file mode 100644
index 00000000..f0c46651
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testmustexpectalllogs.md
@@ -0,0 +1,11 @@
+# TestMustExpectAllLogs attribute
+
+The presence of this attribute causes the **Test Runner** to expect every single log. By default, the Test Runner only fails on error logs, but `TestMustExpectAllLogs` fails on warnings and info level messages as well. It is the same as calling the method [LogAssert.NoUnexpectedReceived](./reference-custom-assertion.md#static-methods) at the bottom of every affected test.
+
+## Assembly-wide usage
+
+You can apply this attribute to test assemblies (that affects every test in the assembly), fixtures (affects every test in the fixture), or on individual test methods. It is also inherited from base fixtures.
+
+The `MustExpect` property (`true` by default) lets you enable or disable the higher level value.
+
+For example when migrating an assembly to this more strict checking method, you might attach `[assembly:TestMustExpectAllLogs]` to the assembly itself, but then whitelist failing fixtures and test methods with `[TestMustExpectAllLogs(MustExpect=false)]` until you have migrated them. This also means new tests in that assembly would have the more strict checking.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testplayerbuildmodifier.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testplayerbuildmodifier.md
new file mode 100644
index 00000000..4ab7ccb8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testplayerbuildmodifier.md
@@ -0,0 +1,105 @@
+# TestPlayerBuildModifier attribute
+
+You can use the `TestPlayerBuildModifier` attribute to accomplish a couple of different scenarios:
+
+## Modify the Player build options for Play Mode tests
+
+It is possible to change the [BuildPlayerOptions](https://docs.unity3d.com/ScriptReference/BuildPlayerOptions.html) for the test **Player**, to achieve custom behavior when running **Play Mode** tests. Modifying the build options allows for changing the target location of the build as well as changing [BuildOptions](https://docs.unity3d.com/ScriptReference/BuildOptions.html).
+
+To modify the `BuildPlayerOptions`, do the following:
+
+* Implement the `ITestPlayerBuildModifier`
+* Reference the implementation type in a `TestPlayerBuildModifier` attribute on an assembly level.
+
+### Example
+
+```c#
+using UnityEditor;
+using UnityEditor.TestTools;
+
+[assembly:TestPlayerBuildModifier(typeof(BuildModifier))]
+public class BuildModifier : ITestPlayerBuildModifier
+{
+ public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
+ {
+ if (playerOptions.target == BuildTarget.iOS)
+ {
+ playerOptions.options |= BuildOptions.SymlinkLibraries; // Enable symlink libraries when running on iOS
+ }
+
+ playerOptions.options |= BuildOptions.AllowDebugging; // Enable allow Debugging flag on the test Player.
+ return playerOptions;
+ }
+}
+```
+
+> **Note:** When building the Player, it includes all `TestPlayerBuildModifier` attributes across all loaded assemblies, independent of the currently used test filter. As the implementation references the `UnityEditor` namespace, the code is typically implemented in an Editor only assembly, as the `UnityEditor` namespace is not available otherwise.
+
+## Split build and run
+
+It is possible to use the Unity Editor for building the Player with tests, without [running the tests](./workflow-run-playmode-test-standalone.md). This allows for running the Player on e.g. another machine. In this case, it is necessary to modify the Player to build and implement a custom handling of the test result.
+
+By using `TestPlayerBuildModifier`, you can alter the `BuildOptions` to not start the Player after the build as well as build the Player at a specific location. Combined with [PostBuildCleanup](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup), you can automatically exit the Editor on completion of the build.
+
+### Example
+
+```c#
+using System;
+using System.IO;
+using System.Linq;
+using Tests;
+using UnityEditor;
+using UnityEditor.TestTools;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+[assembly:TestPlayerBuildModifier(typeof(HeadlessPlayModeSetup))]
+[assembly:PostBuildCleanup(typeof(HeadlessPlayModeSetup))]
+
+namespace Tests
+{
+ public class HeadlessPlayModeSetup : ITestPlayerBuildModifier, IPostBuildCleanup
+ {
+ private static bool s_RunningPlayerTests;
+ public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
+ {
+ // Do not launch the player after the build completes.
+ playerOptions.options &= ~BuildOptions.AutoRunPlayer;
+
+ // Set the headlessBuildLocation to the output directory you desire. It does not need to be inside the project.
+ var headlessBuildLocation = Path.GetFullPath(Path.Combine(Application.dataPath, ".//..//PlayModeTestPlayer"));
+ var fileName = Path.GetFileName(playerOptions.locationPathName);
+ if (!string.IsNullOrEmpty(fileName))
+ {
+ headlessBuildLocation = Path.Combine(headlessBuildLocation, fileName);
+ }
+ playerOptions.locationPathName = headlessBuildLocation;
+
+ // Instruct the cleanup to exit the Editor if the run came from the command line.
+ // The variable is static because the cleanup is being invoked in a new instance of the class.
+ s_RunningPlayerTests = true;
+ return playerOptions;
+ }
+
+ public void Cleanup()
+ {
+ if (s_RunningPlayerTests && IsRunningTestsFromCommandLine())
+ {
+ // Exit the Editor on the next update, allowing for other PostBuildCleanup steps to run.
+ EditorApplication.update += () => { EditorApplication.Exit(0); };
+ }
+ }
+
+ private static bool IsRunningTestsFromCommandLine()
+ {
+ var commandLineArgs = Environment.GetCommandLineArgs();
+ return commandLineArgs.Any(value => value == "-runTests");
+ }
+ }
+}
+```
+
+If the Editor is still running after the Play Mode tests have run, the Player tries to report the results back, using [PlayerConnection](https://docs.unity3d.com/ScriptReference/Networking.PlayerConnection.PlayerConnection.html), which has a reference to the IP address of the Editor machine, when built.
+
+To implement a custom way of reporting the results of the test run, let one of the assemblies in the Player include a [TestRunCallback](./reference-attribute-testruncallback.md). At `RunFinished`, it is possible to get the full test report as XML from the [NUnit](http://www.nunit.org/) test result by calling `result.ToXml(true)`. You can save the result and then save it on the device or send it to another machine as needed.
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testruncallback.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testruncallback.md
new file mode 100644
index 00000000..dad865a5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-testruncallback.md
@@ -0,0 +1,46 @@
+# TestRunCallback attribute
+
+It is possible for the test framework to invoke callbacks as the current test run progresses. To do this, there is a `TestRunCallback` attribute which takes the type of `ITestRunCallback` implementation. You can invoke the callbacks with [NUnit](http://www.nunit.org/) `ITest` and `ITestResult` classes.
+
+At the `RunStarted` and `RunFinished` methods, the test and test results are for the whole test tree. These methods invoke at each node in the test tree; first with the whole test assembly, then with the test class, and last with the test method.
+
+From these callbacks, it is possible to read the partial or the full results, and it is furthermore possible to save the XML version of the result for further processing or continuous integration.
+
+## Example
+
+```C#
+using NUnit.Framework.Interfaces;
+using UnityEngine;
+using UnityEngine.TestRunner;
+
+[assembly:TestRunCallback(typeof(MyTestRunCallback))]
+
+public class MyTestRunCallback : ITestRunCallback
+{
+ public void RunStarted(ITest testsToRun)
+ {
+
+ }
+
+ public void RunFinished(ITestResult testResults)
+ {
+
+ }
+
+ public void TestStarted(ITest test)
+ {
+
+ }
+
+ public void TestFinished(ITestResult result)
+ {
+ if (!result.Test.IsSuite)
+ {
+ Debug.Log($"Result of {result.Name}: {result.ResultState.Status}");
+ }
+ }
+}
+
+```
+
+> **Note:** The `TestRunCallback` does not need any references to the `UnityEditor` namespace and is thus able to run in standalone Players, on the **Player** side.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-unityplatform.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-unityplatform.md
new file mode 100644
index 00000000..931ab878
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-unityplatform.md
@@ -0,0 +1,35 @@
+# UnityPlatform attribute
+
+Use this attribute to define a specific set of platforms you want or do not want your test(s) to run on.
+
+You can use this attribute on the test method, test class, or test assembly level. Use the supported [RuntimePlatform](https://docs.unity3d.com/ScriptReference/RuntimePlatform.html) enumeration values to specify the platforms. You can also specify which platforms to test by passing one or more `RuntimePlatform` values along with or without the include or exclude properties as parameters to the [Platform](https://github.com/nunit/docs/wiki/Platform-Attribute) attribute constructor.
+
+The test(s) skips if the current target platform is:
+
+- Not explicitly specified in the included platforms list
+- In the excluded platforms list
+
+```c#
+using UnityEngine;
+using UnityEngine.TestTools;
+using NUnit.Framework;
+
+[TestFixture]
+public class TestClass
+{
+ [Test]
+ [UnityPlatform(RuntimePlatform.WindowsPlayer)]
+ public void TestMethod()
+ {
+ Assert.AreEqual(Application.platform, RuntimePlatform.WindowsPlayer);
+ }
+}
+```
+
+## Properties
+
+| Syntax | Description |
+| --------------------------- | ------------------------------------------------------------ |
+| `RuntimePlatform[] exclude` | List the platforms you do not want to have your tests run on. |
+| `RuntimePlatform[] include` | A subset of platforms you need to have your tests run on. |
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-unitytest.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-unitytest.md
new file mode 100644
index 00000000..c25947bc
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-attribute-unitytest.md
@@ -0,0 +1,51 @@
+# UnityTest attribute
+
+`UnityTest` attribute is the main addition to the standard [NUnit](http://www.nunit.org/) library for the Unity Test Framework. This type of unit test allows you to skip a frame from within a test (so background tasks can finish) or give certain commands to the Unity **Editor**, such as performing a domain reload or entering **Play Mode** from an **Edit Mode** test.
+
+In Play Mode, the `UnityTest` attribute runs as a [coroutine](https://docs.unity3d.com/Manual/Coroutines.html). Whereas Edit Mode tests run in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop.
+
+The `UnityTest` attribute is, in fact, an alternative to the `NUnit` [Test attribute](https://github.com/nunit/docs/wiki/Test-Attribute), which allows yielding instructions back to the framework. Once the instruction is complete, the test run continues. If you `yield return null`, you skip a frame. That might be necessary to ensure that some changes do happen on the next iteration of either the `EditorApplication.update` loop or the [game loop](https://docs.unity3d.com/Manual/ExecutionOrder.html).
+
+## Edit Mode example
+
+The most simple example of an Edit Mode test could be the one that yields `null` to skip the current frame and then continues to run:
+
+```C#
+[UnityTest]
+public IEnumerator EditorUtility_WhenExecuted_ReturnsSuccess()
+{
+ var utility = RunEditorUtilityInTheBackground();
+
+ while (utility.isRunning)
+ {
+ yield return null;
+ }
+
+ Assert.IsTrue(utility.isSuccess);
+}
+```
+
+## Play Mode example
+
+In Play Mode, a test runs as a coroutine attached to a [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html). So all the yield instructions available in coroutines, are also available in your test.
+
+From a Play Mode test you can use one of Unity’s [Yield Instructions](https://docs.unity3d.com/ScriptReference/YieldInstruction.html):
+
+- [WaitForFixedUpdate](https://docs.unity3d.com/ScriptReference/WaitForFixedUpdate.html): to ensure changes expected within the next cycle of physics calculations.
+- [WaitForSeconds](https://docs.unity3d.com/ScriptReference/WaitForSeconds.html): if you want to pause your test coroutine for a fixed amount of time. Be careful about creating long-running tests.
+
+The simplest example is to yield to `WaitForFixedUpdate`:
+
+```c#
+[UnityTest]
+public IEnumerator GameObject_WithRigidBody_WillBeAffectedByPhysics()
+{
+ var go = new GameObject();
+ go.AddComponent();
+ var originalPosition = go.transform.position.y;
+
+ yield return new WaitForFixedUpdate();
+
+ Assert.AreNotEqual(originalPosition, go.transform.position.y);
+}
+```
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-command-line.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-command-line.md
new file mode 100644
index 00000000..09afbfe0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-command-line.md
@@ -0,0 +1,120 @@
+# Running tests from the command line
+
+It’s pretty simple to run a test project from the command line. Here is an example in Windows:
+
+```bash
+Unity.exe -runTests -batchmode -projectPath PATH_TO_YOUR_PROJECT -testResults C:\temp\results.xml -testPlatform PS4
+```
+
+For more information, see [Command line arguments](https://docs.unity3d.com/Manual/CommandLineArguments.html).
+
+## Commands
+
+### batchmode
+
+Runs Unity in batch mode and ensures no pop-up windows appear to eliminate the need for any human intervention.
+
+### forgetProjectPath
+
+Don't save your current **Project** into the Unity launcher/hub history.
+
+### runTests
+
+Runs tests in the Project.
+
+### testCategory
+
+A semicolon-separated list of test categories to include in the run. A semi-colon separated list should be formatted as a string enclosed in quotation marks, e.g. `testCategory="firstCategory;secondCategory"`. If using both `testFilter` and `testCategory`, then only tests that match both are run. This argument supports negation using '!'. If using '!MyCategory' then no tests with the 'MyCategory' category will be included in the run.
+
+### testFilter
+
+A semicolon-separated list of test names to run, or a regular expression pattern to match tests by their full name. A semi-colon separated list should be formatted as a string enclosed in quotation marks, e.g. `testFilter="Low;Medium"`. This argument supports negation using '!'. If using the test filter '!MyNamespace.Something.MyTest', then all tests except that test will be run.
+
+### testPlatform
+
+The platform you want to run tests on. Available platforms are **EditMode** and **PlayMode**.
+
+> **Note**: If unspecified, tests run in Edit Mode by default.
+
+Platform/Type convention is from the [BuildTarget](https://docs.unity3d.com/ScriptReference/BuildTarget.html) enum. Supported platforms are:
+
+* StandaloneWindows
+* StandaloneWindows64
+* StandaloneLinux64
+* StandaloneOSX
+* iOS
+* Android
+* PS4
+* XboxOne
+
+### assemblyNames
+
+A semicolon-separated list of test assemblies to include in the run. A semi-colon separated list should be formatted as a string enclosed in quotation marks, e.g. `assemblyNames="firstAssembly;secondAssembly"`.
+
+### testResults
+
+The path where Unity should save the result file. By default, Unity saves it in the Project’s root folder.
+
+### playerHeartbeatTimeout
+
+The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes.
+
+### runSynchronously
+
+If included, the test run will run tests synchronously, guaranteeing that all tests runs in one editor update call. Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. `[UnityTest]` tests, or tests with `[UnitySetUp]` or `[UnityTearDown]` scaffolding) will be filtered out.
+
+### testSettingsFile
+
+Path to a *TestSettings.json* file that allows you to set up extra options for your test run. An example of the *TestSettings.json* file could look like this:
+
+```json
+{
+ "scriptingBackend":2,
+ "Architecture":null,
+ "apiProfile":0
+}
+```
+
+#### apiProfile
+
+The .Net compatibility level. Set to one of the following values:
+
+- 1 - .Net 2.0
+- 2 - .Net 2.0 Subset
+- 3 - .Net 4.6
+- 5 - .Net micro profile (used by Mono scripting backend if **Stripping Level** is set to **Use micro mscorlib**)
+- 6 - .Net Standard 2.0
+
+#### appleEnableAutomaticSigning
+
+Sets option for automatic signing of Apple devices.
+
+#### appleDeveloperTeamID
+
+Sets the team ID for the apple developer account.
+
+#### architecture
+
+Target architecture for Android. Set to one of the following values:
+
+* None = 0
+* ARMv7 = 1
+* ARM64 = 2
+* X86 = 4
+* All = 4294967295
+
+#### iOSManualProvisioningProfileType
+
+Set to one of the following values:
+
+* 0 - Automatic
+* 1 - Development
+* 2 - Distribution iOSManualProvisioningProfileID
+
+#### scriptingBackend
+
+ Set to one of the following values:
+
+- Mono2x = 0
+- IL2CPP = 1
+- WinRT DotNET = 2
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-color.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-color.md
new file mode 100644
index 00000000..f4ae57e6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-color.md
@@ -0,0 +1,47 @@
+# ColorEqualityComparer
+
+Use this class to compare two `Color` objects. `ColorEqualityComparer.Instance` has default calculation error value set to 0.01f. To set a test specific error value instantiate a comparer instance using the [one argument constructor](#constructors).
+
+## Static properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `Instance` | A singleton instance of the comparer with a default error value set to 0.01f. |
+
+## Constructors
+
+| Syntax | Description |
+| ------------------------------------ | ------------------------------------------------------------ |
+| `ColorEqualityComparer(float error)` | Creates an instance of the comparer with a custom error value. |
+
+## Public methods
+
+| Syntax | Description |
+| -------------------------------------------- | ------------------------------------------------------------ |
+| `bool Equals(Color expected, Color actual);` | Compares the actual and expected `Color` objects for equality using `Utils.AreFloatsEqualAbsoluteError` to compare the `RGB` and `Alpha` attributes of `Color`. Returns `true` if expected and actual objects are equal otherwise, it returns `false`. |
+
+## Example
+
+```c#
+[TestFixture]
+public class ColorEqualityTest
+{
+ [Test]
+ public void GivenColorsAreEqual_WithAllowedCalculationError()
+ {
+ // Using default error
+ var firstColor = new Color(0f, 0f, 0f, 0f);
+ var secondColor = new Color(0f, 0f, 0f, 0f);
+
+ Assert.That(firstColor, Is.EqualTo(secondColor).Using(ColorEqualityComparer.Instance));
+
+ // Allowed error 10e-5f
+ var comparer = new ColorEqualityComparer(10e-5f);
+ firstColor = new Color(0f, 0f, 0f, 1f);
+ secondColor = new Color(10e-6f, 0f, 0f, 1f);
+
+ Assert.That(firstColor, Is.EqualTo(secondColor).Using(comparer));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-equals.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-equals.md
new file mode 100644
index 00000000..cc5d4d64
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-equals.md
@@ -0,0 +1,27 @@
+# Custom equality comparers with equals operator
+
+If you need to compare Vectors using the overloaded operator == (see [Vector2.operator ==](https://docs.unity3d.com/ScriptReference/Vector2-operator_eq.html), [Vector3.operator ==](https://docs.unity3d.com/ScriptReference/Vector3-operator_eq.html), and [Vector4.operator ==](https://docs.unity3d.com/ScriptReference/Vector4-operator_eq.html)) you should use the respective comparer implementations:
+
+- Vector2ComparerWithEqualsOperator
+- Vector3ComparerWithEqualsOperator
+- Vector4ComparerWithEqualsOperator
+
+The interface is the same as for other [equality comparers](./reference-custom-equality-comparers.md) except the public [constructor](./reference-custom-equality-comparers.md#constructors) `error` parameter is inapplicable in this case.
+
+## Example
+
+```c#
+[TestFixture]
+public class Vector3Test
+{
+ [Test]
+ public void VerifyThat_TwoVector3ObjectsAreEqual()
+ {
+ var actual = new Vector3(10e-7f, 10e-7f, 10e-7f);
+ var expected = new Vector3(0f, 0f, 0f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(Vector3ComparerWithEqualsOperator.Instance));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-float.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-float.md
new file mode 100644
index 00000000..188d2075
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-float.md
@@ -0,0 +1,46 @@
+# FloatEqualityComparer
+
+Use this class to compare two float values for equality with [NUnit](http://www.nunit.org/) constraints. Use `FloatEqualityComparer.Instance` comparer to have the default error value set to 0.0001f. For any other error, use the [one argument constructor](#constructors) to create a comparer.
+
+## Static Properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `Instance` | A singleton instance of the comparer with a default error value set to 0.0001f. |
+
+## Constructors
+
+| Syntax | Description |
+| ------------------------------------------- | ------------------------------------------------------------ |
+| `FloatEqualityComparer(float allowedError)` | Creates an instance of the comparer with a custom error value. |
+
+## Public methods
+
+| Syntax | Description |
+| -------------------------------------------- | ------------------------------------------------------------ |
+| `bool Equals(float expected, float actual);` | Compares the `actual` and `expected` float values for equality using `Utils.AreFloatsEqual`. |
+
+## Example
+
+```c#
+[TestFixture]
+public class FloatsTest
+{
+ [Test]
+ public void VerifyThat_TwoFloatsAreEqual()
+ {
+ var comparer = new FloatEqualityComparer(10e-6f);
+ var actual = -0.00009f;
+ var expected = 0.00009f;
+
+ Assert.That(actual, Is.EqualTo(expected).Using(comparer));
+
+ // Default relative error 0.0001f
+ actual = 10e-8f;
+ expected = 0f;
+
+ Assert.That(actual, Is.EqualTo(expected).Using(FloatEqualityComparer.Instance));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-quaternion.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-quaternion.md
new file mode 100644
index 00000000..5d7abc86
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-quaternion.md
@@ -0,0 +1,46 @@
+# QuaternionEqualityComparer
+
+Use this utility to compare two [Quaternion](https://docs.unity3d.com/ScriptReference/Quaternion.html) objects for equality with [NUnit](http://www.nunit.org/) assertion constraints. Use the static instance `QuaternionEqualityComparer.Instance` to have the default calculation error value set to 0.00001f. For any other custom error value, use the [one argument constructor](#constructors).
+
+## Static properties
+
+| Syntax | Description |
+| ---------- | ---------------------------------------------------------- |
+| `Instance` | A comparer instance with the default error value 0.00001f. |
+
+## Constructors
+
+| Syntax | Description |
+| ------------------------------------------------ | ------------------------------------------------------------ |
+| `QuaternionEqualityComparer(float allowedError)` | Creates an instance of the comparer with a custom allowed error value. |
+
+## Public methods
+
+| Syntax | Description |
+| ----------------------------------------------------- | ------------------------------------------------------------ |
+| `bool Equals(Quaternion expected, Quaternion actual)` | Compares the `actual` and `expected` `Quaternion` objects for equality using the [Quaternion.Dot](https://docs.unity3d.com/ScriptReference/Quaternion.Dot.html) method. |
+
+## Example
+
+```c#
+[TestFixture]
+public class QuaternionTest
+{
+ [Test]
+ public void VerifyThat_TwoQuaternionsAreEqual()
+ {
+ var actual = new Quaternion(10f, 0f, 0f, 0f);
+ var expected = new Quaternion(1f, 10f, 0f, 0f);
+ var comparer = new QuaternionEqualityComparer(10e-6f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(comparer));
+
+ //Using default error 0.00001f
+ actual = new Quaternion(10f, 0f, 0.1f, 0f);
+ expected = new Quaternion(1f, 10f, 0.1f, 0f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(QuaternionEqualityComparer.Instance));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector2.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector2.md
new file mode 100644
index 00000000..977879e2
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector2.md
@@ -0,0 +1,47 @@
+# Vector2EqualityComparer
+
+Use this class to compare two [Vector2](https://docs.unity3d.com/ScriptReference/Vector2.html) objects for equality with [NUnit](http://www.nunit.org/) constraints. Use the static `Vector2EqualityComparer.Instance` to have the calculation error value set to default 0.0001f. For any other error value, instantiate a new comparer object with the [one argument constructor](#constructors).
+
+## Static properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `Instance` | A comparer instance with the default error value set to 0.0001f. |
+
+## Constructors
+
+| Syntax | Description |
+| -------------------------------------- | ---------------------------------------------- |
+| `Vector2EqualityComparer(float error)` | Creates an instance with a custom error value. |
+
+## Public methods
+
+| Syntax | Description |
+| ------------------------------------------ | ------------------------------------------------------------ |
+| `Equals(Vector2 expected, Vector2 actual)` | Compares the `actual` and `expected` `Vector2` objects for equality using the [Utils.AreFloatsEqual](./reference-test-utils.md) method. |
+
+## Example
+
+```c#
+[TestFixture]
+public class Vector2Test
+{
+ [Test]
+ public void VerifyThat_TwoVector2ObjectsAreEqual()
+ {
+ // Custom calculation error
+ var actual = new Vector2(10e-7f, 10e-7f);
+ var expected = new Vector2(0f, 0f);
+ var comparer = new Vector2EqualityComparer(10e-6f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(comparer));
+
+ //Default error 0.0001f
+ actual = new Vector2(0.01f, 0.01f);
+ expected = new Vector2(0.01f, 0.01f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(Vector2EqualityComparer.Instance));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector3.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector3.md
new file mode 100644
index 00000000..6fe1122b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector3.md
@@ -0,0 +1,47 @@
+# Vector3EqualityComparer
+
+Use this class to compare two [Vector3](https://docs.unity3d.com/ScriptReference/Vector3.html) objects for equality with `NUnit` constraints. Call `Vector3EqualityComparer.Instance` comparer to perform a comparison with the default calculation error value 0.0001f. To specify a different error value, use the [one argument constructor](#constructors) to instantiate a new comparer.
+
+## Static properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `Instance` | A comparer instance with the default calculation error value equal to 0.0001f. |
+
+## Constructors
+
+| Syntax | Description |
+| --------------------------------------------- | ---------------------------------------------- |
+| `Vector3EqualityComparer(float allowedError)` | Creates an instance with a custom error value. |
+
+## Public methods
+
+| Syntax | Description |
+| ----------------------------------------------- | ------------------------------------------------------------ |
+| `bool Equals(Vector3 expected, Vector3 actual)` | Compares the `actual` and `expected` `Vector3` objects for equality using [Utils.AreFloatsEqual](http://todo) to compare the `x`, `y`, and `z` attributes of `Vector3`. |
+
+## Example
+
+```c#
+[TestFixture]
+public class Vector3Test
+{
+ [Test]
+ public void VerifyThat_TwoVector3ObjectsAreEqual()
+ {
+ // Custom error 10e-6f
+ var actual = new Vector3(10e-8f, 10e-8f, 10e-8f);
+ var expected = new Vector3(0f, 0f, 0f);
+ var comparer = new Vector3EqualityComparer(10e-6f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(comparer));
+
+ //Default error 0.0001f
+ actual = new Vector3(0.01f, 0.01f, 0f);
+ expected = new Vector3(0.01f, 0.01f, 0f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector4.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector4.md
new file mode 100644
index 00000000..915cd65d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-comparer-vector4.md
@@ -0,0 +1,47 @@
+# Vector4EqualityComparer
+
+Use this class to compare two [Vector4](https://docs.unity3d.com/ScriptReference/Vector4.html) objects for equality with [NUnit](http://www.nunit.org/) constraints. Call `Vector4EqualityComparer.Instance` to perform comparisons using default calculation error value 0.0001f. To set a custom test value, instantiate a new comparer using the [one argument constructor](#constructor).
+
+## Static Properties
+
+| Syntax | Description |
+| ---------------------------------- | ------------------------------------------------------------ |
+| `Vector4EqualityComparer Instance` | A comparer instance with the default calculation error value set to 0.0001f. |
+
+## Constructors
+
+| Syntax | Description |
+| --------------------------------------------- | ---------------------------------------------- |
+| `Vector4EqualityComparer(float allowedError)` | Creates an instance with a custom error value. |
+
+## Public methods
+
+| Syntax | Description |
+| ------------------------------------------------ | ------------------------------------------------------------ |
+| `bool Equals(Vector4 expected, Vector4 actual);` | Compares the `actual` and `expected` `Vector4` objects for equality using [Utils.AreFloatsEqual](http://todo) to compare the `x`, `y`, `z`, and `w` attributes of `Vector4`. |
+
+## Example
+
+```c#
+[TestFixture]
+public class Vector4Test
+{
+ [Test]
+ public void VerifyThat_TwoVector4ObjectsAreEqual()
+ {
+ // Custom error 10e-6f
+ var actual = new Vector4(0, 0, 1e-6f, 1e-6f);
+ var expected = new Vector4(1e-6f, 0f, 0f, 0f);
+ var comparer = new Vector4EqualityComparer(10e-6f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(comparer));
+
+ // Default error 0.0001f
+ actual = new Vector4(0.01f, 0.01f, 0f, 0f);
+ expected = new Vector4(0.01f, 0.01f, 0f, 0f);
+
+ Assert.That(actual, Is.EqualTo(expected).Using(Vector4EqualityComparer.Instance));
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-assertion.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-assertion.md
new file mode 100644
index 00000000..665597b8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-assertion.md
@@ -0,0 +1,66 @@
+# Custom assertion
+
+A test fails if Unity logs a message other than a regular log or warning message. Use [LogAssert](#logassert) to check for an expected message in the log so that the test does not fail when Unity logs the message.
+
+Use `LogAssert.Expect` before running the code under test, as the check for expected logs runs at the end of each frame.
+
+A test also reports a failure, if an expected message does not appear, or if Unity does not log any regular log or warning messages.
+
+## Example
+
+```c#
+[Test]
+public void LogAssertExample()
+{
+ // Expect a regular log message
+ LogAssert.Expect(LogType.Log, "Log message");
+
+ // The test fails without the following expected log message
+ Debug.Log("Log message");
+
+ // An error log
+ Debug.LogError("Error message");
+
+ // Without expecting an error log, the test would fail
+ LogAssert.Expect(LogType.Error, "Error message");
+}
+```
+
+## LogAssert
+
+`LogAssert` lets you expect Unity log messages that would otherwise cause the test to fail.
+
+### Static properties
+
+| Syntax | Description |
+| ---------------------------- | ------------------------------------------------------------ |
+| `bool ignoreFailingMessages` | Set this property to `true` to prevent unexpected error log messages from triggering an assertion. By default, it is `false`. |
+
+### Static Methods
+
+| Syntax | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `void Expect(LogType type, string message);` `void Expect(LogType type, Regex message);` | Verifies that a log message of a specified type appears in the log. A test won’t fail from an expected error, assertion, or exception log message. It does fail if an expected message does not appear in the log. |
+| `void NoUnexpectedReceived();` | Triggers an assertion when receiving any log messages and fails the test if some are unexpected messages. If multiple tests need to check for no received unexpected logs, consider using the [TestMustExpectAllLogs](./reference-attribute-testmustexpectalllogs.md) attribute instead. |
+
+### Expect string message
+
+`void Expect(LogType type, string message);`
+
+#### Parameters
+
+| Syntax | Description |
+| ---------------- | ------------------------------------------------------------ |
+| `LogType type` | A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. |
+| `string message` | A string value that should equate to the expected message. |
+
+### Expect Regex message
+
+`void Expect(LogType type, Regex message);`
+
+#### Parameters
+
+| Syntax | Description |
+| --------------- | ------------------------------------------------------------ |
+| `LogType type` | A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. |
+| `Regex message` | A regular expression pattern to match the expected message. |
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-attributes.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-attributes.md
new file mode 100644
index 00000000..115e4cb4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-attributes.md
@@ -0,0 +1,15 @@
+# Custom attributes
+
+As a part of UTF’s public API we provide the following attributes:
+
+* [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md)
+* [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup)
+* [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup)
+* [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md)
+* [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md)
+* [TestRunCallback attribute](./reference-attribute-testruncallback.md)
+* [UnityPlatform attribute](./reference-attribute-unityplatform.md)
+* [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+* [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown)
+* [UnityTest attribute](./reference-attribute-unitytest.md)
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-constraints.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-constraints.md
new file mode 100644
index 00000000..10b205b9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-constraints.md
@@ -0,0 +1,31 @@
+# Custom constraints
+
+`NUnit` allows you to write test assertions in a more descriptive and human readable way using the [Assert.That](https://github.com/nunit/docs/wiki/Assertions) mechanism, where the first parameter is an object under test and the second parameter describes conditions that the object has to meet.
+
+## Is
+
+We’ve extended `NUnit` API with a custom constraint type and declared an overlay `Is` class. To resolve ambiguity between the original implementation and the custom one you must explicitly declare it with a using statement or via addressing through the full type name `UnityEngine.TestTools.Constraints.Is`.
+
+### Static Methods
+
+| Syntax | Description |
+| -------------------- | ------------------------------------------------------------ |
+| `AllocatingGCMemory` | A constraint type that invokes the delegate you provide as the parameter of `Assert.That` and checks whether it causes any GC memory allocations. It passes if any GC memory is allocated and fails if not. |
+
+## Example
+
+```c#
+using Is = UnityEngine.TestTools.Constraints.Is;
+
+class MyTestClass
+{
+ [Test]
+ public void MyTest()
+ {
+ Assert.That(() => {
+ var i = new int[500];
+ }, Is.AllocatingGCMemory());
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-equality-comparers.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-equality-comparers.md
new file mode 100644
index 00000000..8203a32f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-equality-comparers.md
@@ -0,0 +1,32 @@
+# Custom equality comparers
+
+To enable easier verification of custom Unity type values in your tests we provide you with some custom equality comparers:
+
+* [ColorEqualityComparer](./reference-comparer-color.md)
+* [FloatEqualityComparer](./reference-comparer-float.md)
+* [QuaternionEqualityComparer](./reference-comparer-quaternion.md)
+* [Vector2EqualityComparer](./reference-comparer-vector2.md)
+* [Vector3EqualityComparer](./reference-comparer-vector3.md)
+* [Vector4EqualityComparer](./reference-comparer-vector4.md)
+
+Use these classes to compare two objects of the same type for equality within the range of a given tolerance using [NUnit ](https://github.com/nunit/docs/wiki/Constraints)or [custom constraints](./reference-custom-constraints.md) . Call Instance to apply the default calculation error value to the comparison. To set a specific error value, instantiate a new comparer object using a one argument constructor `ctor(float error)`.
+
+## Static properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `Instance` | A singleton instance of the comparer with a predefined default error value. |
+
+## Constructors
+
+| Syntax | Description |
+| ------------------- | ------------------------------------------------------------ |
+| `ctor(float error)` | Creates an instance of comparer with a custom error `value.allowedError`. The relative error to be considered while comparing two values. |
+
+## Public methods
+
+| Syntax | Description |
+| ------------------------------------ | ------------------------------------------------------------ |
+| `bool Equals(T expected, T actual);` | Compares the actual and expected objects for equality using a custom comparison mechanism. Returns `true` if expected and actual objects are equal, otherwise it returns `false`. |
+
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-yield-instructions.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-yield-instructions.md
new file mode 100644
index 00000000..9814ca35
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-custom-yield-instructions.md
@@ -0,0 +1,60 @@
+# Custom yield instructions
+
+By implementing this interface below, you can define custom yield instructions in **Edit Mode** tests.
+
+## IEditModeTestYieldInstruction
+
+In an Edit Mode test, you can use `IEditModeTestYieldInstruction` interface to implement your own instruction. There are also a couple of commonly used implementations available:
+
+- [EnterPlayMode](#enterplaymode)
+- [ExitPlayMode](#exitplaymode)
+- [RecompileScripts](./reference-recompile-scripts.md)
+- [WaitForDomainReload](./reference-wait-for-domain-reload.md)
+
+## Example
+
+```c#
+[UnityTest]
+
+public IEnumerator PlayOnAwakeDisabled_DoesntPlayWhenEnteringPlayMode()
+
+{
+ var videoPlayer = PrefabUtility.InstantiatePrefab(m_VideoPlayerPrefab.GetComponent()) as VideoPlayer;
+
+ videoPlayer.playOnAwake = false;
+
+ yield return new EnterPlayMode();
+
+ var videoPlayerGO = GameObject.Find(m_VideoPlayerPrefab.name);
+
+ Assert.IsFalse(videoPlayerGO.GetComponent().isPlaying);
+
+ yield return new ExitPlayMode();
+
+ Object.DestroyImmediate(GameObject.Find(m_VideoPlayerPrefab.name));
+}
+```
+
+## Properties
+
+| Syntax | Description |
+| ---------------------------- | ------------------------------------------------------------ |
+| `bool ExpectDomainReload` | Returns `true` if the instruction expects a domain reload to occur. |
+| `bool ExpectedPlaymodeState` | Returns `true` if the instruction expects the Unity Editor to be in **Play Mode**. |
+
+## Methods
+
+| Syntax | Description |
+| ----------------------- | ------------------------------------------------------------ |
+| `IEnumerator Perform()` | Used to define multi-frame operations performed when instantiating a yield instruction. |
+
+## EnterPlayMode
+
+* Implements `IEditModeTestYieldInstruction`. Creates a yield instruction to enter Play Mode.
+* When creating an Editor test that uses the `UnityTest` attribute, use this to trigger the Editor to enter Play Mode.
+* Throws an exception if the Editor is already in Play Mode or if there is a [script compilation error](https://support.unity3d.com/hc/en-us/articles/205930539-How-do-I-interpret-a-compiler-error-).
+
+## ExitPlayMode
+
+* Implements `IEditModeTestYieldInstruction`. A new instance of the class is a yield instruction to exit Play Mode.
+* Throws an exception if the Editor is not in Play Mode.
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-execution-settings.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-execution-settings.md
new file mode 100644
index 00000000..e40a3334
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-execution-settings.md
@@ -0,0 +1,17 @@
+# ExecutionSettings
+The `ExecutionSettings` is a set of filters and other settings provided when running a set of tests from the [TestRunnerApi](./reference-test-runner-api.md).
+
+## Constructors
+
+| Syntax | Description |
+| ----------------------------------------------------- | -------------------------------------------------------- |
+| `ExecutionSettings(params Filter[] filtersToExecute)` | Creates an instance with a given set of filters, if any. |
+
+## Fields
+
+| Syntax | Description |
+| ---------------------------- | ------------------------------------------------------------ |
+| `Filter[] filters` | A collection of [Filters](./reference-filter.md) to execute tests on. |
+| `ITestRunSettings overloadTestRunSettings` | An instance of [ITestRunSettings](./reference-itest-run-settings.md) to set up before running tests on a Player. |
+| `bool runSynchronously` | If true, the call to `Execute()` will run tests synchronously, guaranteeing that all tests have finished running by the time the call returns. Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. `[UnityTest]` tests, or tests with `[UnitySetUp]` or `[UnityTearDown]` scaffolding) will be filtered out. |
+| 'int playerHeartbeatTimeout' | The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes. |
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-filter.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-filter.md
new file mode 100644
index 00000000..8cfa9107
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-filter.md
@@ -0,0 +1,15 @@
+# Filter
+The filter class provides the [TestRunnerApi](./reference-test-runner-api.md) with a specification of what tests to run when [running tests programmatically](./extension-run-tests.md).
+
+## Fields
+
+| Syntax | Description |
+| ----------------------------- | ------------------------------------------------------------ |
+| `TestMode testMode` | An enum flag that specifies if **Edit Mode** or **Play Mode** tests should run. Applying both Edit Mode and Play Mode is currently not supported when running tests from the API. |
+| `string[] testNames` | The full name of the tests to match the filter. This is usually in the format `FixtureName.TestName`. If the test has test arguments, then include them in parenthesis. E.g. `MyTestClass2.MyTestWithMultipleValues(1)`. |
+| `string[] groupNames` | The same as `testNames`, except that it allows for Regex. This is useful for running specific fixtures or namespaces. E.g. `"^MyNamespace\\."` Runs any tests where the top namespace is `MyNamespace`. |
+| `string[] categoryNames` | The name of a [Category](https://nunit.org/docs/2.2.7/category.html) to include in the run. Any test or fixtures runs that have a `Category` matching the string. |
+| `string[] assemblyNames` | The name of assemblies included in the run. That is the assembly name, without the .dll file extension. E.g., `MyTestAssembly`. |
+| `BuildTarget? targetPlatform` | The [BuildTarget](https://docs.unity3d.com/ScriptReference/BuildTarget.html) platform to run the test on. If set to `null`, then the Editor is the target for the tests. |
+
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-icallbacks.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-icallbacks.md
new file mode 100644
index 00000000..b04e7e82
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-icallbacks.md
@@ -0,0 +1,48 @@
+# ICallbacks
+An interface for receiving callbacks when running tests. All test runs invoke the callbacks until the next domain reload.
+
+The `RunStarted` method runs when the whole test run starts. Then the `TestStarted` method runs with information about the tests it is about to run on an assembly level. Afterward, it runs on a test fixture level and then on the individual test. If the test is a [parameterized test](./https://github.com/nunit/docs/wiki/Parameterized-Tests), then it is also invoked for each parameter combination. After each part of the test tree have completed running, the corresponding `TestFinished` method runs with the test result. At the end of the run, the `RunFinished` event runs with the test result.
+
+An extended version of the callback, [IErrorCallbacks](./reference-ierror-callbacks.md), extends this `ICallbacks` to receive calls when a run fails due to a build error.
+
+## Public methods
+
+| Syntax | Description |
+| ---------------------------------------------- | ------------------------------------------------------------ |
+| `void RunStarted(ITestAdaptor testsToRun)` | Invoked when the test run starts. The [ITestAdaptor](./reference-itest-adaptor.md) represents the tree of tests to run. |
+| `void RunFinished(ITestResultAdaptor result)` | Invoked when the test run finishes. The [ITestResultAdaptor](./reference-itest-result-adaptor.md) represents the results of the set of tests that have run. |
+| `void TestStarted(ITestAdaptor test)` | Invoked on each node of the test tree, as that part of the tree starts to run. |
+| `void TestFinished(ITestResultAdaptor result)` | Invoked on each node of the test tree once that part of the test tree has finished running. The [ITestResultAdaptor](./reference-itest-result-adaptor.md) represents the results of the current node of the test tree. |
+
+## Example
+An example that sets up a listener on the API. The listener prints the number of failed tests after the run has finished:
+``` C#
+public void SetupListeners()
+{
+ var api = ScriptableObject.CreateInstance();
+ api.RegisterCallbacks(new MyCallbacks());
+}
+
+private class MyCallbacks : ICallbacks
+{
+ public void RunStarted(ITestAdaptor testsToRun)
+ {
+
+ }
+
+ public void RunFinished(ITestResultAdaptor result)
+ {
+ Debug.Log(string.Format("Run finished {0} test(s) failed.", result.FailCount));
+ }
+
+ public void TestStarted(ITestAdaptor test)
+ {
+
+ }
+
+ public void TestFinished(ITestResultAdaptor result)
+ {
+
+ }
+}
+```
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-ierror-callbacks.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-ierror-callbacks.md
new file mode 100644
index 00000000..bf833091
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-ierror-callbacks.md
@@ -0,0 +1,9 @@
+# IErrorCallbacks
+An extended version of the [ICallbacks](./reference-icallbacks.md), which get invoked if the test run fails due to a build error or if any [IPrebuildSetup](./reference-setup-and-cleanup.md) has a failure.
+
+## Public methods
+
+| Syntax | Description |
+| ---------------------------- | ------------------------------------------------------------------- |
+| void OnError(string message) | The error message detailing the reason for the run to fail. |
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-adaptor.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-adaptor.md
new file mode 100644
index 00000000..04e72f6f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-adaptor.md
@@ -0,0 +1,31 @@
+# ITestAdaptor
+`ITestAdaptor` is a representation of a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITest.cs) interface.
+
+## Properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `string Id` | The ID of the test tree node. The ID can change if you add new tests to the suite. Use `UniqueName`, if you want to have a more permanent point of reference. |
+| `string Name` | The name of the test. E.g., `MyTest`. |
+| `string FullName` | The full name of the test. E.g., `MyNamespace.MyTestClass.MyTest`. |
+| `int TestCaseCount` | The total number of test cases in the node and all sub-nodes. |
+| `bool HasChildren` | Whether the node has any children. |
+| `bool IsSuite` | Whether the node is a test suite/fixture. |
+| `IEnumerable Children` | The child nodes. |
+| `ITestAdaptor Parent` | The parent node, if any. |
+| `int TestCaseTimeout` | The test case timeout in milliseconds. Note that this value is only available on TestFinished. |
+| `ITypeInfo TypeInfo` | The type of test class as an `NUnit` [ITypeInfo](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITypeInfo.cs). If the node is not a test class, then the value is `null`. |
+| `IMethodInfo Method` | The [Nunit IMethodInfo](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/IMethodInfo.cs) of the test method. If the node is not a test method, then the value is `null`. |
+| `string[] Categories` | An array of the categories applied to the test or fixture. |
+| `bool IsTestAssembly` | Whether the node represents a test assembly. |
+| `RunState RunState` | The run state of the test node. Either `NotRunnable`, `Runnable`, `Explicit`, `Skipped`, or `Ignored`. |
+| `string Description` | The description of the test. |
+| `string SkipReason` | The skip reason. E.g., if ignoring the test. |
+| `string ParentId` | The ID of the parent node. |
+| `string ParentFullName` | The full name of the parent node. |
+| `string UniqueName` | A unique generated name for the test node. E.g., `Tests.dll/MyNamespace/MyTestClass/[Tests][MyNamespace.MyTestClass.MyTest]`. |
+| `string ParentUniqueName` | A unique name of the parent node. E.g., `Tests.dll/MyNamespace/[Tests][MyNamespace.MyTestClass][suite]`. |
+| `int ChildIndex` | The child index of the node in its parent. |
+| `TestMode TestMode` | The mode of the test. Either **Edit Mode** or **Play Mode**. |
+
+> **Note**: Some properties are not available when receiving the test tree as a part of a test result coming from a standalone Player, such as `TypeInfo` and `Method`.
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-result-adaptor.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-result-adaptor.md
new file mode 100644
index 00000000..63280f62
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-result-adaptor.md
@@ -0,0 +1,25 @@
+# ITestResultAdaptor
+The `ITestResultAdaptor` is the representation of the test results for a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITestResults.cs) interface.
+## Properties
+
+| Syntax | Description |
+| ---------- | ------------------------------------------------------------ |
+| `ITestAdaptor Test` | The test details of the test result tree node as a [TestAdaptor](./reference-itest-adaptor.md). |
+| `string Name` | The name of the test node. |
+| `string FullName` | Gets the full name of the test result |
+| `string ResultState` | The state of the result as a string. E.g., `Success`, `Skipped`, `Failure`, `Explicit`, `Cancelled`. |
+| `TestStatus TestStatus` | The status of the test as an enum. Either `Inconclusive`, `Skipped`, `Passed`, or `Failed`. |
+| `double Duration` | Gets the elapsed time for running the test in seconds. |
+| `DateTime StartTime` | Gets or sets the time the test started running. |
+| `DateTime EndTime` | Gets or sets the time the test finished running. |
+| `string Message` | Gets the message associated with a test failure or with not running the test |
+| `string StackTrace` | Gets any stack trace associated with an error or failure. Not available in the [Compact Framework](https://en.wikipedia.org/wiki/.NET_Compact_Framework) 1.0. |
+| `int AssertCount` | Gets the number of asserts that ran during the test and all its children. |
+| `int FailCount` | Gets the number of test cases that failed when running the test and all its children. |
+| `int PassCount` | Gets the number of test cases that passed when running the test and all its children. |
+| `int SkipCount` | Gets the number of test cases skipped when running the test and all its children. |
+| `int InconclusiveCount` | Gets the number of test cases that were inconclusive when running the test and all its children. |
+| `bool HasChildren` | Indicates whether this result has any child results. Accessing HasChildren should not force the creation of the Children collection in classes implementing this interface. |
+| `IEnumerable Children` | Gets the collection of child results. |
+| `string Output` | Gets any text output written to this result. |
+| `TNode ToXml` | Gets the test results as an `NUnit` XML node. Use this to save the results to an XML file. |
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-run-settings.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-run-settings.md
new file mode 100644
index 00000000..79c344b5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-itest-run-settings.md
@@ -0,0 +1,29 @@
+# ITestRunSettings
+`ITestRunSettings` lets you set any of the global settings right before building a Player for a test run and then reverts the settings afterward.
+`ITestRunSettings` implements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable), and runs after building the Player with tests.
+
+## Public methods
+
+| Syntax | Description |
+| ---------------- | ------------------------------------------------------------ |
+| `void Apply()` | A method called before building the Player. |
+| `void Dispose()` | A method called after building the Player or if the build failed. |
+
+## Example
+The following example sets the iOS SDK version to be the simulator SDK and resets it to the original value after the run.
+``` C#
+public class MyTestSettings : ITestRunSettings
+{
+ private iOSSdkVersion originalSdkVersion;
+ public void Apply()
+ {
+ originalSdkVersion = PlayerSettings.iOS.sdkVersion;
+ PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK;
+ }
+
+ public void Dispose()
+ {
+ PlayerSettings.iOS.sdkVersion = originalSdkVersion;
+ }
+}
+```
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-recompile-scripts.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-recompile-scripts.md
new file mode 100644
index 00000000..0fb86446
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-recompile-scripts.md
@@ -0,0 +1,22 @@
+# RecompileScripts
+`RecompileScripts` is an [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md) that you can yield in Edit Mode tests. It lets you trigger a recompilation of scripts in the Unity Editor.
+
+## Constructors
+
+| Syntax | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `RecompileScripts(bool expectScriptCompilation = true, bool expectScriptCompilationSuccess = true)` | Creates a new instance of the `RecompileScripts` yield instruction. The parameter `expectScriptCompilation` indicates if you expect a script compilation to start (defaults to true). If a script compilation does not start and `expectScriptCompilation` is `true`, then it throws an exception. |
+
+## Example
+``` C@
+[UnitySetUp]
+public IEnumerator SetUp()
+{
+ using (var file = File.CreateText("Assets/temp/myScript.cs"))
+ {
+ file.Write("public class ATempClass { }");
+ }
+ AssetDatabase.Refresh();
+ yield return new RecompileScripts();
+}
+```
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-setup-and-cleanup.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-setup-and-cleanup.md
new file mode 100644
index 00000000..93e77a56
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-setup-and-cleanup.md
@@ -0,0 +1,91 @@
+# Setup and cleanup at build time
+
+In some cases, it is relevant to perform changes to Unity or the file system before building the tests. In the same way, it may be necessary to clean up such changes after the test run. In response to such needs, you can incorporate the pre-build setup and post-build cleanup concepts into your tests in one of the following ways:
+
+1. Via implementation of `IPrebuildSetup` and `IPostBuildCleanup` interfaces by a test class.
+2. Via applying the `PrebuildSetup` attribute and `PostBuildCleanup` attribute on your test class, one of the tests or the test assembly, providing a class name that implements the corresponding interface as an argument (fx `[PrebuildSetup("MyTestSceneSetup")]`).
+
+## Execution order
+
+All setups run in a deterministic order one after another. The first to run are the setups defined with attributes. Then any test class implementing the interface runs, in alphabetical order inside their namespace, which is the same order as the tests run.
+
+> **Note**: Cleanup runs right away for a standalone test run, but only after related tests run in the Unity Editor.
+
+## PrebuildSetup and PostBuildCleanup
+
+Both `PrebuildSetup` and `PostBuildCleanup` attributes run if the respective test or test class is in the current test run. The test is included either by running all tests or setting a [filter](./workflow-create-test.md#filters) that includes the test. If multiple tests reference the same pre-built setup or post-build cleanup, then it only runs once.
+
+## IPrebuildSetup
+
+Implement this interface if you want to define a set of actions to run as a pre-build step.
+
+### Public methods
+
+| Syntax | Description |
+| -------------- | ------------------------------------------------------------ |
+| `void Setup()` | Implement this method to call actions automatically before the build process. |
+
+## IPostBuildCleanup
+
+Implement this interface if you want to define a set of actions to execute as a post-build step. Cleanup runs right away for a standalone test run, but only after all the tests run within the Editor.
+
+### Public methods
+
+| Syntax | Description |
+| ---------------- | ------------------------------------------------------------ |
+| `void Cleanup()` | Implement this method to specify actions that should run as a post-build cleanup step. |
+
+## Example
+
+```c#
+[TestFixture]
+public class CreateSpriteTest : IPrebuildSetup
+{
+ Texture2D m_Texture;
+ Sprite m_Sprite;
+
+ public void Setup()
+ {
+
+#if UNITY_EDITOR
+
+ var spritePath = "Assets/Resources/Circle.png";
+
+ var ti = UnityEditor.AssetImporter.GetAtPath(spritePath) as UnityEditor.TextureImporter;
+
+ ti.textureCompression = UnityEditor.TextureImporterCompression.Uncompressed;
+
+ ti.SaveAndReimport();
+
+#endif
+ }
+
+ [SetUp]
+ public void SetUpTest()
+ {
+ m_Texture = Resources.Load("Circle");
+ }
+
+ [Test]
+ public void WhenNullTextureIsPassed_CreateShouldReturnNullSprite()
+ {
+
+ // Check with Valid Texture.
+
+ LogAssert.Expect(LogType.Log, "Circle Sprite Created");
+
+ Sprite.Create(m_Texture, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f));
+
+ Debug.Log("Circle Sprite Created");
+
+ // Check with NULL Texture. Should return NULL Sprite.
+
+ m_Sprite = Sprite.Create(null, new Rect(0, 0, m_Texture.width, m_Texture.heig`t), new Vector2(0.5f, 0.5f));
+
+ Assert.That(m_Sprite, Is.Null, "Sprite created with null texture should be null");
+
+ }
+}
+```
+
+> **Tip**: Use `#if UNITY_EDITOR` if you want to access Editor only APIs, but the setup/cleanup is inside a **Play Mode** assembly.
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-test-runner-api.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-test-runner-api.md
new file mode 100644
index 00000000..b594f7ef
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-test-runner-api.md
@@ -0,0 +1,23 @@
+# TestRunnerApi
+The `TestRunnerApi` retrieves and runs tests programmatically from code inside the project, or inside other packages. `TestRunnerApi` is a [ScriptableObject](https://docs.unity3d.com/ScriptReference/ScriptableObject.html).
+
+You can initialize the API like this:
+
+```c#
+var testRunnerApi = ScriptableObject.CreateInstance();
+```
+> **Note**: You can subscribe and receive test results in one instance of the API, even if the run starts from another instance.
+
+The `TestRunnerApi` supports the following workflows:
+* [How to run tests programmatically](./extension-run-tests.md)
+* [How to get test results](./extension-get-test-results.md)
+* [How to retrieve the list of tests](./extension-retrieve-test-list.md)
+
+## Public methods
+
+| Syntax | Description |
+| ------------------------------------------ | ------------------------------------------------------------ |
+| `void Execute(ExecutionSettings executionSettings)` | Starts a test run with a given set of [ExecutionSettings](./reference-execution-settings.md). |
+| `void RegisterCallbacks(ICallbacks testCallbacks, int priority = 0)` | Sets up a given instance of [ICallbacks](./reference-icallbacks.md) to be invoked on test runs. |
+| `void UnregisterCallbacks(ICallbacks testCallbacks)` | Unregisters an instance of ICallbacks to no longer receive callbacks from test runs. |
+| `void RetrieveTestList(TestMode testMode, Action callback)` | Retrieve the full test tree as [ITestAdaptor](./reference-itest-adaptor.md) for a given test mode. |
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-test-utils.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-test-utils.md
new file mode 100644
index 00000000..24d4eec8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-test-utils.md
@@ -0,0 +1,40 @@
+# Test Utils
+
+This contains test utility functions for float value comparison and creating primitives.
+
+## Static Methods
+
+| Syntax | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `bool AreFloatsEqual(float expected, float actual, float allowedRelativeError)` | Relative epsilon comparison of two float values for equality. `allowedRelativeError` is the relative error to be used in relative epsilon comparison. The relative error is the absolute error divided by the magnitude of the exact value. Returns `true` if the actual value is equivalent to the expected value. |
+| `bool AreFloatsEqualAbsoluteError(float expected, float actual, float allowedAbsoluteError)` | Compares two floating point numbers for equality under the given absolute tolerance. `allowedAbsoluteError` is the permitted error tolerance. Returns `true` if the actual value is equivalent to the expected value under the given tolerance. |
+| `GameObject CreatePrimitive( type)` | Creates a [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html) with a primitive [MeshRenderer](https://docs.unity3d.com/ScriptReference/MeshRenderer.html). This is an analogue to the [GameObject.CreatePrimitive](https://docs.unity3d.com/ScriptReference/GameObject.CreatePrimitive.html), but creates a primitive `MeshRenderer` with a fast [Shader](https://docs.unity3d.com/ScriptReference/Shader.html) instead of the default built-in `Shader`, optimized for testing performance. `type` is the [primitive type](https://docs.unity3d.com/ScriptReference/PrimitiveType.html) of the required `GameObject`. Returns a `GameObject` with primitive `MeshRenderer` and [Collider](https://docs.unity3d.com/ScriptReference/Collider.html). |
+
+## Example
+
+```c#
+[TestFixture]
+class UtilsTests
+{
+ [Test]
+ public void CheckThat_FloatsAreEqual()
+ {
+ float expected = 10e-8f;
+ float actual = 0f;
+ float allowedRelativeError = 10e-6f;
+
+ Assert.That(Utils.AreFloatsEqual(expected, actual, allowedRelativeError), Is.True);
+ }
+
+ [Test]
+ public void CheckThat_FloatsAreAbsoluteEqual()
+ {
+ float expected = 0f;
+ float actual = 10e-6f;
+ float error = 10e-5f;
+
+ Assert.That(Utils.AreFloatsEqualAbsoluteError(expected, actual, error), Is.True);
+ }
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-tests-monobehaviour.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-tests-monobehaviour.md
new file mode 100644
index 00000000..64093335
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-tests-monobehaviour.md
@@ -0,0 +1,51 @@
+# MonoBehaviour tests
+
+`MonoBehaviourTest` is a [coroutine](https://docs.unity3d.com/ScriptReference/Coroutine.html) and a helper for writing [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html) tests.
+
+Yield a `MonoBehaviourTest` when using the `UnityTest` attribute to instantiate the `MonoBehaviour` you wish to test and wait for it to finish running. Implement the `IMonoBehaviourTest` interface on the `MonoBehaviour` to state when the test completes.
+
+## Example
+
+```c#
+[UnityTest]
+public IEnumerator MonoBehaviourTest_Works()
+{
+ yield return new MonoBehaviourTest();
+}
+
+public class MyMonoBehaviourTest : MonoBehaviour, IMonoBehaviourTest
+{
+ private int frameCount;
+ public bool IsTestFinished
+ {
+ get { return frameCount > 10; }
+ }
+
+ void Update()
+ {
+ frameCount++;
+ }
+}
+```
+
+## MonoBehaviourTest<T>
+
+This is a wrapper that allows running tests on `MonoBehaviour` scripts. Inherits from [CustomYieldInstruction](https://docs.unity3d.com/ScriptReference/CustomYieldInstruction.html).
+
+### Properties
+
+| Syntax | Description |
+| ----------------------- | ------------------------------------------------------------ |
+| `T component` | A `MonoBehaviour` component created for the test and attached to the test’s [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html). |
+| `GameObject gameObject` | A `GameObject` created as a container for the test component. |
+| `bool keepWaiting` | (Inherited) Returns `true` if the test is not finished yet, which keeps the coroutine suspended. |
+
+## IMonoBehaviourTest
+
+An interface implemented by a `MonoBehaviour` test.
+
+### Properties
+
+| Syntax | Description |
+| --------------------- | ----------------------------------------------- |
+| `bool IsTestFinished` | Indicates when the test is considered finished. |
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-tests-parameterized.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-tests-parameterized.md
new file mode 100644
index 00000000..6182bad6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-tests-parameterized.md
@@ -0,0 +1,18 @@
+# Parameterized tests
+
+For data-driven testing, you may want to have your tests parameterized. You may use both the [NUnit](http://www.nunit.org/) attributes [TestCase](https://github.com/nunit/docs/wiki/TestCase-Attribute) and [ValueSource](https://github.com/nunit/docs/wiki/ValueSource-Attribute) with a unit test.
+
+> **Note**: With `UnityTest` it is recommended to use `ValueSource` since `TestCase` is not supported.
+
+## Example
+
+```c#
+static int[] values = new int[] { 1, 5, 6 };
+
+[UnityTest]
+public IEnumerator MyTestWithMultipleValues([ValueSource("values")] int value)
+{
+ yield return null;
+}
+```
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-wait-for-domain-reload.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-wait-for-domain-reload.md
new file mode 100644
index 00000000..8d42e70d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/reference-wait-for-domain-reload.md
@@ -0,0 +1,19 @@
+# WaitForDomainReload
+`WaitForDomainReload` is an [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md) that you can yield in Edit Mode tests. It delays the execution of scripts until after an incoming domain reload. If the domain reload results in a script compilation failure, then it throws an exception.
+
+## Constructors
+
+| Syntax | Description |
+| ---------------------------- | ------------------------------------------------------------ |
+| `WaitForDomainReload()` | Create a new instance of the `WaitForDomainReload` yield instruction. |
+
+## Example
+``` C@
+[UnitySetUp]
+public IEnumerator SetUp()
+{
+ File.Copy("Resources/MyDll.dll", @"Assets/MyDll.dll", true); // Trigger a domain reload.
+ AssetDatabase.Refresh();
+ yield return new WaitForDomainReload();
+}
+```
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/resources.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/resources.md
new file mode 100644
index 00000000..ce261e95
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/resources.md
@@ -0,0 +1,6 @@
+# Resources
+
+Here you can find other related resources to the Unity Test Framework:
+
+* [Performance Benchmarking in Unity: How to Get Started](https://blogs.unity3d.com/2018/09/25/performance-benchmarking-in-unity-how-to-get-started/) [Blog]
+* [Testing Test-Driven Development with the Unity Test Runner](https://blogs.unity3d.com/2018/11/02/testing-test-driven-development-with-the-unity-test-runner/) [Blog]
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-playmode-test.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-playmode-test.md
new file mode 100644
index 00000000..a21b6191
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-playmode-test.md
@@ -0,0 +1,28 @@
+# Workflow: How to create a Play Mode test
+
+To create a **Play Mode** test, you can follow a similar process as when you want to create an **Edit Mode** test.
+
+1. Start with switching to the **PlayMode** tab in the **Test Runner** window.
+2. Create a test assembly folder (see [How to create a new test assembly)](./workflow-create-test-assembly.md). The folder name is *Tests* by default (or *Tests 1*, *Tests 2*, etc. if the preceding name is already in use).
+
+![PlayMode tab](./images/playmode-tab.png)
+
+> **Note**: If you don’t see the **Create Play Mode Test Assembly Folder** button enabled, make sure that in the Project window you navigate out of a folder with another .asmdef (such as one for Edit Mode tests).
+
+3. When you have your Play Mode test assembly folder ready, then [create your Play Mode test](./workflow-create-test.md).
+
+> **Note**: [Pre-defined Unity assemblies](https://docs.unity3d.com/Manual/ScriptCompileOrderFolders.html) (such as _Assembly-CSharp.dll_) do not reference your new assembly.
+
+## References and builds
+
+Unity Test Framework adds a reference to `TestAssemblies` in the [Assembly Definition](https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html) file, but it won't include any other references (e.g., to other scripting assemblies within the Unity project). So you need to add other assemblies yourself if you want to test them too.
+
+Unity does not include `TestAssemblies` in Player builds, but in the Test Runner window, we have such an option. If you need to test code in pre-defined assemblies, you can reference `TestAssemblies` from other assemblies. You must remove these tests after the test run so that Unity does not add them to the final Player build.
+
+To do this, in the Test Runner window choose **Enable playmode tests for all assemblies** option from the drop-down menu (to expand, click on the small list item in the top right corner). In the dialog box, click **OK** to manually restart the Editor.
+
+![Enable Play Mode tests for all assemblies](./images/playmode-enable-all.png)
+
+> **Note**: **Enabling Play Mode tests for all assemblies** includes additional assemblies in your project build, which can increase the project’s size as well as the build time.
+
+For more information, see [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md).
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-test-assembly.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-test-assembly.md
new file mode 100644
index 00000000..eb358969
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-test-assembly.md
@@ -0,0 +1,17 @@
+# Workflow: **How to create a new test assembly**
+
+Unity Test Framework looks for a test inside any assembly that references [NUnit](http://www.nunit.org/). We refer to such assemblies as `TestAssemblies`. The [Test Runner](./getting-started.md) UI can help you set up `TestAssemblies`. **Play Mode** and **Edit Mode** tests need to be in separate assemblies.
+
+In the **Test Runner** window, you will see an **EditMode** tab enabled by default, as well as a **Create EditMode Test Assembly Folder** button.
+
+![Test Runner window EditMode tab](./images/editmode-tab.png)
+
+Click the button to create a *Tests* folder with a respective .asmdef file by default. Change the name of the new [Assembly Definition](https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html), if necessary, and press Enter to accept it.
+
+![New Test folder and assembly file](./images/tests-folder-assembly.png)
+
+In the Inspector window, it should have references to **nunit.framework.dll***,* **UnityEngine.TestRunner,** and **UnityEditor.TestRunner** assemblies, as well as **Editor** preselected as a target platform.
+
+> **Note**: The **UnityEditor.TestRunner** reference is only available for [Edit Mode tests](./edit-mode-vs-play-mode-tests.md#edit-mode-tests).
+
+![Assembly definition import settings](./images/import-settings.png)
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-test.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-test.md
new file mode 100644
index 00000000..612106ee
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-create-test.md
@@ -0,0 +1,36 @@
+# Workflow: How to create a test
+
+To create a test, do the following:
+
+1. Create your *Test* [assembly folder](./workflow-create-test-assembly.md) and select it in the **Project** window.
+2. Click the button **Create Test Script in current folder** option in the **Test Runner** window.
+
+![EditMode create test script](./images/editmode-create-test-script.png)
+
+3. It creates a *NewTestScript.cs* file in the *Tests* folder. Change the name of the script, if necessary, and press Enter to accept it.
+
+![NewTestScript.cs](./images/new-test-script.png)
+
+Now you’ll see two sample tests in the Test Runner window:
+
+![Test templates](./images/test-templates.png)
+
+Now you can open the tests in your favorite script editor.
+
+You can also create test scripts by navigating to **Assets** > **Create > Testing** > **C# Test Script**, unless adding a test script would result in a compilation error.
+
+> **Note**: Unity does not include `TestAssemblies` ([NUnit](http://www.nunit.org/), Unity Test Framework, and user script assemblies) when using the normal build pipeline, but does include them when using **Run on <Platform>** in the Test Runner window.
+
+## Filters
+
+If you have a lot of tests, and you only want to view/run a sub-set of them, you can filter them in three ways (see image above):
+
+* Type in the search box in the top left
+
+* Click a test class or fixture (such as **NewTestScript** in the image above)
+
+* Click one of the test result icon buttons in the top right
+
+
+
+For more information, see [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md).
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-run-playmode-test-standalone.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-run-playmode-test-standalone.md
new file mode 100644
index 00000000..0a2fa815
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-run-playmode-test-standalone.md
@@ -0,0 +1,21 @@
+# Workflow: How to run a Play Mode test in player
+
+If you run a **Play Mode** test in the same way as an [Editor test](./workflow-run-test.md), it runs inside the Unity Editor. You can also run Play Mode tests on specific platforms. Click **Run all in the player** to build and run your tests on the currently active target platform.
+
+![Run PlayMode test in player](./images/playmode-run-standalone.png)
+
+> **Note**: Your current platform displays in brackets on the button. For example, in the image above, the button reads **Run all in player (StandaloneWindows)**, because the current platform is Windows. The target platform is always the current Platform selected in [Build Settings](https://docs.unity3d.com/Manual/BuildSettings.html) (menu: **File** > **Build Settings**).
+
+The test result displays in the build once the test completes:
+
+![Results of PlayMode in player test run](./images/playmode-results-standalone.png)
+
+The application running on the platform reports back the test results to the Editor UI then displays the executed tests and shuts down. To make sure you receive the test results from the Player on your target platform back into the Editor that’s running the test, both should be on the same network.
+
+> **Note:** Some platforms do not support shutting down the application with `Application.Quit`, so it will continue running after reporting the test results.
+
+If Unity cannot instantiate the connection, you can see the tests succeed in the running application. Running tests on platforms with arguments, in this state, does not provide XML test results.
+
+
+
+For more information, see [Edit Mode vs Play Mode tests](./edit-mode-vs-play-mode-tests.md).
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-run-test.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-run-test.md
new file mode 100644
index 00000000..506194b8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/Documentation~/workflow-run-test.md
@@ -0,0 +1,19 @@
+# Workflow: How to run a test
+
+To run a test, you need to double-click on the test or test fixture name in the **Test Runner** window.
+
+You can also use one of the buttons on the top bar, **Run All** or **Run Selected**. As a result, you’ll see the test status icon changed and a counter in the top right corner updated:
+
+![EditMode Run Test](./images/editmode-run-test.png)
+
+You may also use a context menu option **Run**, right-click on any item in the test tree to have it (with all its children if any) run.
+
+![EditMode Run Tests](./images/editmode-run-tests.png)
+
+
+
+## Run tests within Rider
+
+It is possible to run unit tests in the Unity Test Framework directly from [JetBrains Rider](https://www.jetbrains.com/rider/).
+
+For more information, see the [JetBrains official documentation](https://www.jetbrains.com/help/rider/Running_and_Debugging_Unity_Tests.html) and their blog post [Run Unity tests in Rider 2018.1](https://blog.jetbrains.com/dotnet/2018/04/18/run-unity-tests-rider-2018-1/).
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/LICENSE.md b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/LICENSE.md
new file mode 100644
index 00000000..e6a38bf8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/LICENSE.md
@@ -0,0 +1,5 @@
+Test Framework copyright © 2020 Unity Technologies ApS
+
+Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License).
+
+Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions.
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/LICENSE.md.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/LICENSE.md.meta
new file mode 100644
index 00000000..f6a2ca23
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3ec7596410385054a9e0bc90377fbe63
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner.meta
new file mode 100644
index 00000000..d1eb5739
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 95cdf27b47eb82747ba9e51f41e72a35
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api.meta
new file mode 100644
index 00000000..2ffb8f97
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fa423365b1ce06a4dbdc6fb4a8597bfa
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegator.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegator.cs
new file mode 100644
index 00000000..91f2d4cf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegator.cs
@@ -0,0 +1,136 @@
+using System;
+using System.Linq;
+using System.Text;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+using UnityEngine;
+using UnityEngine.TestRunner.TestLaunchers;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal class CallbacksDelegator : ICallbacksDelegator
+ {
+ private static CallbacksDelegator s_instance;
+ public static CallbacksDelegator instance
+ {
+ get
+ {
+ if (s_instance == null)
+ {
+ s_instance = new CallbacksDelegator(CallbacksHolder.instance.GetAll, new TestAdaptorFactory());
+ }
+ return s_instance;
+ }
+ }
+
+ private readonly Func m_CallbacksProvider;
+ private readonly ITestAdaptorFactory m_AdaptorFactory;
+
+ public CallbacksDelegator(Func callbacksProvider, ITestAdaptorFactory adaptorFactory)
+ {
+ m_CallbacksProvider = callbacksProvider;
+ m_AdaptorFactory = adaptorFactory;
+ }
+
+ public void RunStarted(ITest testsToRun)
+ {
+ m_AdaptorFactory.ClearResultsCache();
+ var testRunnerTestsToRun = m_AdaptorFactory.Create(testsToRun);
+ TryInvokeAllCallbacks(callbacks => callbacks.RunStarted(testRunnerTestsToRun));
+ }
+
+ public void RunStartedRemotely(byte[] testsToRunData)
+ {
+ var testData = Deserialize(testsToRunData);
+ var testsToRun = m_AdaptorFactory.BuildTree(testData);
+ TryInvokeAllCallbacks(callbacks => callbacks.RunStarted(testsToRun));
+ }
+
+ public void RunFinished(ITestResult testResults)
+ {
+ var testResult = m_AdaptorFactory.Create(testResults);
+ TryInvokeAllCallbacks(callbacks => callbacks.RunFinished(testResult));
+ }
+
+ public void RunFinishedRemotely(byte[] testResultsData)
+ {
+ var remoteTestResult = Deserialize(testResultsData);
+ var testResult = m_AdaptorFactory.Create(remoteTestResult.results.First(), remoteTestResult);
+ TryInvokeAllCallbacks(callbacks => callbacks.RunFinished(testResult));
+ }
+
+ public void RunFailed(string failureMessage)
+ {
+ Debug.LogError(failureMessage);
+ TryInvokeAllCallbacks(callbacks =>
+ {
+ var errorCallback = callbacks as IErrorCallbacks;
+ if (errorCallback != null)
+ {
+ errorCallback.OnError(failureMessage);
+ }
+ });
+ }
+
+ public void TestStarted(ITest test)
+ {
+ var testRunnerTest = m_AdaptorFactory.Create(test);
+ TryInvokeAllCallbacks(callbacks => callbacks.TestStarted(testRunnerTest));
+ }
+
+ public void TestStartedRemotely(byte[] testStartedData)
+ {
+ var testData = Deserialize(testStartedData);
+ var testsToRun = m_AdaptorFactory.BuildTree(testData);
+
+ TryInvokeAllCallbacks(callbacks => callbacks.TestStarted(testsToRun));
+ }
+
+ public void TestFinished(ITestResult result)
+ {
+ var testResult = m_AdaptorFactory.Create(result);
+ TryInvokeAllCallbacks(callbacks => callbacks.TestFinished(testResult));
+ }
+
+ public void TestFinishedRemotely(byte[] testResultsData)
+ {
+ var remoteTestResult = Deserialize(testResultsData);
+ var testResult = m_AdaptorFactory.Create(remoteTestResult.results.First(), remoteTestResult);
+ TryInvokeAllCallbacks(callbacks => callbacks.TestFinished(testResult));
+ }
+
+ public void TestTreeRebuild(ITest test)
+ {
+ m_AdaptorFactory.ClearTestsCache();
+ var testAdaptor = m_AdaptorFactory.Create(test);
+ TryInvokeAllCallbacks(callbacks =>
+ {
+ var rebuildCallbacks = callbacks as ITestTreeRebuildCallbacks;
+ if (rebuildCallbacks != null)
+ {
+ rebuildCallbacks.TestTreeRebuild(testAdaptor);
+ }
+ });
+ }
+
+ private void TryInvokeAllCallbacks(Action callbackAction)
+ {
+ foreach (var testRunnerApiCallback in m_CallbacksProvider())
+ {
+ try
+ {
+ callbackAction(testRunnerApiCallback);
+ }
+ catch (Exception ex)
+ {
+ Debug.LogException(ex);
+ }
+ }
+ }
+
+ private static T Deserialize(byte[] data)
+ {
+ return JsonUtility.FromJson(Encoding.UTF8.GetString(data));
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta
new file mode 100644
index 00000000..89e09046
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0de03ebd74e2b474fa23d05ab42d0cd8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs
new file mode 100644
index 00000000..c19621d5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs
@@ -0,0 +1,28 @@
+using UnityEngine;
+using UnityEngine.TestTools.TestRunner;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal class CallbacksDelegatorListener : ScriptableObject, ITestRunnerListener
+ {
+ public void RunStarted(NUnit.Framework.Interfaces.ITest testsToRun)
+ {
+ CallbacksDelegator.instance.RunStarted(testsToRun);
+ }
+
+ public void RunFinished(NUnit.Framework.Interfaces.ITestResult testResults)
+ {
+ CallbacksDelegator.instance.RunFinished(testResults);
+ }
+
+ public void TestStarted(NUnit.Framework.Interfaces.ITest test)
+ {
+ CallbacksDelegator.instance.TestStarted(test);
+ }
+
+ public void TestFinished(NUnit.Framework.Interfaces.ITestResult result)
+ {
+ CallbacksDelegator.instance.TestFinished(result);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta
new file mode 100644
index 00000000..c9bb94a3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f3e1b3cbf3fac6a459b1a602167ad311
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksHolder.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksHolder.cs
new file mode 100644
index 00000000..5df378d5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksHolder.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal class CallbacksHolder : ScriptableSingleton, ICallbacksHolder
+ {
+ private List m_Callbacks = new List();
+ public void Add(ICallbacks callback, int priority)
+ {
+ m_Callbacks.Add(new CallbackWithPriority(callback, priority));
+ }
+
+ public void Remove(ICallbacks callback)
+ {
+ m_Callbacks.RemoveAll(callbackWithPriority => callbackWithPriority.Callback == callback);
+ }
+
+ public ICallbacks[] GetAll()
+ {
+ return m_Callbacks.OrderByDescending(callback => callback.Priority).Select(callback => callback.Callback).ToArray();
+ }
+
+ public void Clear()
+ {
+ m_Callbacks.Clear();
+ }
+
+ private struct CallbackWithPriority
+ {
+ public ICallbacks Callback;
+ public int Priority;
+ public CallbackWithPriority(ICallbacks callback, int priority)
+ {
+ Callback = callback;
+ Priority = priority;
+ }
+ }
+
+ // Sometimes - such as when we want to test the test framework itself - it's necessary to launch a test run from
+ // inside a test. Because callbacks are registered globally, this can cause a lot of confusion (e.g. the in-test
+ // run will emit UTP messages, utterly confusing UTR). In such circumstances the safest thing to do is to
+ // temporarily suppress all registered callbacks for the duration of the in-test run. This method can be called
+ // to set up a using() block which will suppress the callbacks for the scope.
+ public IDisposable TemporarilySuppressCallbacks()
+ {
+ return new Suppressor(this);
+ }
+
+ private sealed class Suppressor : IDisposable
+ {
+ private readonly CallbacksHolder _instance;
+ private readonly List _suppressed;
+
+ public Suppressor(CallbacksHolder instance)
+ {
+ _instance = instance;
+ _suppressed = new List(instance.m_Callbacks);
+ instance.m_Callbacks.Clear();
+ }
+
+ public void Dispose()
+ {
+ _instance.m_Callbacks.AddRange(_suppressed);
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta
new file mode 100644
index 00000000..7c420282
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4884ccc3528cb2e40a0e6f0a19a2b35b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ExecutionSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ExecutionSettings.cs
new file mode 100644
index 00000000..4cbb34b0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ExecutionSettings.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Linq;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal.Filters;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// A set of execution settings defining how to run tests, using the .
+ ///
+ [Serializable]
+ public class ExecutionSettings
+ {
+ ///
+ /// Creates an instance with a given set of filters, if any.
+ ///
+ /// Set of filters
+ public ExecutionSettings(params Filter[] filtersToExecute)
+ {
+ filters = filtersToExecute;
+ }
+
+ [SerializeField]
+ internal BuildTarget? targetPlatform;
+
+ ///
+ /// An instance of to set up before running tests on a Player.
+ ///
+ // Note: Is not available after serialization
+ public ITestRunSettings overloadTestRunSettings;
+
+ [SerializeField]
+ internal Filter filter;
+ ///
+ ///A collection of to execute tests on.
+ ///
+ [SerializeField]
+ public Filter[] filters;
+ ///
+ /// Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. [UnityTest] tests, or tests with [UnitySetUp] or [UnityTearDown] scaffolding) will be filtered out.
+ ///
+ /// If true, the call to Execute() will run tests synchronously, guaranteeing that all tests have finished running by the time the call returns.
+ [SerializeField]
+ public bool runSynchronously;
+ ///
+ /// The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes.
+ ///
+ [SerializeField]
+ public int playerHeartbeatTimeout = 60*10;
+
+ internal bool EditModeIncluded()
+ {
+ return filters.Any(f => IncludesTestMode(f.testMode, TestMode.EditMode));
+ }
+
+ internal bool PlayModeInEditorIncluded()
+ {
+ return filters.Any(f => IncludesTestMode(f.testMode, TestMode.PlayMode) && targetPlatform == null);
+ }
+
+ internal bool PlayerIncluded()
+ {
+ return filters.Any(f => IncludesTestMode(f.testMode, TestMode.PlayMode) && targetPlatform != null);
+ }
+
+ private static bool IncludesTestMode(TestMode testMode, TestMode modeToCheckFor)
+ {
+ return (testMode & modeToCheckFor) == modeToCheckFor;
+ }
+
+ internal ITestFilter BuildNUnitFilter()
+ {
+ return new OrFilter(filters.Select(f => f.ToRuntimeTestRunnerFilter(runSynchronously).BuildNUnitFilter()).ToArray());
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta
new file mode 100644
index 00000000..602a117c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eea34a28297f9bc4c9f4c573bc8d5d1c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/Filter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/Filter.cs
new file mode 100644
index 00000000..2886abc0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/Filter.cs
@@ -0,0 +1,56 @@
+using System;
+using UnityEngine;
+using UnityEngine.TestTools.TestRunner.GUI;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// The filter class provides the with a specification of what tests to run when [running tests programmatically](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-run-tests.html).
+ ///
+ [Serializable]
+ public class Filter
+ {
+ ///
+ /// An enum flag that specifies if Edit Mode or Play Mode tests should run.
+ ///
+ [SerializeField]
+ public TestMode testMode;
+ ///
+ /// The full name of the tests to match the filter. This is usually in the format FixtureName.TestName. If the test has test arguments, then include them in parenthesis. E.g. MyTestClass2.MyTestWithMultipleValues(1).
+ ///
+ [SerializeField]
+ public string[] testNames;
+ ///
+ /// The same as testNames, except that it allows for Regex. This is useful for running specific fixtures or namespaces. E.g. "^MyNamespace\\." Runs any tests where the top namespace is MyNamespace.
+ ///
+ [SerializeField]
+ public string[] groupNames;
+ ///
+ /// The name of a [Category](https://nunit.org/docs/2.2.7/category.html) to include in the run. Any test or fixtures runs that have a Category matching the string.
+ ///
+ [SerializeField]
+ public string[] categoryNames;
+ ///
+ /// The name of assemblies included in the run. That is the assembly name, without the .dll file extension. E.g., MyTestAssembly
+ ///
+ [SerializeField]
+ public string[] assemblyNames;
+ ///
+ /// The platform to run the test on. If set to null, then the Editor is the target for the tests.
+ ///
+ [SerializeField]
+ public BuildTarget? targetPlatform;
+
+ internal RuntimeTestRunnerFilter ToRuntimeTestRunnerFilter(bool synchronousOnly)
+ {
+ return new RuntimeTestRunnerFilter()
+ {
+ testNames = testNames,
+ categoryNames = categoryNames,
+ groupNames = groupNames,
+ assemblyNames = assemblyNames,
+ synchronousOnly = synchronousOnly
+ };
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/Filter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/Filter.cs.meta
new file mode 100644
index 00000000..bbb21b58
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/Filter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 05f92e4a2414cb144a92157752dfa324
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacks.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacks.cs
new file mode 100644
index 00000000..b045a392
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacks.cs
@@ -0,0 +1,29 @@
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// Callbacks in the for the test stages when running tests.
+ ///
+ public interface ICallbacks
+ {
+ ///
+ /// A callback invoked when a test run is started.
+ ///
+ /// The full loaded test tree.
+ void RunStarted(ITestAdaptor testsToRun);
+ ///
+ /// A callback invoked when a test run is finished.
+ ///
+ /// The result of the test run.
+ void RunFinished(ITestResultAdaptor result);
+ ///
+ /// A callback invoked when each individual node of the test tree has started executing.
+ ///
+ /// The test node currently executed.
+ void TestStarted(ITestAdaptor test);
+ ///
+ /// A callback invoked when each individual node of the test tree has finished executing.
+ ///
+ /// The result of the test tree node after it had been executed.
+ void TestFinished(ITestResultAdaptor result);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacks.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacks.cs.meta
new file mode 100644
index 00000000..851e3f68
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacks.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 93eea84e53d0226479c9a584f19427b5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs
new file mode 100644
index 00000000..9005c460
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs
@@ -0,0 +1,18 @@
+using NUnit.Framework.Interfaces;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal interface ICallbacksDelegator
+ {
+ void RunStarted(ITest testsToRun);
+ void RunStartedRemotely(byte[] testsToRunData);
+ void RunFinished(ITestResult testResults);
+ void RunFinishedRemotely(byte[] testResultsData);
+ void RunFailed(string failureMessage);
+ void TestStarted(ITest test);
+ void TestStartedRemotely(byte[] testStartedData);
+ void TestFinished(ITestResult result);
+ void TestFinishedRemotely(byte[] testResultsData);
+ void TestTreeRebuild(ITest test);
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta
new file mode 100644
index 00000000..fb264591
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8f8f74fe8e363da42875d9cab025d3b2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksHolder.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksHolder.cs
new file mode 100644
index 00000000..ff7128b0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksHolder.cs
@@ -0,0 +1,10 @@
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal interface ICallbacksHolder
+ {
+ void Add(ICallbacks callback, int priority);
+ void Remove(ICallbacks callback);
+ ICallbacks[] GetAll();
+ void Clear();
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta
new file mode 100644
index 00000000..7f11d808
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d742f2caefd9f934d9f19dad07a08e6f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/IErrorCallbacks.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/IErrorCallbacks.cs
new file mode 100644
index 00000000..8e8782cb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/IErrorCallbacks.cs
@@ -0,0 +1,16 @@
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// An extended version of the , which get invoked if the test run fails due to a build error or if any has a failure.
+ ///
+ public interface IErrorCallbacks : ICallbacks
+ {
+ ///
+ /// Method invoked on failure.
+ ///
+ ///
+ /// The error message detailing the reason for the run to fail.
+ ///
+ void OnError(string message);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta
new file mode 100644
index 00000000..34728c61
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1a06c562b0c5eb046bcb876a29f93c98
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptor.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptor.cs
new file mode 100644
index 00000000..fa67d767
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptor.cs
@@ -0,0 +1,100 @@
+using System.Collections.Generic;
+using NUnit.Framework.Interfaces;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// ```ITestAdaptor``` is a representation of a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITest.cs) interface.
+ ///
+ public interface ITestAdaptor
+ {
+ ///
+ /// The ID of the test tree node. The ID can change if you add new tests to the suite. Use UniqueName, if you want to have a more permanent point of reference.
+ ///
+ string Id { get; }
+ ///
+ /// The name of the test. E.g.,```MyTest```.
+ ///
+ string Name { get; }
+ ///
+ /// The full name of the test. E.g., ```MyNamespace.MyTestClass.MyTest```.
+ ///
+ string FullName { get; }
+ ///
+ /// The total number of test cases in the node and all sub-nodes.
+ ///
+ int TestCaseCount { get; }
+ ///
+ /// Whether the node has any children.
+ ///
+ bool HasChildren { get; }
+ ///
+ /// True if the node is a test suite/fixture, false otherwise.
+ ///
+ bool IsSuite { get; }
+ ///
+ /// The child nodes.
+ ///
+ IEnumerable Children { get; }
+ ///
+ /// The parent node, if any.
+ ///
+ ITestAdaptor Parent { get; }
+ ///
+ /// The test case timeout in milliseconds. Note that this value is only available on TestFinished.
+ ///
+ int TestCaseTimeout { get; }
+ ///
+ /// The type of test class as an ```NUnit``` . If the node is not a test class, then the value is null.
+ ///
+ ITypeInfo TypeInfo { get; }
+ ///
+ /// The Nunit of the test method. If the node is not a test method, then the value is null.
+ ///
+ IMethodInfo Method { get; }
+ ///
+ /// An array of the categories applied to the test or fixture.
+ ///
+ string[] Categories { get; }
+ ///
+ /// Returns true if the node represents a test assembly, false otherwise.
+ ///
+ bool IsTestAssembly { get; }
+ ///
+ /// The run state of the test node. Either ```NotRunnable```, ```Runnable```, ```Explicit```, ```Skipped```, or ```Ignored```.
+ ///
+ RunState RunState { get; }
+ ///
+ /// The description of the test.
+ ///
+ string Description { get; }
+ ///
+ /// The skip reason. E.g., if ignoring the test.
+ ///
+ string SkipReason { get; }
+ ///
+ /// The ID of the parent node.
+ ///
+ string ParentId { get; }
+ ///
+ /// The full name of the parent node.
+ ///
+ string ParentFullName { get; }
+ ///
+ /// A unique generated name for the test node. E.g., ```Tests.dll/MyNamespace/MyTestClass/[Tests][MyNamespace.MyTestClass.MyTest]```.
+ ///
+ string UniqueName { get; }
+ ///
+ /// A unique name of the parent node. E.g., ```Tests.dll/MyNamespace/[Tests][MyNamespace.MyTestClass][suite]```.
+ ///
+ string ParentUniqueName { get; }
+ ///
+ /// The child index of the node in its parent.
+ ///
+ int ChildIndex { get; }
+ ///
+ /// The mode of the test. Either **Edit Mode** or **Play Mode**.
+ ///
+ TestMode TestMode { get; }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta
new file mode 100644
index 00000000..2ae45afd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 85dd7af03f02aea4aae13a3945e3b313
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs
new file mode 100644
index 00000000..021b3135
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs
@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+using NUnit.Framework.Interfaces;
+using UnityEngine.TestRunner.TestLaunchers;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal interface ITestAdaptorFactory
+ {
+ ITestAdaptor Create(ITest test);
+ ITestAdaptor Create(RemoteTestData testData);
+ ITestResultAdaptor Create(ITestResult testResult);
+ ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData);
+ ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data);
+ IEnumerator BuildTreeAsync(RemoteTestResultDataWithTestData data);
+ void ClearResultsCache();
+ void ClearTestsCache();
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta
new file mode 100644
index 00000000..05dadbac
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 803abab0f7e17044db56f8760186dbd1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs
new file mode 100644
index 00000000..6dbac5b5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using NUnit.Framework.Interfaces;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// The `ITestResultAdaptor` is the representation of the test results for a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITestResults.cs) interface.
+ ///
+ public interface ITestResultAdaptor
+ {
+ ///
+ /// The test details of the test result tree node as a
+ ///
+ ITestAdaptor Test { get; }
+ ///
+ ///The name of the test node.
+ ///
+ string Name { get; }
+ ///
+ /// Gets the full name of the test result
+ ///
+ ///
+ ///The name of the test result.
+ ///
+ string FullName { get; }
+ ///
+ ///Gets the state of the result as a string.
+ ///
+ ///
+ ///It returns one of these values: `Success`, `Skipped`, `Failure`, `Explicit`, `Cancelled`
+ ///
+ string ResultState { get; }
+ ///
+ ///Gets the status of the test as an enum.
+ ///
+ ///
+ ///It returns one of these values:`Inconclusive`, `Skipped`, `Passed`, or `Failed`
+ ///
+ TestStatus TestStatus { get; }
+ ///
+ /// Gets the elapsed time for running the test in seconds
+ ///
+ ///
+ /// Time in seconds.
+ ///
+ double Duration { get; }
+ ///
+ /// Gets or sets the time the test started running.
+ ///
+ ///
+ ///A DataTime object.
+ ///
+ DateTime StartTime { get; }
+ ///
+ ///Gets or sets the time the test finished running.
+ ///
+ ///
+ ///A DataTime object.
+ ///
+ DateTime EndTime { get; }
+
+ ///
+ /// The message associated with a test failure or with not running the test
+ ///
+ string Message { get; }
+
+ ///
+ /// Any stacktrace associated with an error or failure. Not available in the Compact Framework 1.0.
+ ///
+ string StackTrace { get; }
+
+ ///
+ /// The number of asserts executed when running the test and all its children.
+ ///
+ int AssertCount { get; }
+
+ ///
+ /// The number of test cases that failed when running the test and all its children.
+ ///
+ int FailCount { get; }
+
+ ///
+ /// The number of test cases that passed when running the test and all its children.
+ ///
+ int PassCount { get; }
+
+ ///
+ /// The number of test cases that were skipped when running the test and all its children.
+ ///
+ int SkipCount { get; }
+
+ ///
+ ///The number of test cases that were inconclusive when running the test and all its children.
+ ///
+ int InconclusiveCount { get; }
+
+ ///
+ /// Accessing HasChildren should not force creation of the Children collection in classes implementing this interface.
+ ///
+ /// True if this result has any child results.
+ bool HasChildren { get; }
+
+ ///
+ /// Gets the the collection of child results.
+ ///
+ IEnumerable Children { get; }
+
+ ///
+ /// Gets any text output written to this result.
+ ///
+ string Output { get; }
+ ///
+ /// Use this to save the results to an XML file
+ ///
+ ///
+ /// The test results as an `NUnit` XML node.
+ ///
+ TNode ToXml();
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta
new file mode 100644
index 00000000..5ea944f1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4f90cfe4bf5cfb44f84a5b11387f2a42
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunSettings.cs
new file mode 100644
index 00000000..0dab9313
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunSettings.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// ITestRunSettings lets you set any of the global settings right before building a Player for a test run and then reverts the settings afterward. ITestRunSettings implements
+ /// [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable?view=netframework-4.8), and runs after building the Player with tests.
+ ///
+ public interface ITestRunSettings : IDisposable
+ {
+ ///
+ /// A method called before building the Player.
+ ///
+ void Apply();
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta
new file mode 100644
index 00000000..27a3a332
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2ae2ce6274819484fa8747a28cebdf3a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunnerApi.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunnerApi.cs
new file mode 100644
index 00000000..da3ffddf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunnerApi.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal interface ITestRunnerApi
+ {
+ string Execute(ExecutionSettings executionSettings);
+ void RegisterCallbacks(T testCallbacks, int priority = 0) where T : ICallbacks;
+ void UnregisterCallbacks(T testCallbacks) where T : ICallbacks;
+ void RetrieveTestList(TestMode testMode, Action callback);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta
new file mode 100644
index 00000000..d581ffdb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a7842a837a4b13e41ae16193db753418
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs
new file mode 100644
index 00000000..cc5a3018
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs
@@ -0,0 +1,7 @@
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal interface ITestTreeRebuildCallbacks : ICallbacks
+ {
+ void TestTreeRebuild(ITestAdaptor test);
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta
new file mode 100644
index 00000000..eb1117cf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4230e406313f1db43a4b548e7a3ad2e2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/RunState.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/RunState.cs
new file mode 100644
index 00000000..e2df6612
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/RunState.cs
@@ -0,0 +1,33 @@
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// The RunState enum indicates whether a test can be executed.
+ ///
+ public enum RunState
+ {
+ ///
+ /// The test is not runnable.
+ ///
+ NotRunnable,
+
+ ///
+ /// The test is runnable.
+ ///
+ Runnable,
+
+ ///
+ /// The test can only be run explicitly
+ ///
+ Explicit,
+
+ ///
+ /// The test has been skipped. This value may appear on a Test when certain attributes are used to skip the test.
+ ///
+ Skipped,
+
+ ///
+ /// The test has been ignored. May appear on a Test, when the IgnoreAttribute is used.
+ ///
+ Ignored,
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/RunState.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/RunState.cs.meta
new file mode 100644
index 00000000..818e3c02
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/RunState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8bb59cb2f66d156418ca1bd1e2703233
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptor.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptor.cs
new file mode 100644
index 00000000..556bb0c0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptor.cs
@@ -0,0 +1,142 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+using UnityEngine.TestRunner.NUnitExtensions;
+using UnityEngine.TestRunner.NUnitExtensions.Runner;
+using UnityEngine.TestRunner.TestLaunchers;
+using UnityEngine.TestTools.Utils;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal class TestAdaptor : ITestAdaptor
+ {
+ internal TestAdaptor(ITest test, ITestAdaptor[] children = null)
+ {
+ Id = test.Id;
+ Name = test.Name;
+ var childIndex = -1;
+ if (test.Properties["childIndex"].Count > 0)
+ {
+ childIndex = (int)test.Properties["childIndex"][0];
+ }
+ FullName = childIndex != -1 ? GetIndexedTestCaseName(test.FullName, childIndex) : test.FullName;
+ TestCaseCount = test.TestCaseCount;
+ HasChildren = test.HasChildren;
+ IsSuite = test.IsSuite;
+ if (UnityTestExecutionContext.CurrentContext != null)
+ {
+ TestCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout;
+ }
+ else
+ {
+ TestCaseTimeout = CoroutineRunner.k_DefaultTimeout;
+ }
+
+ TypeInfo = test.TypeInfo;
+ Method = test.Method;
+ Categories = test.GetAllCategoriesFromTest().Distinct().ToArray();
+ IsTestAssembly = test is TestAssembly;
+ RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString());
+ Description = (string)test.Properties.Get(PropertyNames.Description);
+ SkipReason = test.GetSkipReason();
+ ParentId = test.GetParentId();
+ ParentFullName = test.GetParentFullName();
+ UniqueName = test.GetUniqueName();
+ ParentUniqueName = test.GetParentUniqueName();
+ ChildIndex = childIndex;
+
+ if (test.Parent != null)
+ {
+ if (test.Parent.Parent == null) // Assembly level
+ {
+ TestMode = (TestMode)Enum.Parse(typeof(TestMode),test.Properties.Get("platform").ToString());
+ }
+ }
+
+ Children = children;
+ }
+
+ public void SetParent(ITestAdaptor parent)
+ {
+ Parent = parent;
+ if (parent != null)
+ {
+ TestMode = parent.TestMode;
+ }
+ }
+
+ internal TestAdaptor(RemoteTestData test)
+ {
+ Id = test.id;
+ Name = test.name;
+ FullName = test.ChildIndex != -1 ? GetIndexedTestCaseName(test.fullName, test.ChildIndex) : test.fullName;
+ TestCaseCount = test.testCaseCount;
+ HasChildren = test.hasChildren;
+ IsSuite = test.isSuite;
+ m_ChildrenIds = test.childrenIds;
+ TestCaseTimeout = test.testCaseTimeout;
+ Categories = test.Categories;
+ IsTestAssembly = test.IsTestAssembly;
+ RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString());
+ Description = test.Description;
+ SkipReason = test.SkipReason;
+ ParentId = test.ParentId;
+ UniqueName = test.UniqueName;
+ ParentUniqueName = test.ParentUniqueName;
+ ParentFullName = test.ParentFullName;
+ ChildIndex = test.ChildIndex;
+ TestMode = TestMode.PlayMode;
+ }
+
+ internal void ApplyChildren(IEnumerable allTests)
+ {
+ Children = m_ChildrenIds.Select(id => allTests.First(t => t.Id == id)).ToArray();
+ if (!string.IsNullOrEmpty(ParentId))
+ {
+ Parent = allTests.FirstOrDefault(t => t.Id == ParentId);
+ }
+ }
+
+ public string Id { get; private set; }
+ public string Name { get; private set; }
+ public string FullName { get; private set; }
+ public int TestCaseCount { get; private set; }
+ public bool HasChildren { get; private set; }
+ public bool IsSuite { get; private set; }
+ public IEnumerable Children { get; private set; }
+ public ITestAdaptor Parent { get; private set; }
+ public int TestCaseTimeout { get; private set; }
+ public ITypeInfo TypeInfo { get; private set; }
+ public IMethodInfo Method { get; private set; }
+ private string[] m_ChildrenIds;
+ public string[] Categories { get; private set; }
+ public bool IsTestAssembly { get; private set; }
+ public RunState RunState { get; }
+ public string Description { get; }
+ public string SkipReason { get; }
+ public string ParentId { get; }
+ public string ParentFullName { get; }
+ public string UniqueName { get; }
+ public string ParentUniqueName { get; }
+ public int ChildIndex { get; }
+ public TestMode TestMode { get; private set; }
+
+ private static string GetIndexedTestCaseName(string fullName, int index)
+ {
+ var generatedTestSuffix = " GeneratedTestCase" + index;
+ if (fullName.EndsWith(")"))
+ {
+ // Test names from generated TestCaseSource look like Test(TestCaseSourceType)
+ // This inserts a unique test case index in the name, so that it becomes Test(TestCaseSourceType GeneratedTestCase0)
+ return fullName.Substring(0, fullName.Length - 1) + generatedTestSuffix + fullName[fullName.Length - 1];
+ }
+
+ // In some cases there can be tests with duplicate names generated in other ways and they won't have () in their name
+ // We just append a suffix at the end of the name in that case
+ return fullName + generatedTestSuffix;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta
new file mode 100644
index 00000000..81e39b71
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6e0e62db88935c74288c97c907243bd0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs
new file mode 100644
index 00000000..7a25ec84
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs
@@ -0,0 +1,91 @@
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework.Interfaces;
+using UnityEngine.TestRunner.NUnitExtensions;
+using UnityEngine.TestRunner.TestLaunchers;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal class TestAdaptorFactory : ITestAdaptorFactory
+ {
+ private Dictionary m_TestAdaptorCache = new Dictionary();
+ private Dictionary m_TestResultAdaptorCache = new Dictionary();
+ public ITestAdaptor Create(ITest test)
+ {
+ var uniqueName = test.GetUniqueName();
+ if (m_TestAdaptorCache.ContainsKey(uniqueName))
+ {
+ return m_TestAdaptorCache[uniqueName];
+ }
+
+ var adaptor = new TestAdaptor(test, test.Tests.Select(Create).ToArray());
+ foreach (var child in adaptor.Children)
+ {
+ (child as TestAdaptor).SetParent(adaptor);
+ }
+ m_TestAdaptorCache[uniqueName] = adaptor;
+ return adaptor;
+ }
+
+ public ITestAdaptor Create(RemoteTestData testData)
+ {
+ return new TestAdaptor(testData);
+ }
+
+ public ITestResultAdaptor Create(ITestResult testResult)
+ {
+ var uniqueName = testResult.Test.GetUniqueName();
+ if (m_TestResultAdaptorCache.ContainsKey(uniqueName))
+ {
+ return m_TestResultAdaptorCache[uniqueName];
+ }
+ var adaptor = new TestResultAdaptor(testResult, Create(testResult.Test), testResult.Children.Select(Create).ToArray());
+ m_TestResultAdaptorCache[uniqueName] = adaptor;
+ return adaptor;
+ }
+
+ public ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData)
+ {
+ return new TestResultAdaptor(testResult, allData);
+ }
+
+ public ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data)
+ {
+ var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList();
+
+ foreach (var test in tests)
+ {
+ test.ApplyChildren(tests);
+ }
+
+ return tests.First();
+ }
+
+ public IEnumerator BuildTreeAsync(RemoteTestResultDataWithTestData data)
+ {
+ var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList();
+
+ for (var index = 0; index < tests.Count; index++)
+ {
+ var test = tests[index];
+ test.ApplyChildren(tests);
+ if (index % 100 == 0)
+ {
+ yield return null;
+ }
+ }
+
+ yield return tests.First();
+ }
+
+ public void ClearResultsCache()
+ {
+ m_TestResultAdaptorCache.Clear();
+ }
+
+ public void ClearTestsCache()
+ {
+ m_TestAdaptorCache.Clear();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta
new file mode 100644
index 00000000..0b1175fd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d0663d520c26b7c48a4135599e66acf8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestMode.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestMode.cs
new file mode 100644
index 00000000..e7a365e9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestMode.cs
@@ -0,0 +1,20 @@
+using System;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// A flag indicating whether to run Edit Mode or Play Mode tests.
+ ///
+ [Flags]
+ public enum TestMode
+ {
+ ///
+ /// Run EditMode tests.
+ ///
+ EditMode = 1 << 0,
+ ///
+ /// Run PlayMode tests.
+ ///
+ PlayMode = 1 << 1
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestMode.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestMode.cs.meta
new file mode 100644
index 00000000..e04594b9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestMode.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cad095eccea17b741bc4cd264e7441cd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestResultAdaptor.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestResultAdaptor.cs
new file mode 100644
index 00000000..7374b3fd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestResultAdaptor.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework.Interfaces;
+using UnityEngine.TestRunner.TestLaunchers;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ internal class TestResultAdaptor : ITestResultAdaptor
+ {
+ private TNode m_Node;
+
+ internal TestResultAdaptor(ITestResult result, ITestAdaptor test, ITestResultAdaptor[] children = null)
+ {
+ Test = test;
+ Name = result.Name;
+ FullName = result.FullName;
+ ResultState = result.ResultState.ToString();
+ TestStatus = ParseTestStatus(result.ResultState.Status);
+ Duration = result.Duration;
+ StartTime = result.StartTime;
+ EndTime = result.EndTime;
+ Message = result.Message;
+ StackTrace = result.StackTrace;
+ AssertCount = result.AssertCount;
+ FailCount = result.FailCount;
+ PassCount = result.PassCount;
+ SkipCount = result.SkipCount;
+ InconclusiveCount = result.InconclusiveCount;
+ HasChildren = result.HasChildren;
+ Output = result.Output;
+ Children = children;
+ m_Node = result.ToXml(true);
+ }
+
+ internal TestResultAdaptor(RemoteTestResultData result, RemoteTestResultDataWithTestData allData)
+ {
+ Test = new TestAdaptor(allData.tests.First(t => t.id == result.testId));
+ Name = result.name;
+ FullName = result.fullName;
+ ResultState = result.resultState;
+ TestStatus = ParseTestStatus(result.testStatus);
+ Duration = result.duration;
+ StartTime = result.startTime;
+ EndTime = result.endTime;
+ Message = result.message;
+ StackTrace = result.stackTrace;
+ AssertCount = result.assertCount;
+ FailCount = result.failCount;
+ PassCount = result.passCount;
+ SkipCount = result.skipCount;
+ InconclusiveCount = result.inconclusiveCount;
+ HasChildren = result.hasChildren;
+ Output = result.output;
+ Children = result.childrenIds.Select(childId => new TestResultAdaptor(allData.results.First(r => r.testId == childId), allData)).ToArray();
+ m_Node = TNode.FromXml(result.xml);
+ }
+
+ public ITestAdaptor Test { get; private set; }
+ public string Name { get; private set; }
+ public string FullName { get; private set; }
+ public string ResultState { get; private set; }
+ public TestStatus TestStatus { get; private set; }
+ public double Duration { get; private set; }
+ public DateTime StartTime { get; private set; }
+ public DateTime EndTime { get; private set; }
+ public string Message { get; private set; }
+ public string StackTrace { get; private set; }
+ public int AssertCount { get; private set; }
+ public int FailCount { get; private set; }
+ public int PassCount { get; private set; }
+ public int SkipCount { get; private set; }
+ public int InconclusiveCount { get; private set; }
+ public bool HasChildren { get; private set; }
+ public IEnumerable Children { get; private set; }
+ public string Output { get; private set; }
+ public TNode ToXml()
+ {
+ return m_Node;
+ }
+
+ private static TestStatus ParseTestStatus(NUnit.Framework.Interfaces.TestStatus testStatus)
+ {
+ return (TestStatus)Enum.Parse(typeof(TestStatus), testStatus.ToString());
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta
new file mode 100644
index 00000000..c2b119e2
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d061ada5d3169454daf54243390b5fdb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestRunnerApi.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestRunnerApi.cs
new file mode 100644
index 00000000..8757c8ca
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestRunnerApi.cs
@@ -0,0 +1,158 @@
+using System;
+using System.Linq;
+using System.Threading;
+using UnityEditor.TestTools.TestRunner.CommandLineTest;
+using UnityEditor.TestTools.TestRunner.TestRun;
+using UnityEngine;
+using UnityEngine.TestRunner.TestLaunchers;
+using UnityEngine.TestTools;
+using UnityEngine.TestTools.NUnitExtensions;
+
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// The TestRunnerApi retrieves and runs tests programmatically from code inside the project, or inside other packages. TestRunnerApi is a [ScriptableObject](https://docs.unity3d.com/ScriptReference/ScriptableObject.html).
+ ///You can initialize the API like this:
+ /// ```
+ /// var testRunnerApi = ScriptableObject.CreateInstance<TestRunnerApi>();
+ /// ```
+ /// Note: You can subscribe and receive test results in one instance of the API, even if the run starts from another instance.
+ /// The TestRunnerApi supports the following workflows:
+ /// - [How to run tests programmatically](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-run-tests.html)
+ /// - [How to get test results](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-get-test-results.html)
+ /// - [How to retrieve the list of tests](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-retrieve-test-list.html)
+ ///
+ public class TestRunnerApi : ScriptableObject, ITestRunnerApi
+ {
+ internal ICallbacksHolder callbacksHolder;
+
+ private ICallbacksHolder m_CallbacksHolder
+ {
+ get
+ {
+ if (callbacksHolder == null)
+ {
+ return CallbacksHolder.instance;
+ }
+
+ return callbacksHolder;
+ }
+ }
+
+ internal Func ScheduleJob = (executionSettings) =>
+ {
+ var runner = new TestJobRunner();
+ return runner.RunJob(new TestJobData(executionSettings));
+ };
+ ///
+ /// Starts a test run with a given set of executionSettings.
+ ///
+ /// Set of
+ /// A GUID that identifies the TestJobData.
+ public string Execute(ExecutionSettings executionSettings)
+ {
+ if (executionSettings == null)
+ {
+ throw new ArgumentNullException(nameof(executionSettings));
+ }
+
+ if ((executionSettings.filters == null || executionSettings.filters.Length == 0) && executionSettings.filter != null)
+ {
+ // Map filter (singular) to filters (plural), for backwards compatibility.
+ executionSettings.filters = new [] {executionSettings.filter};
+ }
+
+ if (executionSettings.targetPlatform == null && executionSettings.filters != null &&
+ executionSettings.filters.Length > 0)
+ {
+ executionSettings.targetPlatform = executionSettings.filters[0].targetPlatform;
+ }
+
+ return ScheduleJob(executionSettings);
+ }
+
+ ///
+ /// Sets up a given instance of to be invoked on test runs.
+ ///
+ ///
+ /// Generic representing a type of callback.
+ ///
+ ///
+ /// The test callbacks to be invoked.
+ ///
+ ///
+ /// Sets the order in which the callbacks are invoked, starting with the highest value first.
+ ///
+ public void RegisterCallbacks(T testCallbacks, int priority = 0) where T : ICallbacks
+ {
+ if (testCallbacks == null)
+ {
+ throw new ArgumentNullException(nameof(testCallbacks));
+ }
+
+ m_CallbacksHolder.Add(testCallbacks, priority);
+ }
+ ///
+ /// Unregister an instance of to no longer receive callbacks from test runs.
+ ///
+ ///
+ /// Generic representing a type of callback.
+ ///
+ /// The test callbacks to unregister.
+ public void UnregisterCallbacks(T testCallbacks) where T : ICallbacks
+ {
+ if (testCallbacks == null)
+ {
+ throw new ArgumentNullException(nameof(testCallbacks));
+ }
+
+ m_CallbacksHolder.Remove(testCallbacks);
+ }
+
+ internal void RetrieveTestList(ExecutionSettings executionSettings, Action callback)
+ {
+ if (executionSettings == null)
+ {
+ throw new ArgumentNullException(nameof(executionSettings));
+ }
+
+ var firstFilter = executionSettings.filters?.FirstOrDefault() ?? executionSettings.filter;
+ RetrieveTestList(firstFilter.testMode, callback);
+ }
+ ///
+ /// Retrieve the full test tree as ITestAdaptor for a given test mode. This is obsolete. Use TestRunnerApi.RetrieveTestTree instead.
+ ///
+ ///
+ ///
+ public void RetrieveTestList(TestMode testMode, Action callback)
+ {
+ if (callback == null)
+ {
+ throw new ArgumentNullException(nameof(callback));
+ }
+
+ var platform = ParseTestMode(testMode);
+ var testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy());
+ var testAdaptorFactory = new TestAdaptorFactory();
+ var testListCache = new TestListCache(testAdaptorFactory, new RemoteTestResultDataFactory(), TestListCacheData.instance);
+ var testListProvider = new TestListProvider(testAssemblyProvider, new UnityTestAssemblyBuilder());
+ var cachedTestListProvider = new CachingTestListProvider(testListProvider, testListCache, testAdaptorFactory);
+
+ var job = new TestListJob(cachedTestListProvider, platform, (testRoot) =>
+ {
+ callback(testRoot);
+ });
+ job.Start();
+ }
+
+ internal static bool IsRunActive()
+ {
+ return RunData.instance.isRunning;
+ }
+
+ private static TestPlatform ParseTestMode(TestMode testMode)
+ {
+ return (((testMode & TestMode.EditMode) == TestMode.EditMode) ? TestPlatform.EditMode : 0) | (((testMode & TestMode.PlayMode) == TestMode.PlayMode) ? TestPlatform.PlayMode : 0);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta
new file mode 100644
index 00000000..7ad5fc15
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 68993ba529ae04440916cb7c23bf3279
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestStatus.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestStatus.cs
new file mode 100644
index 00000000..d88c3dac
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestStatus.cs
@@ -0,0 +1,28 @@
+namespace UnityEditor.TestTools.TestRunner.Api
+{
+ ///
+ /// The TestStatus enum indicates the test result status.
+ ///
+ public enum TestStatus
+ {
+ ///
+ /// The test ran with an inconclusive result.
+ ///
+ Inconclusive,
+
+ ///
+ /// The test was skipped.
+ ///
+ Skipped,
+
+ ///
+ /// The test ran and passed.
+ ///
+ Passed,
+
+ ///
+ /// The test ran and failed.
+ ///
+ Failed
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestStatus.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestStatus.cs.meta
new file mode 100644
index 00000000..38bd6af0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/Api/TestStatus.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9ec94545c5b00344c9bd8e691f15d799
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/AssemblyInfo.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/AssemblyInfo.cs
new file mode 100644
index 00000000..2dbc3c0a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/AssemblyInfo.cs
@@ -0,0 +1,14 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyTitle("UnityEditor.TestRunner")]
+[assembly: InternalsVisibleTo("Assembly-CSharp-Editor-testable")]
+[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
+[assembly: InternalsVisibleTo("Unity.PerformanceTesting.Editor")]
+[assembly: InternalsVisibleTo("Unity.IntegrationTests")]
+[assembly: InternalsVisibleTo("UnityEditor.TestRunner.Tests")]
+[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Develop.Editor")]
+[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Develop.EditorTests")]
+[assembly: InternalsVisibleTo("Unity.PackageValidationSuite.Editor")]
+
+[assembly: AssemblyVersion("1.0.0")]
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/AssemblyInfo.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/AssemblyInfo.cs.meta
new file mode 100644
index 00000000..5e1b8dd1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9db19a04003fca7439552acd4de9baa1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser.meta
new file mode 100644
index 00000000..b5a29bdc
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7602252bdb82b8d45ae3483c3a00d3e1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs
new file mode 100644
index 00000000..85823519
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Linq;
+
+namespace UnityEditor.TestRunner.CommandLineParser
+{
+ internal class CommandLineOption : ICommandLineOption
+ {
+ Action m_ArgAction;
+
+ public CommandLineOption(string argName, Action action)
+ {
+ ArgName = argName;
+ m_ArgAction = s => action();
+ }
+
+ public CommandLineOption(string argName, Action action)
+ {
+ ArgName = argName;
+ m_ArgAction = action;
+ }
+
+ public CommandLineOption(string argName, Action action)
+ {
+ ArgName = argName;
+ m_ArgAction = s => action(SplitStringToArray(s));
+ }
+
+ public string ArgName { get; private set; }
+
+ public void ApplyValue(string value)
+ {
+ m_ArgAction(value);
+ }
+
+ static string[] SplitStringToArray(string value)
+ {
+ if (string.IsNullOrEmpty(value))
+ {
+ return null;
+ }
+
+ return value.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta
new file mode 100644
index 00000000..65f32561
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a3529368f4cd0424a89aa51080a16b06
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs
new file mode 100644
index 00000000..d08c233d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs
@@ -0,0 +1,49 @@
+using System;
+
+namespace UnityEditor.TestRunner.CommandLineParser
+{
+ internal class CommandLineOptionSet
+ {
+ ICommandLineOption[] m_Options;
+
+ public CommandLineOptionSet(params ICommandLineOption[] options)
+ {
+ m_Options = options;
+ }
+
+ public void Parse(string[] args)
+ {
+ var i = 0;
+ while (i < args.Length)
+ {
+ var arg = args[i];
+ if (!arg.StartsWith("-"))
+ {
+ i++;
+ continue;
+ }
+
+ string value = null;
+ if (i + 1 < args.Length && !args[i + 1].StartsWith("-"))
+ {
+ value = args[i + 1];
+ i++;
+ }
+
+ ApplyValueToMatchingOptions(arg, value);
+ i++;
+ }
+ }
+
+ private void ApplyValueToMatchingOptions(string argName, string value)
+ {
+ foreach (var option in m_Options)
+ {
+ if ("-" + option.ArgName == argName)
+ {
+ option.ApplyValue(value);
+ }
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta
new file mode 100644
index 00000000..1db24d0d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 139c5eac101a4dc4fb3098e30c29f15e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs
new file mode 100644
index 00000000..7f699adc
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs
@@ -0,0 +1,8 @@
+namespace UnityEditor.TestRunner.CommandLineParser
+{
+ interface ICommandLineOption
+ {
+ string ArgName { get; }
+ void ApplyValue(string value);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta
new file mode 100644
index 00000000..613d95f0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f445ca0c614a846449fcd8ae648c24e2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest.meta
new file mode 100644
index 00000000..d005718c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b477d1f29b65a674e9d5cdab4eb72b01
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/Executer.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/Executer.cs
new file mode 100644
index 00000000..fe0eb3b3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/Executer.cs
@@ -0,0 +1,134 @@
+using System;
+using System.Linq;
+using UnityEditor.TestRunner.TestLaunchers;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class Executer
+ {
+ private ITestRunnerApi m_TestRunnerApi;
+ private ISettingsBuilder m_SettingsBuilder;
+ private Action m_LogErrorFormat;
+ private Action m_LogException;
+ private Action m_ExitEditorApplication;
+ private Func m_ScriptCompilationFailedCheck;
+
+ public Executer(ITestRunnerApi testRunnerApi, ISettingsBuilder settingsBuilder, Action logErrorFormat, Action logException, Action exitEditorApplication, Func scriptCompilationFailedCheck)
+ {
+ m_TestRunnerApi = testRunnerApi;
+ m_SettingsBuilder = settingsBuilder;
+ m_LogErrorFormat = logErrorFormat;
+ m_LogException = logException;
+ m_ExitEditorApplication = exitEditorApplication;
+ m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck;
+ }
+
+ internal void InitializeAndExecuteRun(string[] commandLineArgs)
+ {
+ Api.ExecutionSettings executionSettings;
+ try
+ {
+ executionSettings = m_SettingsBuilder.BuildApiExecutionSettings(commandLineArgs);
+ if (executionSettings.targetPlatform.HasValue)
+ RemotePlayerLogController.instance.SetBuildTarget(executionSettings.targetPlatform.Value);
+ }
+ catch (SetupException exception)
+ {
+ HandleSetupException(exception);
+ return;
+ }
+
+ try
+ {
+ Debug.Log("Executing tests with settings: " + ExecutionSettingsToString(executionSettings));
+ m_TestRunnerApi.Execute(executionSettings);
+ }
+ catch (Exception exception)
+ {
+ m_LogException(exception);
+ m_ExitEditorApplication((int)ReturnCodes.RunError);
+ }
+ }
+
+ internal ExecutionSettings BuildExecutionSettings(string[] commandLineArgs)
+ {
+ return m_SettingsBuilder.BuildExecutionSettings(commandLineArgs);
+ }
+
+ internal enum ReturnCodes
+ {
+ Ok = 0,
+ Failed = 2,
+ RunError = 3,
+ PlatformNotFoundReturnCode = 4
+ }
+
+ internal void SetUpCallbacks(ExecutionSettings executionSettings)
+ {
+ RemotePlayerLogController.instance.SetLogsDirectory(executionSettings.DeviceLogsDirectory);
+
+ var resultSavingCallback = ScriptableObject.CreateInstance();
+ resultSavingCallback.m_ResultFilePath = executionSettings.TestResultsFile;
+
+ var logSavingCallback = ScriptableObject.CreateInstance();
+
+ m_TestRunnerApi.RegisterCallbacks(resultSavingCallback);
+ m_TestRunnerApi.RegisterCallbacks(logSavingCallback);
+ m_TestRunnerApi.RegisterCallbacks(ScriptableObject.CreateInstance(), -10);
+ }
+
+ internal void ExitOnCompileErrors()
+ {
+ if (m_ScriptCompilationFailedCheck())
+ {
+ var handling = s_ExceptionHandlingMapping.First(h => h.m_ExceptionType == SetupException.ExceptionType.ScriptCompilationFailed);
+ m_LogErrorFormat(handling.m_Message, new object[0]);
+ m_ExitEditorApplication(handling.m_ReturnCode);
+ }
+ }
+
+ void HandleSetupException(SetupException exception)
+ {
+ ExceptionHandling handling = s_ExceptionHandlingMapping.FirstOrDefault(h => h.m_ExceptionType == exception.Type) ?? new ExceptionHandling(exception.Type, "Unknown command line test run error. " + exception.Type, ReturnCodes.RunError);
+ m_LogErrorFormat(handling.m_Message, exception.Details);
+ m_ExitEditorApplication(handling.m_ReturnCode);
+ }
+
+ private class ExceptionHandling
+ {
+ internal SetupException.ExceptionType m_ExceptionType;
+ internal string m_Message;
+ internal int m_ReturnCode;
+ public ExceptionHandling(SetupException.ExceptionType exceptionType, string message, ReturnCodes returnCode)
+ {
+ m_ExceptionType = exceptionType;
+ m_Message = message;
+ m_ReturnCode = (int)returnCode;
+ }
+ }
+
+ static ExceptionHandling[] s_ExceptionHandlingMapping = new[]
+ {
+ new ExceptionHandling(SetupException.ExceptionType.ScriptCompilationFailed, "Scripts had compilation errors.", ReturnCodes.RunError),
+ new ExceptionHandling(SetupException.ExceptionType.PlatformNotFound, "Test platform not found ({0}).", ReturnCodes.PlatformNotFoundReturnCode),
+ new ExceptionHandling(SetupException.ExceptionType.TestSettingsFileNotFound, "Test settings file not found at {0}.", ReturnCodes.RunError)
+ };
+
+ private static string ExecutionSettingsToString(Api.ExecutionSettings executionSettings)
+ {
+ if (executionSettings == null)
+ {
+ return "none";
+ }
+
+ if (executionSettings.filters == null || executionSettings.filters.Length == 0)
+ {
+ return "no filter";
+ }
+
+ return "test mode = " + executionSettings.filters[0].testMode;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta
new file mode 100644
index 00000000..e57a0103
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 083c6a3a5426382449369ddc12b691d8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs
new file mode 100644
index 00000000..3ff23563
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ [Serializable]
+ internal class ExecutionSettings
+ {
+ public string TestResultsFile;
+ public string DeviceLogsDirectory;
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta
new file mode 100644
index 00000000..35edc4c9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c3a75354f6ceac94ca15ca9d96593290
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs
new file mode 100644
index 00000000..30ea6d80
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs
@@ -0,0 +1,52 @@
+using System;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ [Serializable]
+ internal class ExitCallbacks : ScriptableObject, IErrorCallbacks
+ {
+ internal static bool preventExit;
+
+ public void RunFinished(ITestResultAdaptor testResults)
+ {
+ if (preventExit)
+ {
+ return;
+ }
+
+ if (!ExitCallbacksDataHolder.instance.AnyTestsExecuted)
+ {
+ Debug.LogFormat(LogType.Warning, LogOption.NoStacktrace, null, "No tests were executed");
+ }
+
+ EditorApplication.Exit(ExitCallbacksDataHolder.instance.RunFailed ? (int)Executer.ReturnCodes.Failed : (int)Executer.ReturnCodes.Ok);
+ }
+
+ public void TestStarted(ITestAdaptor test)
+ {
+ if (!test.IsSuite)
+ {
+ ExitCallbacksDataHolder.instance.AnyTestsExecuted = true;
+ }
+ }
+
+ public void TestFinished(ITestResultAdaptor result)
+ {
+ if (!result.Test.IsSuite && (result.TestStatus == TestStatus.Failed || result.TestStatus == TestStatus.Inconclusive))
+ {
+ ExitCallbacksDataHolder.instance.RunFailed = true;
+ }
+ }
+
+ public void RunStarted(ITestAdaptor testsToRun)
+ {
+ }
+
+ public void OnError(string message)
+ {
+ EditorApplication.Exit((int)Executer.ReturnCodes.RunError);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta
new file mode 100644
index 00000000..62964631
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1adaa8dcc4fda3d4cb4d3c8e0cb65d12
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs
new file mode 100644
index 00000000..86cf5a88
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class ExitCallbacksDataHolder : ScriptableSingleton
+ {
+ [SerializeField]
+ public bool AnyTestsExecuted;
+ [SerializeField]
+ public bool RunFailed;
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs.meta
new file mode 100644
index 00000000..7b68ea55
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: aab045daa0ad4b01843dcf44013d9653
+timeCreated: 1605189497
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs
new file mode 100644
index 00000000..557195d0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs
@@ -0,0 +1,10 @@
+using UnityEditor.TestTools.TestRunner.Api;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ interface ISettingsBuilder
+ {
+ Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs);
+ ExecutionSettings BuildExecutionSettings(string[] commandLineArgs);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta
new file mode 100644
index 00000000..cc0b2480
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8a13cbeb2099aca47bb456f49845f86c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs
new file mode 100644
index 00000000..40a185f5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs
@@ -0,0 +1,29 @@
+using System;
+using UnityEditor.TestRunner.TestLaunchers;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ [Serializable]
+ internal class LogSavingCallbacks : ScriptableObject, ICallbacks
+ {
+ public void RunStarted(ITestAdaptor testsToRun)
+ {
+ RemotePlayerLogController.instance.StartLogWriters();
+ }
+
+ public virtual void RunFinished(ITestResultAdaptor testResults)
+ {
+ RemotePlayerLogController.instance.StopLogWriters();
+ }
+
+ public void TestStarted(ITestAdaptor test)
+ {
+ }
+
+ public void TestFinished(ITestResultAdaptor result)
+ {
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta
new file mode 100644
index 00000000..c9681781
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8d20eedbe40f0ce41a4c4f633f225de8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs
new file mode 100644
index 00000000..5470fd7e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEditor.DeploymentTargets;
+using UnityEditor.Utils;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class LogWriter : IDisposable
+ {
+ private string m_LogsDirectory;
+ private string m_DeviceID;
+ private Dictionary m_LogStreams;
+ private DeploymentTargetLogger m_Logger;
+
+ internal LogWriter(string logsDirectory, string deviceID, DeploymentTargetLogger logger)
+ {
+ m_LogStreams = new Dictionary();
+ m_Logger = logger;
+ m_LogsDirectory = logsDirectory;
+ m_DeviceID = deviceID;
+
+ logger.logMessage += WriteLogToFile;
+ }
+
+ private void WriteLogToFile(string id, string logLine)
+ {
+ StreamWriter logStream;
+ var streamExists = m_LogStreams.TryGetValue(id, out logStream);
+ if (!streamExists)
+ {
+ var filePath = GetLogFilePath(m_LogsDirectory, m_DeviceID, id);
+ logStream = CreateLogFile(filePath);
+
+ m_LogStreams.Add(id, logStream);
+ }
+
+ try
+ {
+ if (logLine != null)
+ logStream.WriteLine(logLine);
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"Writing {id} log failed.");
+ Debug.LogException(ex);
+ }
+ }
+
+ public void Stop()
+ {
+ m_Logger.Stop();
+ foreach (var logStream in m_LogStreams)
+ {
+ logStream.Value.Close();
+ }
+ }
+
+ public void Dispose()
+ {
+ Stop();
+ }
+
+ private StreamWriter CreateLogFile(string path)
+ {
+ Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Creating {0} device log: {1}", m_DeviceID, path);
+ StreamWriter streamWriter = null;
+ try
+ {
+ if (!Directory.Exists(path))
+ Directory.CreateDirectory(Path.GetDirectoryName(path));
+
+ streamWriter = File.CreateText(path);
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"Creating device log {path} file failed.");
+ Debug.LogException(ex);
+ }
+
+ return streamWriter;
+ }
+
+ private string GetLogFilePath(string lgosDirectory, string deviceID, string logID)
+ {
+ var fileName = "Device-" + deviceID + "-" + logID + ".txt";
+ fileName = string.Join("_", fileName.Split(Path.GetInvalidFileNameChars()));
+ return Paths.Combine(lgosDirectory, fileName);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta
new file mode 100644
index 00000000..56872b9f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 05778dd1de4433d418793b6f3d3c18cf
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs
new file mode 100644
index 00000000..a3837bf9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs
@@ -0,0 +1,50 @@
+using System;
+using System.IO;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEditor.Utils;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ [Serializable]
+ internal class ResultsSavingCallbacks : ScriptableObject, ICallbacks
+ {
+ [SerializeField]
+ public string m_ResultFilePath;
+
+ public ResultsSavingCallbacks()
+ {
+ this.m_ResultFilePath = GetDefaultResultFilePath();
+ }
+
+ public void RunStarted(ITestAdaptor testsToRun)
+ {
+ }
+
+ public virtual void RunFinished(ITestResultAdaptor testResults)
+ {
+ if (string.IsNullOrEmpty(m_ResultFilePath))
+ {
+ m_ResultFilePath = GetDefaultResultFilePath();
+ }
+
+ var resultWriter = new ResultsWriter();
+ resultWriter.WriteResultToFile(testResults, m_ResultFilePath);
+ }
+
+ public void TestStarted(ITestAdaptor test)
+ {
+ }
+
+ public void TestFinished(ITestResultAdaptor result)
+ {
+ }
+
+ private static string GetDefaultResultFilePath()
+ {
+ var fileName = "TestResults-" + DateTime.Now.Ticks + ".xml";
+ var projectPath = Directory.GetCurrentDirectory();
+ return Paths.Combine(projectPath, fileName);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta
new file mode 100644
index 00000000..ca06f3a3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ef563c5a6ecf64d4193dc144cb7d472a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs
new file mode 100644
index 00000000..e713a6e9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs
@@ -0,0 +1,103 @@
+using System;
+using System.IO;
+using System.Xml;
+using NUnit.Framework.Interfaces;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class ResultsWriter
+ {
+ private const string k_nUnitVersion = "3.5.0.0";
+
+ private const string k_TestRunNode = "test-run";
+ private const string k_Id = "id";
+ private const string k_Testcasecount = "testcasecount";
+ private const string k_Result = "result";
+ private const string k_Total = "total";
+ private const string k_Passed = "passed";
+ private const string k_Failed = "failed";
+ private const string k_Inconclusive = "inconclusive";
+ private const string k_Skipped = "skipped";
+ private const string k_Asserts = "asserts";
+ private const string k_EngineVersion = "engine-version";
+ private const string k_ClrVersion = "clr-version";
+ private const string k_StartTime = "start-time";
+ private const string k_EndTime = "end-time";
+ private const string k_Duration = "duration";
+
+ private const string k_TimeFormat = "u";
+
+ public void WriteResultToFile(ITestResultAdaptor result, string filePath)
+ {
+ Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Saving results to: {0}", filePath);
+
+ try
+ {
+ if (!Directory.Exists(filePath))
+ {
+ CreateDirectory(filePath);
+ }
+
+ using (var fileStream = File.CreateText(filePath))
+ {
+ WriteResultToStream(result, fileStream);
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError("Saving result file failed.");
+ Debug.LogException(ex);
+ }
+ }
+
+ void CreateDirectory(string filePath)
+ {
+ var driectoryPath = Path.GetDirectoryName(filePath);
+ if (!String.IsNullOrEmpty(driectoryPath))
+ {
+ Directory.CreateDirectory(driectoryPath);
+ }
+ }
+
+ public void WriteResultToStream(ITestResultAdaptor result, StreamWriter streamWriter, XmlWriterSettings settings = null)
+ {
+ settings = settings ?? new XmlWriterSettings();
+ settings.Indent = true;
+ settings.NewLineOnAttributes = false;
+
+ using (var xmlWriter = XmlWriter.Create(streamWriter, settings))
+ {
+ WriteResultsToXml(result, xmlWriter);
+ }
+ }
+
+ void WriteResultsToXml(ITestResultAdaptor result, XmlWriter xmlWriter)
+ {
+ // XML format as specified at https://github.com/nunit/docs/wiki/Test-Result-XML-Format
+
+ var testRunNode = new TNode(k_TestRunNode);
+
+ testRunNode.AddAttribute(k_Id, "2");
+ testRunNode.AddAttribute(k_Testcasecount, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
+ testRunNode.AddAttribute(k_Result, result.ResultState.ToString());
+ testRunNode.AddAttribute(k_Total, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
+ testRunNode.AddAttribute(k_Passed, result.PassCount.ToString());
+ testRunNode.AddAttribute(k_Failed, result.FailCount.ToString());
+ testRunNode.AddAttribute(k_Inconclusive, result.InconclusiveCount.ToString());
+ testRunNode.AddAttribute(k_Skipped, result.SkipCount.ToString());
+ testRunNode.AddAttribute(k_Asserts, result.AssertCount.ToString());
+ testRunNode.AddAttribute(k_EngineVersion, k_nUnitVersion);
+ testRunNode.AddAttribute(k_ClrVersion, Environment.Version.ToString());
+ testRunNode.AddAttribute(k_StartTime, result.StartTime.ToString(k_TimeFormat));
+ testRunNode.AddAttribute(k_EndTime, result.EndTime.ToString(k_TimeFormat));
+ testRunNode.AddAttribute(k_Duration, result.Duration.ToString());
+
+ var resultNode = result.ToXml();
+ testRunNode.ChildNodes.Add(resultNode);
+
+ testRunNode.WriteTo(xmlWriter);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta
new file mode 100644
index 00000000..074fe65c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 29d603e0a726a9043b3503112271844a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunData.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunData.cs
new file mode 100644
index 00000000..6a469a7b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunData.cs
@@ -0,0 +1,8 @@
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class RunData : ScriptableSingleton
+ {
+ public bool isRunning;
+ public ExecutionSettings executionSettings;
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta
new file mode 100644
index 00000000..4cfe30e6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3f8c1075884df0249b80e23a0598f9c1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs
new file mode 100644
index 00000000..9b914c75
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs
@@ -0,0 +1,29 @@
+using UnityEditor.TestTools.TestRunner.Api;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class RunSettings : ITestRunSettings
+ {
+ private ITestSettings m_TestSettings;
+ public RunSettings(ITestSettings testSettings)
+ {
+ this.m_TestSettings = testSettings;
+ }
+
+ public void Apply()
+ {
+ if (m_TestSettings != null)
+ {
+ m_TestSettings.SetupProjectParameters();
+ }
+ }
+
+ public void Dispose()
+ {
+ if (m_TestSettings != null)
+ {
+ m_TestSettings.Dispose();
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta
new file mode 100644
index 00000000..0e241ba8
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 59d3f5586b341a74c84c8f72144a4568
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs
new file mode 100644
index 00000000..16b66e40
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs
@@ -0,0 +1,188 @@
+using System;
+using System.IO;
+using UnityEditor.TestRunner.CommandLineParser;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEditor.TestTools.TestRunner.GUI;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class SettingsBuilder : ISettingsBuilder
+ {
+ private ITestSettingsDeserializer m_TestSettingsDeserializer;
+ private Action m_LogAction;
+ private Action m_LogWarningAction;
+ private Func m_FileExistsCheck;
+ private Func m_ScriptCompilationFailedCheck;
+ public SettingsBuilder(ITestSettingsDeserializer testSettingsDeserializer, Action logAction, Action logWarningAction, Func fileExistsCheck, Func scriptCompilationFailedCheck)
+ {
+ m_LogAction = logAction;
+ m_LogWarningAction = logWarningAction;
+ m_FileExistsCheck = fileExistsCheck;
+ m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck;
+ m_TestSettingsDeserializer = testSettingsDeserializer;
+ }
+
+ public Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs)
+ {
+ var quit = false;
+ string testPlatform = TestMode.EditMode.ToString();
+ string[] testFilters = null;
+ string[] testCategories = null;
+ string testSettingsFilePath = null;
+ int testRepetitions = 1;
+ int? playerHeartbeatTimeout = null;
+ bool runSynchronously = false;
+ string[] testAssemblyNames = null;
+
+ var optionSet = new CommandLineOptionSet(
+ new CommandLineOption("quit", () => { quit = true; }),
+ new CommandLineOption("testPlatform", platform => { testPlatform = platform; }),
+ new CommandLineOption("editorTestsFilter", filters => { testFilters = filters; }),
+ new CommandLineOption("testFilter", filters => { testFilters = filters; }),
+ new CommandLineOption("editorTestsCategories", catagories => { testCategories = catagories; }),
+ new CommandLineOption("testCategory", catagories => { testCategories = catagories; }),
+ new CommandLineOption("testSettingsFile", settingsFilePath => { testSettingsFilePath = settingsFilePath; }),
+ new CommandLineOption("testRepetitions", reps => { testRepetitions = int.Parse(reps); }),
+ new CommandLineOption("playerHeartbeatTimeout", timeout => { playerHeartbeatTimeout = int.Parse(timeout); }),
+ new CommandLineOption("runSynchronously", () => { runSynchronously = true; }),
+ new CommandLineOption("assemblyNames", assemblyNames => { testAssemblyNames = assemblyNames; })
+ );
+ optionSet.Parse(commandLineArgs);
+
+ DisplayQuitWarningIfQuitIsGiven(quit);
+
+ CheckForScriptCompilationErrors();
+
+ LogParametersForRun(testPlatform, testFilters, testCategories, testSettingsFilePath);
+
+ var testSettings = GetTestSettings(testSettingsFilePath);
+
+ var filter = new Filter()
+ {
+ groupNames = testFilters,
+ categoryNames = testCategories,
+ assemblyNames = testAssemblyNames
+ };
+
+ var buildTarget = SetFilterAndGetBuildTarget(testPlatform, filter);
+
+ RerunCallbackData.instance.runFilters = new []{new UITestRunnerFilter()
+ {
+ categoryNames = filter.categoryNames,
+ groupNames = filter.groupNames,
+ testRepetitions = testRepetitions
+ }};
+
+ RerunCallbackData.instance.testMode = filter.testMode;
+
+ var settings = new Api.ExecutionSettings()
+ {
+ filters = new []{filter},
+ overloadTestRunSettings = new RunSettings(testSettings),
+ targetPlatform = buildTarget,
+ runSynchronously = runSynchronously
+ };
+
+ if (playerHeartbeatTimeout != null)
+ {
+ settings.playerHeartbeatTimeout = playerHeartbeatTimeout.Value;
+ }
+
+ return settings;
+ }
+
+ public ExecutionSettings BuildExecutionSettings(string[] commandLineArgs)
+ {
+ string resultFilePath = null;
+ string deviceLogsDirectory = null;
+
+ var optionSet = new CommandLineOptionSet(
+ new CommandLineOption("editorTestsResultFile", filePath => { resultFilePath = filePath; }),
+ new CommandLineOption("testResults", filePath => { resultFilePath = filePath; }),
+ new CommandLineOption("deviceLogs", dirPath => { deviceLogsDirectory = dirPath; })
+ );
+ optionSet.Parse(commandLineArgs);
+
+ return new ExecutionSettings()
+ {
+ TestResultsFile = resultFilePath,
+ DeviceLogsDirectory = deviceLogsDirectory
+ };
+ }
+
+ void DisplayQuitWarningIfQuitIsGiven(bool quitIsGiven)
+ {
+ if (quitIsGiven)
+ {
+ m_LogWarningAction("Running tests from command line arguments will not work when \"quit\" is specified.");
+ }
+ }
+
+ void CheckForScriptCompilationErrors()
+ {
+ if (m_ScriptCompilationFailedCheck())
+ {
+ throw new SetupException(SetupException.ExceptionType.ScriptCompilationFailed);
+ }
+ }
+
+ void LogParametersForRun(string testPlatform, string[] testFilters, string[] testCategories, string testSettingsFilePath)
+ {
+ m_LogAction("Running tests for " + testPlatform);
+ if (testFilters != null && testFilters.Length > 0)
+ {
+ m_LogAction("With test filter: " + string.Join(", ", testFilters));
+ }
+ if (testCategories != null && testCategories.Length > 0)
+ {
+ m_LogAction("With test categories: " + string.Join(", ", testCategories));
+ }
+ if (!string.IsNullOrEmpty(testSettingsFilePath))
+ {
+ m_LogAction("With test settings file: " + testSettingsFilePath);
+ }
+ }
+
+ ITestSettings GetTestSettings(string testSettingsFilePath)
+ {
+ ITestSettings testSettings = null;
+ if (!string.IsNullOrEmpty(testSettingsFilePath))
+ {
+ if (!m_FileExistsCheck(testSettingsFilePath))
+ {
+ throw new SetupException(SetupException.ExceptionType.TestSettingsFileNotFound, testSettingsFilePath);
+ }
+
+ testSettings = m_TestSettingsDeserializer.GetSettingsFromJsonFile(testSettingsFilePath);
+ }
+ return testSettings;
+ }
+
+ static BuildTarget? SetFilterAndGetBuildTarget(string testPlatform, Filter filter)
+ {
+ BuildTarget? buildTarget = null;
+ if (testPlatform.ToLower() == "editmode")
+ {
+ filter.testMode = TestMode.EditMode;
+ }
+ else if (testPlatform.ToLower() == "playmode")
+ {
+ filter.testMode = TestMode.PlayMode;
+ }
+ else
+ {
+ try
+ {
+ buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), testPlatform, true);
+
+ filter.testMode = TestMode.PlayMode;
+ }
+ catch (ArgumentException)
+ {
+ throw new SetupException(SetupException.ExceptionType.PlatformNotFound, testPlatform);
+ }
+ }
+ return buildTarget;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta
new file mode 100644
index 00000000..1e2f8c93
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b7468a027a77337478e133b40b42b4f9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SetupException.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SetupException.cs
new file mode 100644
index 00000000..33377134
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SetupException.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ internal class SetupException : Exception
+ {
+ public ExceptionType Type { get; }
+ public object[] Details { get; }
+
+ public SetupException(ExceptionType type, params object[] details)
+ {
+ Type = type;
+ Details = details;
+ }
+
+ public enum ExceptionType
+ {
+ ScriptCompilationFailed,
+ PlatformNotFound,
+ TestSettingsFileNotFound,
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta
new file mode 100644
index 00000000..bdb235cf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 63572993f2104574099a48392460b211
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs
new file mode 100644
index 00000000..44130b28
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs
@@ -0,0 +1,82 @@
+using System;
+using System.IO;
+using UnityEditor.TestRunner.CommandLineParser;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+using UnityEditor.Compilation;
+using System.Linq;
+using UnityEngine.TestTools;
+
+namespace UnityEditor.TestTools.TestRunner.CommandLineTest
+{
+ [InitializeOnLoad]
+ static class TestStarter
+ {
+ static TestStarter()
+ {
+ if (!ShouldRunTests())
+ {
+ return;
+ }
+
+ if (EditorApplication.isCompiling)
+ {
+ return;
+ }
+
+ if (RunData.instance.isRunning)
+ {
+ executer.ExitOnCompileErrors();
+ executer.SetUpCallbacks(RunData.instance.executionSettings);
+ return;
+ }
+
+ EditorApplication.update += UpdateWatch;
+ }
+
+ static void UpdateWatch()
+ {
+ EditorApplication.update -= UpdateWatch;
+
+ if (RunData.instance.isRunning)
+ {
+ return;
+ }
+
+ RunData.instance.isRunning = true;
+ var commandLineArgs = Environment.GetCommandLineArgs();
+ RunData.instance.executionSettings = executer.BuildExecutionSettings(commandLineArgs);
+ executer.SetUpCallbacks(RunData.instance.executionSettings);
+ executer.InitializeAndExecuteRun(commandLineArgs);
+ }
+
+ static bool ShouldRunTests()
+ {
+ var shouldRunTests = false;
+ var optionSet = new CommandLineOptionSet(
+ new CommandLineOption("runTests", () => { shouldRunTests = true; }),
+ new CommandLineOption("runEditorTests", () => { shouldRunTests = true; })
+ );
+ optionSet.Parse(Environment.GetCommandLineArgs());
+ return shouldRunTests;
+ }
+
+ static Executer s_Executer;
+
+ static Executer executer
+ {
+ get
+ {
+ if (s_Executer == null)
+ {
+ Func compilationCheck = () => EditorUtility.scriptCompilationFailed;
+ Action actionLogger = (string msg) => { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, msg); };
+ var apiSettingsBuilder = new SettingsBuilder(new TestSettingsDeserializer(() => new TestSettings()), actionLogger, Debug.LogWarning, File.Exists, compilationCheck);
+ s_Executer = new Executer(ScriptableObject.CreateInstance(), apiSettingsBuilder, Debug.LogErrorFormat, Debug.LogException, EditorApplication.Exit, compilationCheck);
+ }
+
+ return s_Executer;
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta
new file mode 100644
index 00000000..4d5dfdc0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4d616d1a494edd144b262cf6cd5e5fda
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI.meta
new file mode 100644
index 00000000..bc9308a4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7e609b27ad2caa14c83dd9951b6c13c6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs
new file mode 100644
index 00000000..0016142e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs
@@ -0,0 +1,11 @@
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class AssetsDatabaseHelper : IAssetsDatabaseHelper
+ {
+ public void OpenAssetInItsDefaultExternalEditor(string assetPath, int line)
+ {
+ var asset = AssetDatabase.LoadMainAssetAtPath(assetPath);
+ AssetDatabase.OpenAsset(asset, line);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta
new file mode 100644
index 00000000..4fad1fca
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 740b3785866edda4b8d1e1a05570a5f8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/GuiHelper.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/GuiHelper.cs
new file mode 100644
index 00000000..81770fa5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/GuiHelper.cs
@@ -0,0 +1,138 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using Unity.CodeEditor;
+using UnityEditor.Utils;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class GuiHelper : IGuiHelper
+ {
+ public GuiHelper(IMonoCecilHelper monoCecilHelper, IAssetsDatabaseHelper assetsDatabaseHelper)
+ {
+ MonoCecilHelper = monoCecilHelper;
+ AssetsDatabaseHelper = assetsDatabaseHelper;
+ Editor = new DefaultExternalCodeEditor();
+ GetCSFiles = (dirPath, fileExtension) =>
+ {
+ return Directory.GetFiles(dirPath, $"*{fileExtension}", SearchOption.AllDirectories)
+ .Select(Paths.UnifyDirectorySeparator);
+ };
+ }
+ internal Func> GetCSFiles;
+ protected IMonoCecilHelper MonoCecilHelper { get; private set; }
+ public IAssetsDatabaseHelper AssetsDatabaseHelper { get; private set; }
+ public IExternalCodeEditor Editor { get; internal set; }
+ private const string FileExtension = ".cs";
+
+ public void OpenScriptInExternalEditor(Type type, MethodInfo method)
+ {
+ var fileOpenInfo = GetFileOpenInfo(type, method);
+
+ if (string.IsNullOrEmpty(fileOpenInfo.FilePath))
+ {
+ Debug.LogWarning("Failed to open test method source code in external editor. Inconsistent filename and yield return operator in target method.");
+
+ return;
+ }
+
+ if (fileOpenInfo.LineNumber == 1)
+ {
+ Debug.LogWarning("Failed to get a line number for unity test method. So please find it in opened file in external editor.");
+ }
+
+ if (!fileOpenInfo.FilePath.Contains("Assets"))
+ {
+ Editor.OpenProject(fileOpenInfo.FilePath, fileOpenInfo.LineNumber, 1);
+ }
+ else
+ {
+ AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(fileOpenInfo.FilePath, fileOpenInfo.LineNumber);
+ }
+
+ }
+
+ public IFileOpenInfo GetFileOpenInfo(Type type, MethodInfo method)
+ {
+ var fileOpenInfo = MonoCecilHelper.TryGetCecilFileOpenInfo(type, method);
+ if (string.IsNullOrEmpty(fileOpenInfo.FilePath))
+ {
+ var dirPath = Paths.UnifyDirectorySeparator(Application.dataPath);
+ var allCsFiles = GetCSFiles(dirPath, FileExtension);
+
+ var fileName = allCsFiles.FirstOrDefault(x =>
+ x.Split(Path.DirectorySeparatorChar).Last().Equals(string.Concat(GetTestFileName(type), FileExtension)));
+
+ fileOpenInfo.FilePath = fileName ?? string.Empty;
+ }
+
+ if (!fileOpenInfo.FilePath.Contains("Assets"))
+ {
+ return fileOpenInfo;
+ }
+ fileOpenInfo.FilePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath);
+
+ return fileOpenInfo;
+ }
+
+ internal static string GetTestFileName(Type type)
+ {
+ //This handles the case of a test in a nested class, getting the name of the base class
+ if (type.FullName != null && type.Namespace!=null && type.FullName.Contains("+"))
+ {
+ var removedNamespace = type.FullName.Substring(type.Namespace.Length+1);
+ return removedNamespace.Substring(0,removedNamespace.IndexOf("+", StringComparison.Ordinal));
+ }
+ return type.Name;
+ }
+ public string FilePathToAssetsRelativeAndUnified(string filePath)
+ {
+ if (string.IsNullOrEmpty(filePath))
+ return string.Empty;
+
+ filePath = Paths.UnifyDirectorySeparator(filePath);
+ var length = Paths.UnifyDirectorySeparator(Application.dataPath).Length - "Assets".Length;
+
+ return filePath.Substring(length);
+ }
+
+ public bool OpenScriptInExternalEditor(string stacktrace)
+ {
+ if (string.IsNullOrEmpty(stacktrace))
+ return false;
+
+ var regex = new Regex("in (?.*):{1}(?[0-9]+)");
+
+ var matchingLines = stacktrace.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Where(x => regex.IsMatch(x)).ToList();
+ if (!matchingLines.Any())
+ return false;
+
+ var fileOpenInfos = matchingLines
+ .Select(x => regex.Match(x))
+ .Select(x =>
+ new FileOpenInfo
+ {
+ FilePath = x.Groups["path"].Value,
+ LineNumber = int.Parse(x.Groups["line"].Value)
+ }).ToList();
+
+ var fileOpenInfo = fileOpenInfos
+ .FirstOrDefault(openInfo => !string.IsNullOrEmpty(openInfo.FilePath) && File.Exists(openInfo.FilePath));
+
+ if (fileOpenInfo == null)
+ {
+ return false;
+ }
+
+ var filePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath);
+ AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(filePath, fileOpenInfo.LineNumber);
+
+ return true;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta
new file mode 100644
index 00000000..a1512d06
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d0138170d24533e47b8e6c250c6d7fbc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs
new file mode 100644
index 00000000..3e26c53a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs
@@ -0,0 +1,7 @@
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal interface IAssetsDatabaseHelper
+ {
+ void OpenAssetInItsDefaultExternalEditor(string assetPath, int line);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta
new file mode 100644
index 00000000..622fe68d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 208e46d59ff6e304db0318377d20f5a1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IGuiHelper.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IGuiHelper.cs
new file mode 100644
index 00000000..a87fb8df
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IGuiHelper.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Reflection;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal interface IGuiHelper
+ {
+ bool OpenScriptInExternalEditor(string stacktrace);
+ void OpenScriptInExternalEditor(Type type, MethodInfo method);
+ IFileOpenInfo GetFileOpenInfo(Type type, MethodInfo method);
+ string FilePathToAssetsRelativeAndUnified(string filePath);
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta
new file mode 100644
index 00000000..9c6e266b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fd57cf917f61bbb42b8f030436426ddd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder.meta
new file mode 100644
index 00000000..e6829237
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 07ea0326ed848fb4489187cb58f96113
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs
new file mode 100644
index 00000000..34118d65
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs
@@ -0,0 +1,12 @@
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class RenderingOptions
+ {
+ public string nameFilter;
+ public bool showSucceeded;
+ public bool showFailed;
+ public bool showIgnored;
+ public bool showNotRunned;
+ public string[] categories;
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta
new file mode 100644
index 00000000..57e67487
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 87357ff0dec4ef348a295235835c6ee4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs
new file mode 100644
index 00000000..7d7b7ff9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs
@@ -0,0 +1,174 @@
+// ****************************************************************
+// Based on nUnit 2.6.2 (http://www.nunit.org/)
+// ****************************************************************
+
+using System;
+using System.Collections.Generic;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ ///
+ /// Summary description for ResultSummarizer.
+ ///
+ internal class ResultSummarizer
+ {
+ private int m_ErrorCount = -1;
+ private int m_FailureCount;
+ private int m_IgnoreCount = -1;
+ private int m_InconclusiveCount = -1;
+ private int m_NotRunnable = -1;
+ private int m_ResultCount;
+ private int m_SkipCount;
+ private int m_SuccessCount;
+ private int m_TestsRun;
+
+ private TimeSpan m_Duration = TimeSpan.FromSeconds(0);
+
+ public ResultSummarizer(IEnumerable results)
+ {
+ foreach (var result in results)
+ Summarize(result);
+ }
+
+ public bool success
+ {
+ get { return m_FailureCount == 0; }
+ }
+
+ ///
+ /// Returns the number of test cases for which results
+ /// have been summarized. Any tests excluded by use of
+ /// Category or Explicit attributes are not counted.
+ ///
+ public int ResultCount
+ {
+ get { return m_ResultCount; }
+ }
+
+ ///
+ /// Returns the number of test cases actually run, which
+ /// is the same as ResultCount, less any Skipped, Ignored
+ /// or NonRunnable tests.
+ ///
+ public int TestsRun
+ {
+ get { return m_TestsRun; }
+ }
+
+ ///
+ /// Returns the number of tests that passed
+ ///
+ public int Passed
+ {
+ get { return m_SuccessCount; }
+ }
+
+ ///
+ /// Returns the number of test cases that had an error.
+ ///
+ public int errors
+ {
+ get { return m_ErrorCount; }
+ }
+
+ ///
+ /// Returns the number of test cases that failed.
+ ///
+ public int failures
+ {
+ get { return m_FailureCount; }
+ }
+
+ ///
+ /// Returns the number of test cases that failed.
+ ///
+ public int inconclusive
+ {
+ get { return m_InconclusiveCount; }
+ }
+
+ ///
+ /// Returns the number of test cases that were not runnable
+ /// due to errors in the signature of the class or method.
+ /// Such tests are also counted as Errors.
+ ///
+ public int notRunnable
+ {
+ get { return m_NotRunnable; }
+ }
+
+ ///
+ /// Returns the number of test cases that were skipped.
+ ///
+ public int Skipped
+ {
+ get { return m_SkipCount; }
+ }
+
+ public int ignored
+ {
+ get { return m_IgnoreCount; }
+ }
+
+ public double duration
+ {
+ get { return m_Duration.TotalSeconds; }
+ }
+
+ public int testsNotRun
+ {
+ get { return m_SkipCount + m_IgnoreCount + m_NotRunnable; }
+ }
+
+ public void Summarize(TestRunnerResult result)
+ {
+ m_Duration += TimeSpan.FromSeconds(result.duration);
+ m_ResultCount++;
+
+ if (result.resultStatus != TestRunnerResult.ResultStatus.NotRun)
+ {
+ //TODO implement missing features
+ // if(result.IsIgnored)
+ // {
+ // m_IgnoreCount++;
+ // return;
+ // }
+
+ m_SkipCount++;
+ return;
+ }
+
+ switch (result.resultStatus)
+ {
+ case TestRunnerResult.ResultStatus.Passed:
+ m_SuccessCount++;
+ m_TestsRun++;
+ break;
+ case TestRunnerResult.ResultStatus.Failed:
+ m_FailureCount++;
+ m_TestsRun++;
+ break;
+ //TODO implement missing features
+ // case TestResultState.Error:
+ // case TestResultState.Cancelled:
+ // m_ErrorCount++;
+ // m_TestsRun++;
+ // break;
+ // case TestResultState.Inconclusive:
+ // m_InconclusiveCount++;
+ // m_TestsRun++;
+ // break;
+ // case TestResultState.NotRunnable:
+ // m_NotRunnable++;
+ // // errorCount++;
+ // break;
+ // case TestResultState.Ignored:
+ // m_IgnoreCount++;
+ // break;
+ default:
+ m_SkipCount++;
+ break;
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta
new file mode 100644
index 00000000..bc4b465e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 95a2914724952ef40bb590d0607fc878
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs
new file mode 100644
index 00000000..10f96bf5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs
@@ -0,0 +1,104 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class TestFilterSettings
+ {
+ public bool showSucceeded;
+ public bool showFailed;
+ public bool showIgnored;
+ public bool showNotRun;
+
+ public string filterByName;
+ public int filterByCategory;
+
+ private GUIContent m_SucceededBtn;
+ private GUIContent m_FailedBtn;
+ private GUIContent m_IgnoredBtn;
+ private GUIContent m_NotRunBtn;
+
+ public string[] availableCategories;
+
+ private readonly string m_PrefsKey;
+
+ public TestFilterSettings(string prefsKey)
+ {
+ availableCategories = null;
+ m_PrefsKey = prefsKey;
+ Load();
+ UpdateCounters(Enumerable.Empty());
+ }
+
+ public void Load()
+ {
+ showSucceeded = EditorPrefs.GetBool(m_PrefsKey + ".ShowSucceeded", true);
+ showFailed = EditorPrefs.GetBool(m_PrefsKey + ".ShowFailed", true);
+ showIgnored = EditorPrefs.GetBool(m_PrefsKey + ".ShowIgnored", true);
+ showNotRun = EditorPrefs.GetBool(m_PrefsKey + ".ShowNotRun", true);
+ filterByName = EditorPrefs.GetString(m_PrefsKey + ".FilterByName", string.Empty);
+ filterByCategory = EditorPrefs.GetInt(m_PrefsKey + ".FilterByCategory", 0);
+ }
+
+ public void Save()
+ {
+ EditorPrefs.SetBool(m_PrefsKey + ".ShowSucceeded", showSucceeded);
+ EditorPrefs.SetBool(m_PrefsKey + ".ShowFailed", showFailed);
+ EditorPrefs.SetBool(m_PrefsKey + ".ShowIgnored", showIgnored);
+ EditorPrefs.SetBool(m_PrefsKey + ".ShowNotRun", showNotRun);
+ EditorPrefs.SetString(m_PrefsKey + ".FilterByName", filterByName);
+ EditorPrefs.SetInt(m_PrefsKey + ".FilterByCategory", filterByCategory);
+ }
+
+ public void UpdateCounters(IEnumerable results)
+ {
+ var summary = new ResultSummarizer(results);
+
+ m_SucceededBtn = new GUIContent(summary.Passed.ToString(), Icons.s_SuccessImg, "Show tests that succeeded");
+ m_FailedBtn = new GUIContent((summary.errors + summary.failures + summary.inconclusive).ToString(), Icons.s_FailImg, "Show tests that failed");
+ m_IgnoredBtn = new GUIContent((summary.ignored + summary.notRunnable).ToString(), Icons.s_IgnoreImg, "Show tests that are ignored");
+ m_NotRunBtn = new GUIContent((summary.testsNotRun - summary.ignored - summary.notRunnable).ToString(), Icons.s_UnknownImg, "Show tests that didn't run");
+ }
+
+ public string[] GetSelectedCategories()
+ {
+ if (availableCategories == null)
+ return new string[0];
+
+ return availableCategories.Where((c, i) => (filterByCategory & (1 << i)) != 0).ToArray();
+ }
+
+ public void OnGUI()
+ {
+ EditorGUI.BeginChangeCheck();
+
+ filterByName = GUILayout.TextField(filterByName, "ToolbarSeachTextField", GUILayout.MinWidth(100), GUILayout.MaxWidth(250), GUILayout.ExpandWidth(true));
+ if (GUILayout.Button(GUIContent.none, string.IsNullOrEmpty(filterByName) ? "ToolbarSeachCancelButtonEmpty" : "ToolbarSeachCancelButton"))
+ filterByName = string.Empty;
+
+ if (availableCategories != null && availableCategories.Length > 0)
+ filterByCategory = EditorGUILayout.MaskField(filterByCategory, availableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(90));
+
+ showSucceeded = GUILayout.Toggle(showSucceeded, m_SucceededBtn, EditorStyles.toolbarButton);
+ showFailed = GUILayout.Toggle(showFailed, m_FailedBtn, EditorStyles.toolbarButton);
+ showIgnored = GUILayout.Toggle(showIgnored, m_IgnoredBtn, EditorStyles.toolbarButton);
+ showNotRun = GUILayout.Toggle(showNotRun, m_NotRunBtn, EditorStyles.toolbarButton);
+
+ if (EditorGUI.EndChangeCheck())
+ Save();
+ }
+
+ public RenderingOptions BuildRenderingOptions()
+ {
+ var options = new RenderingOptions();
+ options.showSucceeded = showSucceeded;
+ options.showFailed = showFailed;
+ options.showIgnored = showIgnored;
+ options.showNotRunned = showNotRun;
+ options.nameFilter = filterByName;
+ options.categories = GetSelectedCategories();
+ return options;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta
new file mode 100644
index 00000000..af8b799a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 046c3854296c5ec48bac50da6ca248ec
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs
new file mode 100644
index 00000000..63965afb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs
@@ -0,0 +1,110 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.IMGUI.Controls;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine.TestRunner.NUnitExtensions;
+using UnityEngine.TestRunner.NUnitExtensions.Filters;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class TestTreeViewBuilder
+ {
+ public List results = new List();
+ private readonly List m_OldTestResultList;
+ private readonly TestRunnerUIFilter m_UIFilter;
+ private readonly ITestAdaptor m_TestListRoot;
+
+ private readonly List m_AvailableCategories = new List();
+
+ public string[] AvailableCategories
+ {
+ get { return m_AvailableCategories.Distinct().OrderBy(a => a).ToArray(); }
+ }
+
+ public TestTreeViewBuilder(ITestAdaptor tests, List oldTestResultResults, TestRunnerUIFilter uiFilter)
+ {
+ m_AvailableCategories.Add(CategoryFilterExtended.k_DefaultCategory);
+ m_OldTestResultList = oldTestResultResults;
+ m_TestListRoot = tests;
+ m_UIFilter = uiFilter;
+ }
+
+ public TreeViewItem BuildTreeView(TestFilterSettings settings, bool sceneBased, string sceneName)
+ {
+ var rootItem = new TreeViewItem(int.MaxValue, 0, null, "Invisible Root Item");
+ ParseTestTree(0, rootItem, m_TestListRoot);
+ return rootItem;
+ }
+
+ private bool IsFilteredOutByUIFilter(ITestAdaptor test, TestRunnerResult result)
+ {
+ if (m_UIFilter.PassedHidden && result.resultStatus == TestRunnerResult.ResultStatus.Passed)
+ return true;
+ if (m_UIFilter.FailedHidden && (result.resultStatus == TestRunnerResult.ResultStatus.Failed || result.resultStatus == TestRunnerResult.ResultStatus.Inconclusive))
+ return true;
+ if (m_UIFilter.NotRunHidden && (result.resultStatus == TestRunnerResult.ResultStatus.NotRun || result.resultStatus == TestRunnerResult.ResultStatus.Skipped))
+ return true;
+ if (m_UIFilter.CategoryFilter.Length > 0)
+ return !test.Categories.Any(category => m_UIFilter.CategoryFilter.Contains(category));
+ return false;
+ }
+
+ private void ParseTestTree(int depth, TreeViewItem rootItem, ITestAdaptor testElement)
+ {
+ m_AvailableCategories.AddRange(testElement.Categories);
+
+ var testElementId = testElement.UniqueName;
+ if (!testElement.HasChildren)
+ {
+ var result = m_OldTestResultList.FirstOrDefault(a => a.uniqueId == testElementId);
+
+ if (result != null &&
+ (result.ignoredOrSkipped
+ || result.notRunnable
+ || testElement.RunState == RunState.NotRunnable
+ || testElement.RunState == RunState.Ignored
+ || testElement.RunState == RunState.Skipped
+ )
+ )
+ {
+ //if the test was or becomes ignored or not runnable, we recreate the result in case it has changed
+ result = null;
+ }
+ if (result == null)
+ {
+ result = new TestRunnerResult(testElement);
+ }
+ results.Add(result);
+
+ var test = new TestTreeViewItem(testElement, depth, rootItem);
+ if (!IsFilteredOutByUIFilter(testElement, result))
+ rootItem.AddChild(test);
+ test.SetResult(result);
+ return;
+ }
+
+ var groupResult = m_OldTestResultList.FirstOrDefault(a => a.uniqueId == testElementId);
+ if (groupResult == null)
+ {
+ groupResult = new TestRunnerResult(testElement);
+ }
+
+ results.Add(groupResult);
+ var group = new TestTreeViewItem(testElement, depth, rootItem);
+ group.SetResult(groupResult);
+
+ depth++;
+ foreach (var child in testElement.Children)
+ {
+ ParseTestTree(depth, group, child);
+ }
+
+
+ if (testElement.IsTestAssembly && !testElement.HasChildren)
+ return;
+
+ if (group.hasChildren)
+ rootItem.AddChild(group);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta
new file mode 100644
index 00000000..68a6c250
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e17c88b021c2a4c409b3f15b0d80ac62
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs
new file mode 100644
index 00000000..05cadbac
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs
@@ -0,0 +1,135 @@
+using System;
+using System.IO;
+using System.Linq;
+using UnityEditor.ProjectWindowCallback;
+using UnityEditor.Scripting.ScriptCompilation;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class TestListGUIHelper
+ {
+ private const string kResourcesTemplatePath = "Resources/ScriptTemplates";
+ private const string kAssemblyDefinitionTestTemplate = "92-Assembly Definition-NewTestAssembly.asmdef.txt";
+
+ private const string kAssemblyDefinitionEditModeTestTemplate =
+ "92-Assembly Definition-NewEditModeTestAssembly.asmdef.txt";
+
+ private const string kTestScriptTemplate = "83-C# Script-NewTestScript.cs.txt";
+ private const string kNewTestScriptName = "NewTestScript.cs";
+ private const string kNunit = "nunit.framework.dll";
+
+ [MenuItem("Assets/Create/Testing/Tests Assembly Folder", false, 83)]
+ public static void MenuItemAddFolderAndAsmDefForTesting()
+ {
+ AddFolderAndAsmDefForTesting();
+ }
+
+ [MenuItem("Assets/Create/Testing/Tests Assembly Folder", true, 83)]
+ public static bool MenuItemAddFolderAndAsmDefForTestingWithValidation()
+ {
+ return !SelectedFolderContainsTestAssembly();
+ }
+
+ public static void AddFolderAndAsmDefForTesting(bool isEditorOnly = false)
+ {
+ ProjectWindowUtil.CreateFolderWithTemplates("Tests",
+ isEditorOnly ? kAssemblyDefinitionEditModeTestTemplate : kAssemblyDefinitionTestTemplate);
+ }
+
+ public static bool SelectedFolderContainsTestAssembly()
+ {
+ var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly();
+ if (theNearestCustomScriptAssembly != null)
+ {
+ return theNearestCustomScriptAssembly.PrecompiledReferences != null && theNearestCustomScriptAssembly.PrecompiledReferences.Any(x => Path.GetFileName(x) == kNunit);
+ }
+
+ return false;
+ }
+
+ [MenuItem("Assets/Create/Testing/C# Test Script", false, 83)]
+ public static void AddTest()
+ {
+ var basePath = Path.Combine(EditorApplication.applicationContentsPath, kResourcesTemplatePath);
+ var destPath = Path.Combine(GetActiveFolderPath(), kNewTestScriptName);
+ var templatePath = Path.Combine(basePath, kTestScriptTemplate);
+ var icon = EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D;
+ ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
+ ScriptableObject.CreateInstance(), destPath, icon, templatePath);
+
+ AssetDatabase.Refresh();
+ }
+
+ [MenuItem("Assets/Create/Testing/C# Test Script", true, 83)]
+ public static bool CanAddScriptAndItWillCompile()
+ {
+ return CanAddEditModeTestScriptAndItWillCompile() || CanAddPlayModeTestScriptAndItWillCompile();
+ }
+
+ public static bool CanAddEditModeTestScriptAndItWillCompile()
+ {
+ var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly();
+ if (theNearestCustomScriptAssembly != null)
+ {
+ return (theNearestCustomScriptAssembly.AssemblyFlags & AssemblyFlags.EditorOnly) ==
+ AssemblyFlags.EditorOnly;
+ }
+
+ var activeFolderPath = GetActiveFolderPath();
+ return activeFolderPath.ToLower().Contains("/editor");
+ }
+
+ public static bool CanAddPlayModeTestScriptAndItWillCompile()
+ {
+ if (PlayerSettings.playModeTestRunnerEnabled)
+ {
+ return true;
+ }
+
+ var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly();
+
+ if (theNearestCustomScriptAssembly == null)
+ {
+ return false;
+ }
+
+ var hasTestAssemblyFlag = theNearestCustomScriptAssembly.PrecompiledReferences != null && theNearestCustomScriptAssembly.PrecompiledReferences.Any(x => Path.GetFileName(x) == kNunit);;
+ var editorOnlyAssembly = (theNearestCustomScriptAssembly.AssemblyFlags & AssemblyFlags.EditorOnly) != 0;
+
+ return hasTestAssemblyFlag && !editorOnlyAssembly;
+ }
+
+ public static string GetActiveFolderPath()
+ {
+ var path = "Assets";
+
+ foreach (var obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets))
+ {
+ path = AssetDatabase.GetAssetPath(obj);
+ if (!string.IsNullOrEmpty(path) && File.Exists(path))
+ {
+ path = Path.GetDirectoryName(path);
+ break;
+ }
+ }
+ return path;
+ }
+
+ private static CustomScriptAssembly GetTheNearestCustomScriptAssembly()
+ {
+ CustomScriptAssembly findCustomScriptAssemblyFromScriptPath;
+ try
+ {
+ findCustomScriptAssemblyFromScriptPath =
+ EditorCompilationInterface.Instance.FindCustomScriptAssemblyFromScriptPath(
+ Path.Combine(GetActiveFolderPath(), "Foo.cs"));
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ return findCustomScriptAssemblyFromScriptPath;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta
new file mode 100644
index 00000000..70d8f193
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 97a05971510726f438153cd4987526fb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView.meta
new file mode 100644
index 00000000..63ce2ad0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 68cb547af0187634aad591a09c01cd5b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs
new file mode 100644
index 00000000..52c94a51
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs
@@ -0,0 +1,24 @@
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal static class Icons
+ {
+ public static readonly Texture2D s_FailImg;
+ public static readonly Texture2D s_IgnoreImg;
+ public static readonly Texture2D s_SuccessImg;
+ public static readonly Texture2D s_UnknownImg;
+ public static readonly Texture2D s_InconclusiveImg;
+ public static readonly Texture2D s_StopwatchImg;
+
+ static Icons()
+ {
+ s_FailImg = EditorGUIUtility.IconContent("TestFailed").image as Texture2D;
+ s_IgnoreImg = EditorGUIUtility.IconContent("TestIgnored").image as Texture2D;
+ s_SuccessImg = EditorGUIUtility.IconContent("TestPassed").image as Texture2D;
+ s_UnknownImg = EditorGUIUtility.IconContent("TestNormal").image as Texture2D;
+ s_InconclusiveImg = EditorGUIUtility.IconContent("TestInconclusive").image as Texture2D;
+ s_StopwatchImg = EditorGUIUtility.IconContent("TestStopwatch").image as Texture2D;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta
new file mode 100644
index 00000000..3ddb7ee1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 27769e9b00b038d47aefe306a4d20bec
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs
new file mode 100644
index 00000000..454af2aa
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs
@@ -0,0 +1,98 @@
+using System.Collections.Generic;
+using NUnit.Framework.Interfaces;
+using UnityEditor.IMGUI.Controls;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine.SceneManagement;
+using UnityEngine.TestTools.TestRunner;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class TestListTreeViewDataSource : TreeViewDataSource
+ {
+ private bool m_ExpandTreeOnCreation;
+ private readonly TestListGUI m_TestListGUI;
+ private ITestAdaptor m_RootTest;
+
+ public TestListTreeViewDataSource(TreeViewController testListTree, TestListGUI testListGUI, ITestAdaptor rootTest) : base(testListTree)
+ {
+ showRootItem = false;
+ rootIsCollapsable = false;
+ m_TestListGUI = testListGUI;
+ m_RootTest = rootTest;
+ }
+
+ public void UpdateRootTest(ITestAdaptor rootTest)
+ {
+ m_RootTest = rootTest;
+ }
+
+ public override void FetchData()
+ {
+ var sceneName = SceneManager.GetActiveScene().name;
+ if (sceneName.StartsWith("InitTestScene"))
+ sceneName = PlaymodeTestsController.GetController().settings.originalScene;
+
+ var testListBuilder = new TestTreeViewBuilder(m_RootTest, m_TestListGUI.newResultList, m_TestListGUI.m_TestRunnerUIFilter);
+
+ m_RootItem = testListBuilder.BuildTreeView(null, false, sceneName);
+ SetExpanded(m_RootItem, true);
+ if (m_RootItem.hasChildren && m_RootItem.children.Count == 1)
+ SetExpanded(m_RootItem.children[0], true);
+
+ if (m_ExpandTreeOnCreation)
+ SetExpandedWithChildren(m_RootItem, true);
+
+ m_TestListGUI.newResultList = new List(testListBuilder.results);
+ m_TestListGUI.m_TestRunnerUIFilter.availableCategories = testListBuilder.AvailableCategories;
+ m_NeedRefreshRows = true;
+ }
+
+ public override bool IsRenamingItemAllowed(TreeViewItem item)
+ {
+ return false;
+ }
+
+ public void ExpandTreeOnCreation()
+ {
+ m_ExpandTreeOnCreation = true;
+ }
+
+ public override bool IsExpandable(TreeViewItem item)
+ {
+ if (item is TestTreeViewItem)
+ return ((TestTreeViewItem)item).IsGroupNode;
+ return base.IsExpandable(item);
+ }
+
+ protected override List Search(TreeViewItem rootItem, string search)
+ {
+ var result = new List();
+
+ if (rootItem.hasChildren)
+ {
+ foreach (var child in rootItem.children)
+ {
+ SearchTestTree(child, search, result);
+ }
+ }
+ return result;
+ }
+
+ protected void SearchTestTree(TreeViewItem item, string search, IList searchResult)
+ {
+ var testItem = item as TestTreeViewItem;
+ if (!testItem.IsGroupNode)
+ {
+ if (testItem.FullName.ToLower().Contains(search))
+ {
+ searchResult.Add(item);
+ }
+ }
+ else if (item.children != null)
+ {
+ foreach (var child in item.children)
+ SearchTestTree(child, search, searchResult);
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta
new file mode 100644
index 00000000..5ec53327
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce87c287371edde43a4b5fcfdee7b9ef
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs
new file mode 100644
index 00000000..66578130
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs
@@ -0,0 +1,11 @@
+using UnityEditor.IMGUI.Controls;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal class TestListTreeViewGUI : TreeViewGUI
+ {
+ public TestListTreeViewGUI(TreeViewController testListTree) : base(testListTree)
+ {
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta
new file mode 100644
index 00000000..ed09e250
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 52c907c81459f324497af504b84fd557
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs
new file mode 100644
index 00000000..3c3f6492
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs
@@ -0,0 +1,137 @@
+using System;
+using System.Reflection;
+using System.Text;
+using UnityEditor.IMGUI.Controls;
+using UnityEditor.TestTools.TestRunner.Api;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal sealed class TestTreeViewItem : TreeViewItem
+ {
+ public TestRunnerResult result;
+ internal ITestAdaptor m_Test;
+
+ public Type type;
+ public MethodInfo method;
+
+ private const int k_ResultTestMaxLength = 15000;
+
+ public bool IsGroupNode { get { return m_Test.IsSuite; } }
+
+ public string FullName { get { return m_Test.FullName; } }
+
+ public string GetAssemblyName()
+ {
+ var test = m_Test;
+ while (test != null)
+ {
+ if (test.IsTestAssembly)
+ {
+ return test.FullName;
+ }
+
+ test = test.Parent;
+ }
+
+ return null;
+ }
+
+ public TestTreeViewItem(ITestAdaptor test, int depth, TreeViewItem parent)
+ : base(GetId(test), depth, parent, test.Name)
+ {
+ m_Test = test;
+
+ if (test.TypeInfo != null)
+ {
+ type = test.TypeInfo.Type;
+ }
+ if (test.Method != null)
+ {
+ method = test.Method.MethodInfo;
+ }
+
+ displayName = test.Name.Replace("\n", "");
+ icon = Icons.s_UnknownImg;
+ }
+
+ private static int GetId(ITestAdaptor test)
+ {
+ return test.UniqueName.GetHashCode();
+ }
+
+ public void SetResult(TestRunnerResult testResult)
+ {
+ result = testResult;
+ result.SetResultChangedCallback(ResultUpdated);
+ ResultUpdated(result);
+ }
+
+ public string GetResultText()
+ {
+ if (result.resultStatus == TestRunnerResult.ResultStatus.NotRun)
+ {
+ return string.Empty;
+ }
+ var durationString = String.Format("{0:0.000}", result.duration);
+ var sb = new StringBuilder(string.Format("{0} ({1}s)", displayName.Trim(), durationString));
+ if (!string.IsNullOrEmpty(result.description))
+ {
+ sb.AppendFormat("\n{0}", result.description);
+ }
+ if (!string.IsNullOrEmpty(result.messages))
+ {
+ sb.Append("\n---\n");
+ sb.Append(result.messages.Trim());
+ }
+ if (!string.IsNullOrEmpty(result.stacktrace))
+ {
+ sb.Append("\n---\n");
+ sb.Append(result.stacktrace.Trim());
+ }
+ if (!string.IsNullOrEmpty(result.output))
+ {
+ sb.Append("\n---\n");
+ sb.Append(result.output.Trim());
+ }
+ if (sb.Length > k_ResultTestMaxLength)
+ {
+ sb.Length = k_ResultTestMaxLength;
+ sb.AppendFormat("...\n\n---MESSAGE TRUNCATED AT {0} CHARACTERS---", k_ResultTestMaxLength);
+ }
+ return sb.ToString().Trim();
+ }
+
+ private void ResultUpdated(TestRunnerResult testResult)
+ {
+ switch (testResult.resultStatus)
+ {
+ case TestRunnerResult.ResultStatus.Passed:
+ icon = Icons.s_SuccessImg;
+ break;
+ case TestRunnerResult.ResultStatus.Failed:
+ icon = Icons.s_FailImg;
+ break;
+ case TestRunnerResult.ResultStatus.Inconclusive:
+ icon = Icons.s_InconclusiveImg;
+ break;
+ case TestRunnerResult.ResultStatus.Skipped:
+ icon = Icons.s_IgnoreImg;
+ break;
+ default:
+ if (testResult.ignoredOrSkipped)
+ {
+ icon = Icons.s_IgnoreImg;
+ }
+ else if (testResult.notRunnable)
+ {
+ icon = Icons.s_FailImg;
+ }
+ else
+ {
+ icon = Icons.s_UnknownImg;
+ }
+ break;
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta
new file mode 100644
index 00000000..1a29abe9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce567ddbf30368344bc7b80e20cac36e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerResult.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerResult.cs
new file mode 100644
index 00000000..717cf37f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerResult.cs
@@ -0,0 +1,148 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.TestTools.TestRunner.Api;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ [Serializable]
+ internal class TestRunnerResult : UITestRunnerFilter.IClearableResult
+ {
+ public string id;
+ public string uniqueId;
+ public string name;
+ public string fullName;
+ public ResultStatus resultStatus = ResultStatus.NotRun;
+ public float duration;
+ public string messages;
+ public string output;
+ public string stacktrace;
+ public bool notRunnable;
+ public bool ignoredOrSkipped;
+ public string description;
+ public bool isSuite;
+ public List categories;
+ public string parentId;
+ public string parentUniqueId;
+
+ //This field is suppose to mark results from before domain reload
+ //Such result is outdated because the code might haev changed
+ //This field will get reset every time a domain reload happens
+ [NonSerialized]
+ public bool notOutdated;
+
+ protected Action m_OnResultUpdate;
+
+ internal TestRunnerResult(ITestAdaptor test)
+ {
+ id = test.Id;
+ uniqueId = test.UniqueName;
+
+ fullName = test.FullName;
+ name = test.Name;
+ description = test.Description;
+ isSuite = test.IsSuite;
+
+ ignoredOrSkipped = test.RunState == RunState.Ignored || test.RunState == RunState.Skipped;
+ notRunnable = test.RunState == RunState.NotRunnable;
+
+ if (ignoredOrSkipped)
+ {
+ messages = test.SkipReason;
+ }
+ if (notRunnable)
+ {
+ resultStatus = ResultStatus.Failed;
+ messages = test.SkipReason;
+ }
+ categories = test.Categories.ToList();
+ parentId = test.ParentId;
+ parentUniqueId = test.ParentUniqueName;
+ }
+
+ internal TestRunnerResult(ITestResultAdaptor testResult) : this(testResult.Test)
+ {
+ notOutdated = true;
+
+ messages = testResult.Message;
+ output = testResult.Output;
+ stacktrace = testResult.StackTrace;
+ duration = (float)testResult.Duration;
+ if (testResult.Test.IsSuite && testResult.ResultState == "Ignored")
+ {
+ resultStatus = ResultStatus.Passed;
+ }
+ else
+ {
+ resultStatus = ParseNUnitResultStatus(testResult.TestStatus);
+ }
+ }
+
+ public void Update(TestRunnerResult result)
+ {
+ if (ReferenceEquals(result, null))
+ return;
+ resultStatus = result.resultStatus;
+ duration = result.duration;
+ messages = result.messages;
+ output = result.output;
+ stacktrace = result.stacktrace;
+ ignoredOrSkipped = result.ignoredOrSkipped;
+ notRunnable = result.notRunnable;
+ description = result.description;
+ notOutdated = result.notOutdated;
+ if (m_OnResultUpdate != null)
+ m_OnResultUpdate(this);
+ }
+
+ public void SetResultChangedCallback(Action resultUpdated)
+ {
+ m_OnResultUpdate = resultUpdated;
+ }
+
+ [Serializable]
+ internal enum ResultStatus
+ {
+ NotRun,
+ Passed,
+ Failed,
+ Inconclusive,
+ Skipped
+ }
+
+ private static ResultStatus ParseNUnitResultStatus(TestStatus status)
+ {
+ switch (status)
+ {
+ case TestStatus.Passed:
+ return ResultStatus.Passed;
+ case TestStatus.Failed:
+ return ResultStatus.Failed;
+ case TestStatus.Inconclusive:
+ return ResultStatus.Inconclusive;
+ case TestStatus.Skipped:
+ return ResultStatus.Skipped;
+ default:
+ return ResultStatus.NotRun;
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0} ({1})", name, fullName);
+ }
+
+ public string Id { get { return uniqueId; } }
+ public string FullName { get { return fullName; } }
+ public string ParentId { get { return parentUniqueId; } }
+ public bool IsSuite { get { return isSuite; } }
+ public List Categories { get { return categories; } }
+
+ public void Clear()
+ {
+ resultStatus = ResultStatus.NotRun;
+ if (m_OnResultUpdate != null)
+ m_OnResultUpdate(this);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta
new file mode 100644
index 00000000..771053c1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a04a45bbed9e1714f9902fc9443669b9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs
new file mode 100644
index 00000000..c55c2b3b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs
@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ [Serializable]
+ internal class TestRunnerUIFilter
+ {
+ private int m_PassedCount;
+ private int m_FailedCount;
+ private int m_NotRunCount;
+ private int m_InconclusiveCount;
+ private int m_SkippedCount;
+
+ public int PassedCount { get { return m_PassedCount; } }
+ public int FailedCount { get { return m_FailedCount + m_InconclusiveCount; } }
+ public int NotRunCount { get { return m_NotRunCount + m_SkippedCount; } }
+
+ [SerializeField]
+ public bool PassedHidden;
+ [SerializeField]
+ public bool FailedHidden;
+ [SerializeField]
+ public bool NotRunHidden;
+
+ [SerializeField]
+ private string m_SearchString;
+ [SerializeField]
+ private int selectedCategoryMask;
+
+ public string[] availableCategories = new string[0];
+
+
+ private GUIContent m_SucceededBtn;
+ private GUIContent m_FailedBtn;
+ private GUIContent m_NotRunBtn;
+
+ public Action RebuildTestList;
+ public Action SearchStringChanged;
+ public Action SearchStringCleared;
+ public bool IsFiltering
+ {
+ get
+ {
+ return !string.IsNullOrEmpty(m_SearchString) || PassedHidden || FailedHidden || NotRunHidden ||
+ selectedCategoryMask != 0;
+ }
+ }
+
+ public string[] CategoryFilter
+ {
+ get
+ {
+ var list = new List();
+ for (int i = 0; i < availableCategories.Length; i++)
+ {
+ if ((selectedCategoryMask & (1 << i)) != 0)
+ {
+ list.Add(availableCategories[i]);
+ }
+ }
+ return list.ToArray();
+ }
+ }
+
+ public void UpdateCounters(List resultList)
+ {
+ m_PassedCount = m_FailedCount = m_NotRunCount = m_InconclusiveCount = m_SkippedCount = 0;
+ foreach (var result in resultList)
+ {
+ if (result.isSuite)
+ continue;
+ switch (result.resultStatus)
+ {
+ case TestRunnerResult.ResultStatus.Passed:
+ m_PassedCount++;
+ break;
+ case TestRunnerResult.ResultStatus.Failed:
+ m_FailedCount++;
+ break;
+ case TestRunnerResult.ResultStatus.Inconclusive:
+ m_InconclusiveCount++;
+ break;
+ case TestRunnerResult.ResultStatus.Skipped:
+ m_SkippedCount++;
+ break;
+ case TestRunnerResult.ResultStatus.NotRun:
+ default:
+ m_NotRunCount++;
+ break;
+ }
+ }
+
+ var succeededTooltip = string.Format("Show tests that succeeded\n{0} succeeded", m_PassedCount);
+ m_SucceededBtn = new GUIContent(PassedCount.ToString(), Icons.s_SuccessImg, succeededTooltip);
+ var failedTooltip = string.Format("Show tests that failed\n{0} failed\n{1} inconclusive", m_FailedCount, m_InconclusiveCount);
+ m_FailedBtn = new GUIContent(FailedCount.ToString(), Icons.s_FailImg, failedTooltip);
+ var notRunTooltip = string.Format("Show tests that didn't run\n{0} didn't run\n{1} skipped or ignored", m_NotRunCount, m_SkippedCount);
+ m_NotRunBtn = new GUIContent(NotRunCount.ToString(), Icons.s_UnknownImg, notRunTooltip);
+ }
+
+ public void Draw()
+ {
+ EditorGUI.BeginChangeCheck();
+ if (m_SearchString == null)
+ {
+ m_SearchString = "";
+ }
+ m_SearchString = EditorGUILayout.ToolbarSearchField(m_SearchString);
+ if (EditorGUI.EndChangeCheck() && SearchStringChanged != null)
+ {
+ SearchStringChanged(m_SearchString);
+ if (String.IsNullOrEmpty(m_SearchString))
+ SearchStringCleared();
+ }
+
+ if (availableCategories != null && availableCategories.Any())
+ {
+ EditorGUI.BeginChangeCheck();
+ selectedCategoryMask = EditorGUILayout.MaskField(selectedCategoryMask, availableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(150));
+ if (EditorGUI.EndChangeCheck() && RebuildTestList != null)
+ {
+ RebuildTestList();
+ }
+ }
+ else
+ {
+ EditorGUILayout.Popup(0, new[] { "" }, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(150));
+ }
+
+ EditorGUI.BeginChangeCheck();
+ if (m_SucceededBtn != null)
+ {
+ PassedHidden = !GUILayout.Toggle(!PassedHidden, m_SucceededBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(PassedCount)));
+ }
+ if (m_FailedBtn != null)
+ {
+ FailedHidden = !GUILayout.Toggle(!FailedHidden, m_FailedBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(FailedCount)));
+ }
+ if (m_NotRunBtn != null)
+ {
+ NotRunHidden = !GUILayout.Toggle(!NotRunHidden, m_NotRunBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(NotRunCount)));
+ }
+
+ if (EditorGUI.EndChangeCheck() && RebuildTestList != null)
+ {
+ RebuildTestList();
+ }
+ }
+
+ private static int GetMaxWidth(int count)
+ {
+ if (count < 10)
+ return 33;
+ return count < 100 ? 40 : 47;
+ }
+
+ public void Clear()
+ {
+ PassedHidden = false;
+ FailedHidden = false;
+ NotRunHidden = false;
+ selectedCategoryMask = 0;
+ m_SearchString = "";
+ if (SearchStringChanged != null)
+ {
+ SearchStringChanged(m_SearchString);
+ }
+ if (SearchStringCleared != null)
+ {
+ SearchStringCleared();
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta
new file mode 100644
index 00000000..e65f91a3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 15f870c6975ad6449b5b52514b90dc2b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs
new file mode 100644
index 00000000..a557dee4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs
@@ -0,0 +1,164 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ [Serializable]
+ internal class UITestRunnerFilter
+ {
+#pragma warning disable 649
+ public string[] assemblyNames;
+ public string[] groupNames;
+ public string[] categoryNames;
+ public string[] testNames;
+ public int testRepetitions = 1;
+ public bool synchronousOnly = false;
+
+ public static string AssemblyNameFromPath(string path)
+ {
+ string output = Path.GetFileName(path);
+ if (output != null && output.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
+ return output.Substring(0, output.Length - 4);
+ return output;
+ }
+
+ private bool CategoryMatches(IEnumerable categories)
+ {
+ if (categoryNames == null || categoryNames.Length == 0)
+ return true;
+
+ foreach (string category in categories)
+ {
+ if (categoryNames.Contains(category))
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool IDMatchesAssembly(string id)
+ {
+ if (AreOptionalFiltersEmpty())
+ return true;
+
+ if (assemblyNames == null || assemblyNames.Length == 0)
+ return true;
+
+ int openingBracket = id.IndexOf('[');
+ int closingBracket = id.IndexOf(']');
+ if (openingBracket >= 0 && openingBracket < id.Length && closingBracket > openingBracket &&
+ openingBracket < id.Length)
+ {
+ //Some assemblies are absolute and explicitly part of the test ID e.g.
+ //"[/path/to/assembly-name.dll][rest of ID ...]"
+ //While some are minimal assembly names e.g.
+ //"[assembly-name][rest of ID ...]"
+ //Strip them down to just the assembly name
+ string assemblyNameFromID =
+ AssemblyNameFromPath(id.Substring(openingBracket + 1, closingBracket - openingBracket - 1));
+ foreach (string assemblyName in assemblyNames)
+ {
+ if (assemblyName.Equals(assemblyNameFromID, StringComparison.OrdinalIgnoreCase))
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private bool NameMatches(string name)
+ {
+ if (AreOptionalFiltersEmpty())
+ return true;
+
+ if (groupNames == null || groupNames.Length == 0)
+ return true;
+
+ foreach (var nameFromFilter in groupNames)
+ {
+ //Strict regex match for test group name on its own
+ if (Regex.IsMatch(name, nameFromFilter))
+ return true;
+ //Match test names that end with parametrized test values and full nunit generated test names that have . separators
+ var regex = nameFromFilter.TrimEnd('$') + @"[\.|\(.*\)]";
+ if (Regex.IsMatch(name, regex))
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool AreOptionalFiltersEmpty()
+ {
+ if (assemblyNames != null && assemblyNames.Length != 0)
+ return false;
+ if (groupNames != null && groupNames.Length != 0)
+ return false;
+ if (testNames != null && testNames.Length != 0)
+ return false;
+ return true;
+ }
+
+ private bool NameMatchesExactly(string name)
+ {
+ if (AreOptionalFiltersEmpty())
+ return true;
+
+ if (testNames == null || testNames.Length == 0)
+ return true;
+
+ foreach (var exactName in testNames)
+ {
+ if (name == exactName)
+ return true;
+ }
+
+ return false;
+ }
+
+ private static void ClearAncestors(IEnumerable newResultList, string parentID)
+ {
+ if (string.IsNullOrEmpty(parentID))
+ return;
+ foreach (var result in newResultList)
+ {
+ if (result.Id == parentID)
+ {
+ result.Clear();
+ ClearAncestors(newResultList, result.ParentId);
+ break;
+ }
+ }
+ }
+
+ public void ClearResults(List newResultList)
+ {
+ foreach (var result in newResultList)
+ {
+ if (!result.IsSuite && CategoryMatches(result.Categories))
+ {
+ if (IDMatchesAssembly(result.Id) && NameMatches(result.FullName) &&
+ NameMatchesExactly(result.FullName))
+ {
+ result.Clear();
+ ClearAncestors(newResultList, result.ParentId);
+ }
+ }
+ }
+ }
+
+ internal interface IClearableResult
+ {
+ string Id { get; }
+ string FullName { get; }
+ string ParentId { get; }
+ bool IsSuite { get; }
+ List Categories { get; }
+ void Clear();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs.meta
new file mode 100644
index 00000000..26ef62ea
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 8069e1fc631e461ababf11f19a9c0df3
+timeCreated: 1595586126
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views.meta
new file mode 100644
index 00000000..ca14182c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c5535d742ea2e4941850b421f9c70a1f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs
new file mode 100644
index 00000000..1a7d9061
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Linq;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ [Serializable]
+ internal class EditModeTestListGUI : TestListGUI
+ {
+ public override TestMode TestMode
+ {
+ get { return TestMode.EditMode; }
+ }
+
+ public override void RenderNoTestsInfo()
+ {
+ if (!TestListGUIHelper.SelectedFolderContainsTestAssembly())
+ {
+ var noTestText = "No tests to show";
+
+ if (!PlayerSettings.playModeTestRunnerEnabled)
+ {
+ const string testsArePulledFromCustomAssemblies =
+ "EditMode tests can be in Editor only Assemblies, either in the editor special folder or Editor only Assembly Definitions that references the \"nunit.framework.dll\" Assembly Reference or any of the Assembly Definition References \"UnityEngine.TestRunner\" or \"UnityEditor.TestRunner\"..";
+ noTestText += Environment.NewLine + testsArePulledFromCustomAssemblies;
+ }
+
+ EditorGUILayout.HelpBox(noTestText, MessageType.Info);
+ if (GUILayout.Button("Create EditMode Test Assembly Folder"))
+ {
+ TestListGUIHelper.AddFolderAndAsmDefForTesting(isEditorOnly: true);
+ }
+ }
+
+ if (!TestListGUIHelper.CanAddEditModeTestScriptAndItWillCompile())
+ {
+ UnityEngine.GUI.enabled = false;
+ EditorGUILayout.HelpBox("EditMode test scripts can only be created in editor test assemblies.", MessageType.Warning);
+ }
+ if (GUILayout.Button("Create Test Script in current folder"))
+ {
+ TestListGUIHelper.AddTest();
+ }
+ UnityEngine.GUI.enabled = true;
+ }
+
+ public override void PrintHeadPanel()
+ {
+ base.PrintHeadPanel();
+ DrawFilters();
+ }
+
+ protected override void RunTests(params UITestRunnerFilter[] filters)
+ {
+ if (EditorUtility.scriptCompilationFailed)
+ {
+ Debug.LogError("Fix compilation issues before running tests");
+ return;
+ }
+
+ foreach (var filter in filters)
+ {
+ filter.ClearResults(newResultList.OfType().ToList());
+ }
+
+ RerunCallbackData.instance.runFilters = filters;
+ RerunCallbackData.instance.testMode = TestMode.EditMode;
+
+ var testRunnerApi = ScriptableObject.CreateInstance();
+ testRunnerApi.Execute(new ExecutionSettings()
+ {
+ filters = filters.Select(filter => new Filter()
+ {
+ assemblyNames = filter.assemblyNames,
+ categoryNames = filter.categoryNames,
+ groupNames = filter.groupNames,
+ testMode = TestMode,
+ testNames = filter.testNames
+ }).ToArray()
+ });
+ }
+
+ public override TestPlatform TestPlatform { get { return TestPlatform.EditMode; } }
+
+ protected override bool IsBusy()
+ {
+ return TestRunnerApi.IsRunActive() || EditorApplication.isCompiling || EditorApplication.isPlaying;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta
new file mode 100644
index 00000000..afd4abb5
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0336a32a79bfaed43a3fd2d88b91e974
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs
new file mode 100644
index 00000000..4f82f470
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs
@@ -0,0 +1,241 @@
+using System;
+using System.IO;
+using System.Linq;
+using UnityEditor.SceneManagement;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ [Serializable]
+ internal class PlayModeTestListGUI : TestListGUI
+ {
+ private struct PlayerMenuItem
+ {
+ public GUIContent name;
+ public bool filterSelectedTestsOnly;
+ public bool buildOnly;
+ }
+
+ [SerializeField]
+ private int m_SelectedOption;
+
+ public override TestMode TestMode
+ {
+ get { return TestMode.PlayMode; }
+ }
+
+ private string GetBuildText()
+ {
+ switch (EditorUserBuildSettings.activeBuildTarget)
+ {
+ case BuildTarget.Android:
+ if (EditorUserBuildSettings.exportAsGoogleAndroidProject)
+ return "Export";
+ break;
+ case BuildTarget.iOS:
+ return "Export";
+ }
+ return "Build";
+ }
+
+ private string PickBuildLocation()
+ {
+ var target = EditorUserBuildSettings.activeBuildTarget;
+ var targetGroup = BuildPipeline.GetBuildTargetGroup(target);
+ var lastLocation = EditorUserBuildSettings.GetBuildLocation(target);
+ var extension = PostprocessBuildPlayer.GetExtensionForBuildTarget(targetGroup, target, BuildOptions.None);
+ var defaultName = FileUtil.GetLastPathNameComponent(lastLocation);
+ lastLocation = string.IsNullOrEmpty(lastLocation) ? string.Empty : Path.GetDirectoryName(lastLocation);
+ bool updateExistingBuild;
+ var location = EditorUtility.SaveBuildPanel(target, $"{GetBuildText()} {target}", lastLocation, defaultName, extension,
+ out updateExistingBuild);
+ if (!string.IsNullOrEmpty(location))
+ EditorUserBuildSettings.SetBuildLocation(target, location);
+ return location;
+ }
+
+ private void ExecuteAction(PlayerMenuItem item)
+ {
+ var runSettings = new PlayerLauncherTestRunSettings();
+ runSettings.buildOnly = item.buildOnly;
+ if (runSettings.buildOnly)
+ {
+ runSettings.buildOnlyLocationPath = PickBuildLocation();
+ if (string.IsNullOrEmpty(runSettings.buildOnlyLocationPath))
+ {
+ Debug.LogWarning("Aborting, build selection was canceled.");
+ return;
+ }
+ }
+
+ if (item.filterSelectedTestsOnly)
+ RunTestsInPlayer(runSettings, SelectedTestsFilter);
+ else
+ {
+ var filter = new UITestRunnerFilter { categoryNames = m_TestRunnerUIFilter.CategoryFilter };
+ RunTestsInPlayer(runSettings, filter);
+ }
+ }
+
+ public override void PrintHeadPanel()
+ {
+ EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(false));
+ base.PrintHeadPanel();
+
+ PlayerMenuItem[] menuItems;
+
+ if (EditorUserBuildSettings.installInBuildFolder)
+ {
+ menuItems = new []
+ {
+ // Note: We select here buildOnly = false, so build location dialog won't show up
+ // The player won't actually be ran when using together with EditorUserBuildSettings.installInBuildFolder
+ new PlayerMenuItem()
+ {
+ name = new GUIContent("Install All Tests In Build Folder"), buildOnly = false, filterSelectedTestsOnly = false
+ },
+ new PlayerMenuItem()
+ {
+ name = new GUIContent("Install Selected Tests In Build Folder"), buildOnly = false, filterSelectedTestsOnly = true
+ }
+ };
+ }
+ else
+ {
+ menuItems = new []
+ {
+ new PlayerMenuItem()
+ {
+ name = new GUIContent("Run All Tests"), buildOnly = false, filterSelectedTestsOnly = false
+ },
+ new PlayerMenuItem()
+ {
+ name = new GUIContent("Run Selected Tests"), buildOnly = false, filterSelectedTestsOnly = true
+ },
+ new PlayerMenuItem()
+ {
+ name = new GUIContent($"{GetBuildText()} All Tests"), buildOnly = true, filterSelectedTestsOnly = false
+ },
+ new PlayerMenuItem()
+ {
+ name = new GUIContent($"{GetBuildText()} Selected Tests"), buildOnly = true, filterSelectedTestsOnly = true
+ },
+ };
+ }
+
+ m_SelectedOption = Math.Min(m_SelectedOption, menuItems.Length - 1);
+ var selectedMenuItem = menuItems[m_SelectedOption];
+ if (GUILayout.Button(
+ new GUIContent($"{selectedMenuItem.name.text} ({EditorUserBuildSettings.activeBuildTarget})"),
+ EditorStyles.toolbarButton))
+ {
+ ExecuteAction(selectedMenuItem);
+ }
+
+ if (GUILayout.Button(GUIContent.none, EditorStyles.toolbarDropDown))
+ {
+ Vector2 mousePos = Event.current.mousePosition;
+ EditorUtility.DisplayCustomMenu(new Rect(mousePos.x, mousePos.y, 0, 0),
+ menuItems.Select(m => m.name).ToArray(),
+ -1,
+ (object userData, string[] options, int selected) => m_SelectedOption = selected,
+ menuItems);
+ }
+
+ EditorGUILayout.EndHorizontal();
+ DrawFilters();
+ EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(false));
+ EditorGUILayout.EndHorizontal();
+ }
+
+ public override void RenderNoTestsInfo()
+ {
+ if (!TestListGUIHelper.SelectedFolderContainsTestAssembly())
+ {
+ var noTestText = "No tests to show";
+ if (!PlayerSettings.playModeTestRunnerEnabled)
+ {
+ const string testsArePulledFromCustomAssemblues = "Test Assemblies are defined by Assembly Definitions that references the \"nunit.framework.dll\" Assembly Reference or the Assembly Definition Reference \"UnityEngine.TestRunner\".";
+ const string infoTextAboutTestsInAllAssemblies =
+ "To have tests in all assemblies enable it in the Test Runner window context menu";
+ noTestText += Environment.NewLine + testsArePulledFromCustomAssemblues + Environment.NewLine +
+ infoTextAboutTestsInAllAssemblies;
+ }
+
+ EditorGUILayout.HelpBox(noTestText, MessageType.Info);
+ if (GUILayout.Button("Create PlayMode Test Assembly Folder"))
+ {
+ TestListGUIHelper.AddFolderAndAsmDefForTesting();
+ }
+ }
+
+ if (!TestListGUIHelper.CanAddPlayModeTestScriptAndItWillCompile())
+ {
+ UnityEngine.GUI.enabled = false;
+ EditorGUILayout.HelpBox("PlayMode test scripts can only be created in non editor test assemblies.", MessageType.Warning);
+ }
+ if (GUILayout.Button("Create Test Script in current folder"))
+ {
+ TestListGUIHelper.AddTest();
+ }
+ UnityEngine.GUI.enabled = true;
+ }
+
+ protected override void RunTests(UITestRunnerFilter[] filters)
+ {
+ foreach (var filter in filters)
+ {
+ filter.ClearResults(newResultList.OfType().ToList());
+ }
+
+ RerunCallbackData.instance.runFilters = filters;
+ RerunCallbackData.instance.testMode = TestMode.PlayMode;
+
+ var testRunnerApi = ScriptableObject.CreateInstance();
+ testRunnerApi.Execute(new ExecutionSettings()
+ {
+ filters = filters.Select(filter => new Filter()
+ {
+ assemblyNames = filter.assemblyNames,
+ categoryNames = filter.categoryNames,
+ groupNames = filter.groupNames,
+ testMode = TestMode,
+ testNames = filter.testNames
+ }).ToArray()
+ });
+ }
+
+
+ protected void RunTestsInPlayer(PlayerLauncherTestRunSettings runSettings, params UITestRunnerFilter[] filters)
+ {
+ foreach (var filter in filters)
+ {
+ filter.ClearResults(newResultList.OfType().ToList());
+ }
+
+ var testRunnerApi = ScriptableObject.CreateInstance();
+ testRunnerApi.Execute(new ExecutionSettings()
+ {
+ overloadTestRunSettings = runSettings,
+ filters = filters.Select(filter => new Filter()
+ {
+ assemblyNames = filter.assemblyNames,
+ categoryNames = filter.categoryNames,
+ groupNames = filter.groupNames,
+ testMode = TestMode,
+ testNames = filter.testNames
+ }).ToArray(),
+ targetPlatform = EditorUserBuildSettings.activeBuildTarget
+ });
+ }
+
+ public override TestPlatform TestPlatform { get { return TestPlatform.PlayMode; } }
+
+ protected override bool IsBusy()
+ {
+ return TestRunnerApi.IsRunActive() || PlaymodeLauncher.IsRunning || EditorApplication.isCompiling || EditorApplication.isPlaying;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta
new file mode 100644
index 00000000..6f0c1d6d
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c3efd39f2cfb43a4c830d4fd5689900f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs
new file mode 100644
index 00000000..ae633bac
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs
@@ -0,0 +1,540 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.RegularExpressions;
+using UnityEditor.IMGUI.Controls;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace UnityEditor.TestTools.TestRunner.GUI
+{
+ internal abstract class TestListGUI
+ {
+ private static readonly GUIContent s_GUIRunSelectedTests = EditorGUIUtility.TrTextContent("Run Selected", "Run selected test(s)");
+ private static readonly GUIContent s_GUIRunAllTests = EditorGUIUtility.TrTextContent("Run All", "Run all tests");
+ private static readonly GUIContent s_GUIRerunFailedTests = EditorGUIUtility.TrTextContent("Rerun Failed", "Rerun all failed tests");
+ private static readonly GUIContent s_GUIRun = EditorGUIUtility.TrTextContent("Run");
+ private static readonly GUIContent s_GUIRunUntilFailed = EditorGUIUtility.TrTextContent("Run Until Failed");
+ private static readonly GUIContent s_GUIRun100Times = EditorGUIUtility.TrTextContent("Run 100 times");
+ private static readonly GUIContent s_GUIOpenTest = EditorGUIUtility.TrTextContent("Open source code");
+ private static readonly GUIContent s_GUIOpenErrorLine = EditorGUIUtility.TrTextContent("Open error line");
+ private static readonly GUIContent s_GUIClearResults = EditorGUIUtility.TrTextContent("Clear Results", "Clear all test results");
+
+ [SerializeField]
+ protected TestRunnerWindow m_Window;
+ [SerializeField]
+ public List newResultList = new List();
+ [SerializeField]
+ private string m_ResultText;
+ [SerializeField]
+ private string m_ResultStacktrace;
+
+ private TreeViewController m_TestListTree;
+ [SerializeField]
+ internal TreeViewState m_TestListState;
+ [SerializeField]
+ internal TestRunnerUIFilter m_TestRunnerUIFilter = new TestRunnerUIFilter();
+
+ private Vector2 m_TestInfoScroll, m_TestListScroll;
+ private string m_PreviousProjectPath;
+ private List m_QueuedResults = new List();
+
+ protected TestListGUI()
+ {
+ MonoCecilHelper = new MonoCecilHelper();
+ AssetsDatabaseHelper = new AssetsDatabaseHelper();
+
+ GuiHelper = new GuiHelper(MonoCecilHelper, AssetsDatabaseHelper);
+ }
+
+ protected IMonoCecilHelper MonoCecilHelper { get; private set; }
+ protected IAssetsDatabaseHelper AssetsDatabaseHelper { get; private set; }
+ protected IGuiHelper GuiHelper { get; private set; }
+ protected UITestRunnerFilter[] SelectedTestsFilter => GetSelectedTestsAsFilter(m_TestListTree.GetSelection());
+
+ public abstract TestMode TestMode { get; }
+
+ public virtual void PrintHeadPanel()
+ {
+ EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
+ using (new EditorGUI.DisabledScope(IsBusy()))
+ {
+ if (GUILayout.Button(s_GUIRunAllTests, EditorStyles.toolbarButton))
+ {
+ var filter = new UITestRunnerFilter {categoryNames = m_TestRunnerUIFilter.CategoryFilter};
+ RunTests(filter);
+ GUIUtility.ExitGUI();
+ }
+ }
+ using (new EditorGUI.DisabledScope(m_TestListTree == null || !m_TestListTree.HasSelection() || IsBusy()))
+ {
+ if (GUILayout.Button(s_GUIRunSelectedTests, EditorStyles.toolbarButton))
+ {
+ RunTests(SelectedTestsFilter);
+ GUIUtility.ExitGUI();
+ }
+ }
+ using (new EditorGUI.DisabledScope(m_TestRunnerUIFilter.FailedCount == 0 || IsBusy()))
+ {
+ if (GUILayout.Button(s_GUIRerunFailedTests, EditorStyles.toolbarButton))
+ {
+ var failedTestnames = new List();
+ foreach (var result in newResultList)
+ {
+ if (result.isSuite)
+ continue;
+ if (result.resultStatus == TestRunnerResult.ResultStatus.Failed ||
+ result.resultStatus == TestRunnerResult.ResultStatus.Inconclusive)
+ failedTestnames.Add(result.fullName);
+ }
+ RunTests(new UITestRunnerFilter() {testNames = failedTestnames.ToArray(), categoryNames = m_TestRunnerUIFilter.CategoryFilter});
+ GUIUtility.ExitGUI();
+ }
+ }
+ using (new EditorGUI.DisabledScope(IsBusy()))
+ {
+ if (GUILayout.Button(s_GUIClearResults, EditorStyles.toolbarButton))
+ {
+ foreach (var result in newResultList)
+ {
+ result.Clear();
+ }
+ m_TestRunnerUIFilter.UpdateCounters(newResultList);
+ Reload();
+ GUIUtility.ExitGUI();
+ }
+ }
+ GUILayout.FlexibleSpace();
+ EditorGUILayout.EndHorizontal();
+ }
+
+ protected void DrawFilters()
+ {
+ EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
+ m_TestRunnerUIFilter.Draw();
+ EditorGUILayout.EndHorizontal();
+ }
+
+ public bool HasTreeData()
+ {
+ return m_TestListTree != null;
+ }
+
+ public virtual void RenderTestList()
+ {
+ if (m_TestListTree == null)
+ {
+ GUILayout.Label("Loading...");
+ return;
+ }
+
+ m_TestListScroll = EditorGUILayout.BeginScrollView(m_TestListScroll,
+ GUILayout.ExpandWidth(true),
+ GUILayout.MaxWidth(2000));
+
+ if (m_TestListTree.data.root == null || m_TestListTree.data.rowCount == 0 || (!m_TestListTree.isSearching && !m_TestListTree.data.GetItem(0).hasChildren))
+ {
+ if (m_TestRunnerUIFilter.IsFiltering)
+ {
+ if (GUILayout.Button("Clear filters"))
+ {
+ m_TestRunnerUIFilter.Clear();
+ m_TestListTree.ReloadData();
+ m_Window.Repaint();
+ }
+ }
+ RenderNoTestsInfo();
+ }
+ else
+ {
+ var treeRect = EditorGUILayout.GetControlRect(GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true));
+ var treeViewKeyboardControlId = GUIUtility.GetControlID(FocusType.Keyboard);
+
+ m_TestListTree.OnGUI(treeRect, treeViewKeyboardControlId);
+ }
+
+ EditorGUILayout.EndScrollView();
+ }
+
+ public virtual void RenderNoTestsInfo()
+ {
+ EditorGUILayout.HelpBox("No tests to show", MessageType.Info);
+ }
+
+ public void RenderDetails()
+ {
+ m_TestInfoScroll = EditorGUILayout.BeginScrollView(m_TestInfoScroll);
+ var resultTextSize = TestRunnerWindow.Styles.info.CalcSize(new GUIContent(m_ResultText));
+ EditorGUILayout.SelectableLabel(m_ResultText, TestRunnerWindow.Styles.info,
+ GUILayout.ExpandHeight(true),
+ GUILayout.ExpandWidth(true),
+ GUILayout.MinWidth(resultTextSize.x),
+ GUILayout.MinHeight(resultTextSize.y));
+ EditorGUILayout.EndScrollView();
+ }
+
+ public void Reload()
+ {
+ if (m_TestListTree != null)
+ {
+ m_TestListTree.ReloadData();
+ UpdateQueuedResults();
+ }
+ }
+
+ public void Repaint()
+ {
+ if (m_TestListTree == null || m_TestListTree.data.root == null)
+ {
+ return;
+ }
+
+ m_TestListTree.Repaint();
+ if (m_TestListTree.data.rowCount == 0)
+ m_TestListTree.SetSelection(new int[0], false);
+ TestSelectionCallback(m_TestListState.selectedIDs.ToArray());
+ }
+
+ public void Init(TestRunnerWindow window, ITestAdaptor rootTest)
+ {
+ if (m_Window == null)
+ {
+ m_Window = window;
+ }
+
+ if (m_TestListTree == null)
+ {
+ if (m_TestListState == null)
+ {
+ m_TestListState = new TreeViewState();
+ }
+ if (m_TestListTree == null)
+ m_TestListTree = new TreeViewController(m_Window, m_TestListState);
+
+ m_TestListTree.deselectOnUnhandledMouseDown = false;
+
+ m_TestListTree.selectionChangedCallback += TestSelectionCallback;
+ m_TestListTree.itemDoubleClickedCallback += TestDoubleClickCallback;
+ m_TestListTree.contextClickItemCallback += TestContextClickCallback;
+
+ var testListTreeViewDataSource = new TestListTreeViewDataSource(m_TestListTree, this, rootTest);
+
+ if (!newResultList.Any())
+ testListTreeViewDataSource.ExpandTreeOnCreation();
+
+ m_TestListTree.Init(new Rect(),
+ testListTreeViewDataSource,
+ new TestListTreeViewGUI(m_TestListTree),
+ null);
+ }
+
+ EditorApplication.update += RepaintIfProjectPathChanged;
+
+ m_TestRunnerUIFilter.UpdateCounters(newResultList);
+ m_TestRunnerUIFilter.RebuildTestList = () => m_TestListTree.ReloadData();
+ m_TestRunnerUIFilter.SearchStringChanged = s => m_TestListTree.searchString = s;
+ m_TestRunnerUIFilter.SearchStringCleared = () => FrameSelection();
+ }
+
+ public void UpdateResult(TestRunnerResult result)
+ {
+ if (!HasTreeData())
+ {
+ m_QueuedResults.Add(result);
+ return;
+ }
+
+ if (newResultList.All(x => x.uniqueId != result.uniqueId))
+ {
+ return;
+ }
+
+ var testRunnerResult = newResultList.FirstOrDefault(x => x.uniqueId == result.uniqueId);
+ if (testRunnerResult != null)
+ {
+ testRunnerResult.Update(result);
+ }
+
+ Repaint();
+ m_Window.Repaint();
+ }
+
+ public void UpdateTestTree(ITestAdaptor test)
+ {
+ if (!HasTreeData())
+ {
+ return;
+ }
+
+ (m_TestListTree.data as TestListTreeViewDataSource).UpdateRootTest(test);
+
+ m_TestListTree.ReloadData();
+ Repaint();
+ m_Window.Repaint();
+ }
+
+ private void UpdateQueuedResults()
+ {
+ foreach (var testRunnerResult in m_QueuedResults)
+ {
+ var existingResult = newResultList.FirstOrDefault(x => x.uniqueId == testRunnerResult.uniqueId);
+ if (existingResult != null)
+ {
+ existingResult.Update(testRunnerResult);
+ }
+ }
+ m_QueuedResults.Clear();
+ TestSelectionCallback(m_TestListState.selectedIDs.ToArray());
+ m_TestRunnerUIFilter.UpdateCounters(newResultList);
+ Repaint();
+ m_Window.Repaint();
+ }
+
+ internal void TestSelectionCallback(int[] selected)
+ {
+ if (m_TestListTree != null && selected.Length == 1)
+ {
+ if (m_TestListTree != null)
+ {
+ var node = m_TestListTree.FindItem(selected[0]);
+ if (node is TestTreeViewItem)
+ {
+ var test = node as TestTreeViewItem;
+ m_ResultText = test.GetResultText();
+ m_ResultStacktrace = test.result.stacktrace;
+ }
+ }
+ }
+ else if (selected.Length == 0)
+ {
+ m_ResultText = "";
+ }
+ }
+
+ protected virtual void TestDoubleClickCallback(int id)
+ {
+ if (IsBusy())
+ return;
+
+ RunTests(GetSelectedTestsAsFilter(new List { id }));
+ GUIUtility.ExitGUI();
+ }
+
+ protected virtual void RunTests(params UITestRunnerFilter[] filters)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected virtual void TestContextClickCallback(int id)
+ {
+ if (id == 0)
+ return;
+
+ var m = new GenericMenu();
+ var testFilters = GetSelectedTestsAsFilter(m_TestListState.selectedIDs);
+ var multilineSelection = m_TestListState.selectedIDs.Count > 1;
+
+ if (!multilineSelection)
+ {
+ var testNode = GetSelectedTest();
+ var isNotSuite = !testNode.IsGroupNode;
+ if (isNotSuite)
+ {
+ if (!string.IsNullOrEmpty(m_ResultStacktrace))
+ {
+ m.AddItem(s_GUIOpenErrorLine,
+ false,
+ data =>
+ {
+ if (!GuiHelper.OpenScriptInExternalEditor(m_ResultStacktrace))
+ {
+ GuiHelper.OpenScriptInExternalEditor(testNode.type, testNode.method);
+ }
+ },
+ "");
+ }
+
+ m.AddItem(s_GUIOpenTest,
+ false,
+ data => GuiHelper.OpenScriptInExternalEditor(testNode.type, testNode.method),
+ "");
+ m.AddSeparator("");
+ }
+ }
+
+ if (!IsBusy())
+ {
+ m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun,
+ false,
+ data => RunTests(testFilters),
+ "");
+
+ if (EditorPrefs.GetBool("DeveloperMode", false))
+ {
+ m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRunUntilFailed,
+ false,
+ data =>
+ {
+ foreach (var filter in testFilters)
+ {
+ filter.testRepetitions = int.MaxValue;
+ }
+
+ RunTests(testFilters);
+ },
+ "");
+
+ m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun100Times,
+ false,
+ data =>
+ {
+ foreach (var filter in testFilters)
+ {
+ filter.testRepetitions = 100;
+ }
+
+ RunTests(testFilters);
+ },
+ "");
+ }
+ }
+ else
+ m.AddDisabledItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun, false);
+
+ m.ShowAsContext();
+ }
+
+ private UITestRunnerFilter[] GetSelectedTestsAsFilter(IEnumerable selectedIDs)
+ {
+ var namesToRun = new List();
+ var assembliesForNamesToRun = new List();
+ var exactNamesToRun = new List();
+ var assembliesToRun = new List();
+ foreach (var lineId in selectedIDs)
+ {
+ var line = m_TestListTree.FindItem(lineId);
+ if (line is TestTreeViewItem)
+ {
+ var testLine = line as TestTreeViewItem;
+ if (testLine.IsGroupNode && !testLine.FullName.Contains("+"))
+ {
+ if (testLine.parent != null && testLine.parent.displayName == "Invisible Root Item")
+ {
+ //Root node selected. Use an empty TestRunnerFilter to run every test
+ return new[] {new UITestRunnerFilter()};
+ }
+
+ if (testLine.FullName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
+ {
+ assembliesToRun.Add(UITestRunnerFilter.AssemblyNameFromPath(testLine.FullName));
+ }
+ else
+ {
+ namesToRun.Add($"^{Regex.Escape(testLine.FullName)}$");
+ var assembly = UITestRunnerFilter.AssemblyNameFromPath(testLine.GetAssemblyName());
+ if (!string.IsNullOrEmpty(assembly) && !assembliesForNamesToRun.Contains(assembly))
+ {
+ assembliesForNamesToRun.Add(assembly);
+ }
+ }
+ }
+ else
+ {
+ exactNamesToRun.Add(testLine.FullName);
+ }
+ }
+ }
+
+ var filters = new List();
+
+ if (assembliesToRun.Count > 0)
+ {
+ filters.Add(new UITestRunnerFilter()
+ {
+ assemblyNames = assembliesToRun.ToArray()
+ });
+ }
+
+ if (namesToRun.Count > 0)
+ {
+ filters.Add(new UITestRunnerFilter()
+ {
+ groupNames = namesToRun.ToArray(),
+ assemblyNames = assembliesForNamesToRun.ToArray()
+ });
+ }
+
+ if (exactNamesToRun.Count > 0)
+ {
+ filters.Add(new UITestRunnerFilter()
+ {
+ testNames = exactNamesToRun.ToArray()
+ });
+ }
+
+ if (filters.Count == 0)
+ {
+ filters.Add(new UITestRunnerFilter());
+ }
+
+ var categories = m_TestRunnerUIFilter.CategoryFilter.ToArray();
+ if (categories.Length > 0)
+ {
+ foreach (var filter in filters)
+ {
+ filter.categoryNames = categories;
+ }
+ }
+
+ return filters.ToArray();
+ }
+
+ private TestTreeViewItem GetSelectedTest()
+ {
+ foreach (var lineId in m_TestListState.selectedIDs)
+ {
+ var line = m_TestListTree.FindItem(lineId);
+ if (line is TestTreeViewItem)
+ {
+ return line as TestTreeViewItem;
+ }
+ }
+ return null;
+ }
+
+ private void FrameSelection()
+ {
+ if (m_TestListTree.HasSelection())
+ {
+ var firstClickedID = m_TestListState.selectedIDs.First() == m_TestListState.lastClickedID ? m_TestListState.selectedIDs.Last() : m_TestListState.selectedIDs.First();
+ m_TestListTree.Frame(firstClickedID, true, false);
+ }
+ }
+
+ public abstract TestPlatform TestPlatform { get; }
+
+ public void RebuildUIFilter()
+ {
+ m_TestRunnerUIFilter.UpdateCounters(newResultList);
+ if (m_TestRunnerUIFilter.IsFiltering)
+ {
+ m_TestListTree.ReloadData();
+ }
+ }
+
+ public void RepaintIfProjectPathChanged()
+ {
+ var path = TestListGUIHelper.GetActiveFolderPath();
+ if (path != m_PreviousProjectPath)
+ {
+ m_PreviousProjectPath = path;
+ TestRunnerWindow.s_Instance.Repaint();
+ }
+
+ EditorApplication.update -= RepaintIfProjectPathChanged;
+ }
+
+ protected abstract bool IsBusy();
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta
new file mode 100644
index 00000000..3bef151c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b8abb41ceb6f62c45a00197ae59224c1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension.meta
new file mode 100644
index 00000000..0c998895
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3f9202a39620f51418046c7754f215f0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes.meta
new file mode 100644
index 00000000..a5930f1a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 96c503bf059df984c86eecf572370347
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs
new file mode 100644
index 00000000..e71b62c9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs
@@ -0,0 +1,63 @@
+using System;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+
+namespace UnityEditor.TestTools
+{
+ ///
+ /// Ignore attributes dedicated to Asset Import Pipeline backend version handling.
+ ///
+ internal static class AssetPipelineIgnore
+ {
+ internal enum AssetPipelineBackend
+ {
+ V1,
+ V2
+ }
+
+ ///
+ /// Ignore the test when running with the legacy Asset Import Pipeline V1 backend.
+ ///
+ internal class IgnoreInV1 : AssetPipelineIgnoreAttribute
+ {
+ public IgnoreInV1(string ignoreReason) : base(AssetPipelineBackend.V1, ignoreReason) {}
+ }
+
+ ///
+ /// Ignore the test when running with the latest Asset Import Pipeline V2 backend.
+ ///
+ internal class IgnoreInV2 : AssetPipelineIgnoreAttribute
+ {
+ public IgnoreInV2(string ignoreReason) : base(AssetPipelineBackend.V2, ignoreReason) {}
+ }
+
+ [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
+ internal class AssetPipelineIgnoreAttribute : NUnitAttribute, IApplyToTest
+ {
+ readonly string m_IgnoreReason;
+ readonly AssetPipelineBackend m_IgnoredBackend;
+ static readonly AssetPipelineBackend k_ActiveBackend = AssetDatabase.IsV2Enabled()
+ ? AssetPipelineBackend.V2
+ : AssetPipelineBackend.V1;
+
+ static string ActiveBackendName = Enum.GetName(typeof(AssetPipelineBackend), k_ActiveBackend);
+
+ public AssetPipelineIgnoreAttribute(AssetPipelineBackend backend, string ignoreReason)
+ {
+ m_IgnoredBackend = backend;
+ m_IgnoreReason = ignoreReason;
+ }
+
+ public void ApplyToTest(Test test)
+ {
+ if (k_ActiveBackend == m_IgnoredBackend)
+ {
+ test.RunState = RunState.Ignored;
+ var skipReason = string.Format("Not supported by asset pipeline {0} backend {1}", ActiveBackendName, m_IgnoreReason);
+ test.Properties.Add(PropertyNames.SkipReason, skipReason);
+ }
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta
new file mode 100644
index 00000000..5f7207f1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b88caca58e05ee74486d86fb404c48e2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs
new file mode 100644
index 00000000..dcc5dae6
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs
@@ -0,0 +1,15 @@
+namespace UnityEditor.TestTools
+{
+ ///
+ /// An interface for a callback modifying the when building a player for running tests in the runtime.
+ ///
+ public interface ITestPlayerBuildModifier
+ {
+ ///
+ /// A callback to modify the when building a player for test run. Return the modified version of the provided build options.
+ ///
+ /// The unmodified BuildPlayerOptions.
+ /// The modified BuildPlayerOptions.
+ BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions);
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta
new file mode 100644
index 00000000..1bb36a65
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6d2f47eae5f447748892c46848956d5f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs
new file mode 100644
index 00000000..328e6664
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace UnityEditor.TestTools
+{
+ [AttributeUsage(AttributeTargets.Assembly)]
+ public class TestPlayerBuildModifierAttribute : Attribute
+ {
+ private Type m_Type;
+ public TestPlayerBuildModifierAttribute(Type type)
+ {
+ var interfaceType = typeof(ITestPlayerBuildModifier);
+ if (!interfaceType.IsAssignableFrom(type))
+ {
+ throw new ArgumentException(string.Format("Type provided to {0} does not implement {1}", this.GetType().Name, interfaceType.Name));
+ }
+ m_Type = type;
+ }
+
+ internal ITestPlayerBuildModifier ConstructModifier()
+ {
+ return Activator.CreateInstance(m_Type) as ITestPlayerBuildModifier;
+ }
+ }
+}
+
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta
new file mode 100644
index 00000000..3f9dfe35
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dd57b1176859fc84e93586103d3b5f73
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs
new file mode 100644
index 00000000..a24190e4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs
@@ -0,0 +1,162 @@
+using System;
+using System.Reflection;
+using System.Text;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.TestRunner.NUnitExtensions.Runner;
+using UnityEngine.TestTools.NUnitExtensions;
+using UnityEngine.TestTools.Logging;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ [Serializable]
+ internal class TestRunnerStateSerializer : IStateSerializer
+ {
+ private const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy;
+
+ [SerializeField]
+ private HideFlags m_OriginalHideFlags;
+
+ [SerializeField]
+ private bool m_ShouldRestore;
+
+ [SerializeField]
+ private string m_TestObjectTypeName;
+
+ [SerializeField]
+ private ScriptableObject m_TestObject;
+
+ [SerializeField]
+ private string m_TestObjectTxt;
+
+ [SerializeField]
+ private long StartTicks;
+
+ [SerializeField]
+ private double StartTimeOA;
+
+ [SerializeField]
+ private string output;
+
+ [SerializeField]
+ private LogMatch[] m_ExpectedLogs;
+
+ public bool ShouldRestore()
+ {
+ return m_ShouldRestore;
+ }
+
+ public void SaveContext()
+ {
+ var currentContext = UnityTestExecutionContext.CurrentContext;
+
+ if (currentContext.TestObject != null)
+ {
+ m_TestObjectTypeName = currentContext.TestObject.GetType().AssemblyQualifiedName;
+ m_TestObject = null;
+ m_TestObjectTxt = null;
+ if (currentContext.TestObject is ScriptableObject)
+ {
+ m_TestObject = currentContext.TestObject as ScriptableObject;
+ m_OriginalHideFlags = m_TestObject.hideFlags;
+ m_TestObject.hideFlags |= HideFlags.DontSave;
+ }
+ else
+ {
+ m_TestObjectTxt = JsonUtility.ToJson(currentContext.TestObject);
+ }
+ }
+
+ output = currentContext.CurrentResult.Output;
+ StartTicks = currentContext.StartTicks;
+ StartTimeOA = currentContext.StartTime.ToOADate();
+ if (LogScope.HasCurrentLogScope())
+ {
+ m_ExpectedLogs = LogScope.Current.ExpectedLogs.ToArray();
+ }
+
+ m_ShouldRestore = true;
+ }
+
+ public void RestoreContext()
+ {
+ var currentContext = UnityTestExecutionContext.CurrentContext;
+
+ var outputProp = currentContext.CurrentResult.GetType().BaseType.GetField("_output", Flags);
+ (outputProp.GetValue(currentContext.CurrentResult) as StringBuilder).Append(output);
+
+ currentContext.StartTicks = StartTicks;
+ currentContext.StartTime = DateTime.FromOADate(StartTimeOA);
+ if (LogScope.HasCurrentLogScope())
+ {
+ LogScope.Current.ExpectedLogs = new Queue(m_ExpectedLogs);
+ }
+
+ m_ShouldRestore = false;
+ }
+
+ public bool CanRestoreFromScriptableObject(Type requestedType)
+ {
+ if (m_TestObject == null)
+ {
+ return false;
+ }
+ return m_TestObjectTypeName == requestedType.AssemblyQualifiedName;
+ }
+
+ public ScriptableObject RestoreScriptableObjectInstance()
+ {
+ if (m_TestObject == null)
+ {
+ Debug.LogError("No object to restore");
+ return null;
+ }
+ EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
+ var temp = m_TestObject;
+ m_TestObject = null;
+ m_TestObjectTypeName = null;
+ return temp;
+ }
+
+ public bool CanRestoreFromJson(Type requestedType)
+ {
+ if (string.IsNullOrEmpty(m_TestObjectTxt))
+ {
+ return false;
+ }
+ return m_TestObjectTypeName == requestedType.AssemblyQualifiedName;
+ }
+
+ public void RestoreClassFromJson(ref object instance)
+ {
+ if (string.IsNullOrEmpty(m_TestObjectTxt))
+ {
+ Debug.LogWarning("No JSON representation to restore");
+ return;
+ }
+ JsonUtility.FromJsonOverwrite(m_TestObjectTxt, instance);
+ m_TestObjectTxt = null;
+ m_TestObjectTypeName = null;
+ }
+
+ private void OnPlayModeStateChanged(PlayModeStateChange state)
+ {
+ if (m_TestObject == null)
+ {
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ return;
+ }
+
+ //We set the DontSave flag here because the ScriptableObject would be nulled right before entering EditMode
+ if (state == PlayModeStateChange.ExitingPlayMode)
+ {
+ m_TestObject.hideFlags |= HideFlags.DontSave;
+ }
+ else if (state == PlayModeStateChange.EnteredEditMode)
+ {
+ m_TestObject.hideFlags = m_OriginalHideFlags;
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta
new file mode 100644
index 00000000..7d36e9d1
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 124533853216377448d786fd7c725701
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequireApiProfileAttribute.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequireApiProfileAttribute.cs
new file mode 100644
index 00000000..e99d4524
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequireApiProfileAttribute.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Linq;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+
+namespace UnityEditor.TestTools
+{
+ [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
+ internal class RequireApiProfileAttribute : NUnitAttribute, IApplyToTest
+ {
+ public ApiCompatibilityLevel[] apiProfiles { get; private set; }
+
+ public RequireApiProfileAttribute(params ApiCompatibilityLevel[] apiProfiles)
+ {
+ this.apiProfiles = apiProfiles;
+ }
+
+ void IApplyToTest.ApplyToTest(Test test)
+ {
+ test.Properties.Add(PropertyNames.Category, string.Format("ApiProfile({0})", string.Join(", ", apiProfiles.Select(p => p.ToString()).OrderBy(p => p).ToArray())));
+ ApiCompatibilityLevel testProfile = PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup);
+
+ if (!apiProfiles.Contains(testProfile))
+ {
+ string skipReason = "Skipping test as it requires a compatible api profile set: " + string.Join(", ", apiProfiles.Select(p => p.ToString()).ToArray());
+ test.RunState = RunState.Skipped;
+ test.Properties.Add(PropertyNames.SkipReason, skipReason);
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta
new file mode 100644
index 00000000..66d03bd4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a667f6654ad7a9548b8c8e68b51c8895
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs
new file mode 100644
index 00000000..321a0fe0
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Linq;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+
+namespace UnityEditor.TestTools
+{
+ [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
+ public class RequirePlatformSupportAttribute : NUnitAttribute, IApplyToTest
+ {
+ public RequirePlatformSupportAttribute(params BuildTarget[] platforms)
+ {
+ this.platforms = platforms;
+ }
+
+ public BuildTarget[] platforms { get; private set; }
+
+ void IApplyToTest.ApplyToTest(Test test)
+ {
+ test.Properties.Add(PropertyNames.Category, string.Format("RequirePlatformSupport({0})", string.Join(", ", platforms.Select(p => p.ToString()).OrderBy(p => p).ToArray())));
+
+ if (!platforms.All(p => BuildPipeline.IsBuildTargetSupported(BuildTargetGroup.Unknown, p)))
+ {
+ var missingPlatforms = platforms.Where(p => !BuildPipeline.IsBuildTargetSupported(BuildTargetGroup.Unknown, p)).Select(p => p.ToString()).ToArray();
+ string skipReason = "Test cannot be run as it requires support for the following platforms to be installed: " + string.Join(", ", missingPlatforms);
+
+ test.RunState = RunState.Skipped;
+ test.Properties.Add(PropertyNames.SkipReason, skipReason);
+ }
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta
new file mode 100644
index 00000000..84930580
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d2146428d3f1ad54eb7326c9a44b3284
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs
new file mode 100644
index 00000000..a0947cbd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs
@@ -0,0 +1,22 @@
+using System.Linq;
+using UnityEditor.Build;
+
+namespace UnityEditor.TestRunner
+{
+ // This class is invoked from native, during build
+ internal class TestBuildAssemblyFilter : IFilterBuildAssemblies
+ {
+ private const string nunitAssemblyName = "nunit.framework";
+ private const string unityTestRunnerAssemblyName = "UnityEngine.TestRunner";
+
+ public int callbackOrder { get; }
+ public string[] OnFilterAssemblies(BuildOptions buildOptions, string[] assemblies)
+ {
+ if ((buildOptions & BuildOptions.IncludeTestAssemblies) == BuildOptions.IncludeTestAssemblies || PlayerSettings.playModeTestRunnerEnabled)
+ {
+ return assemblies;
+ }
+ return assemblies.Where(x => !x.Contains(nunitAssemblyName) && !x.Contains(unityTestRunnerAssemblyName)).ToArray();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta
new file mode 100644
index 00000000..f3cd3bd2
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3411e19edd44cfd46b548b058c3bc36c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers.meta
new file mode 100644
index 00000000..c6a951b3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d64d92e4f04a13e4b99ea8d48e9e8ae9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs
new file mode 100644
index 00000000..236d6a89
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework.Interfaces;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal abstract class AttributeFinderBase : IAttributeFinder
+ {
+ public abstract IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform);
+ }
+
+ internal interface IAttributeFinder
+ {
+ IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform);
+ }
+
+ internal abstract class AttributeFinderBase : AttributeFinderBase where T2 : Attribute
+ {
+ private readonly Func m_TypeSelector;
+ protected AttributeFinderBase(Func typeSelector)
+ {
+ m_TypeSelector = typeSelector;
+ }
+
+ public override IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform)
+ {
+ var selectedTests = new List();
+ GetMatchingTests(tests, filter, ref selectedTests, testTargetPlatform);
+
+ var result = new List();
+ result.AddRange(GetTypesFromPrebuildAttributes(selectedTests));
+ result.AddRange(GetTypesFromInterface(selectedTests, testTargetPlatform));
+
+ return result.Distinct();
+ }
+
+ private static void GetMatchingTests(ITest tests, ITestFilter filter, ref List resultList, RuntimePlatform testTargetPlatform)
+ {
+ foreach (var test in tests.Tests)
+ {
+ if (IsTestEnabledOnPlatform(test, testTargetPlatform))
+ {
+ if (test.IsSuite)
+ {
+ GetMatchingTests(test, filter, ref resultList, testTargetPlatform);
+ }
+ else
+ {
+ if (filter.Pass(test))
+ resultList.Add(test);
+ }
+ }
+ }
+ }
+
+ private static bool IsTestEnabledOnPlatform(ITest test, RuntimePlatform testTargetPlatform)
+ {
+ if (test.Method == null)
+ {
+ return true;
+ }
+
+ var attributesFromMethods = test.Method.GetCustomAttributes(true).Select(attribute => attribute);
+ var attributesFromTypes = test.Method.TypeInfo.GetCustomAttributes(true).Select(attribute => attribute);
+
+ if (!attributesFromMethods.All(a => a.IsPlatformSupported(testTargetPlatform)))
+ {
+ return false;
+ }
+
+ if (!attributesFromTypes.All(a => a.IsPlatformSupported(testTargetPlatform)))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ private IEnumerable GetTypesFromPrebuildAttributes(IEnumerable tests)
+ {
+ var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
+ allAssemblies = allAssemblies.Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEditor.TestRunner")).ToArray();
+ var attributesFromAssemblies = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(T2), true).OfType());
+ var attributesFromMethods = tests.SelectMany(t => t.Method.GetCustomAttributes(true).Select(attribute => attribute));
+ var attributesFromTypes = tests.SelectMany(t => t.Method.TypeInfo.GetCustomAttributes(true).Select(attribute => attribute));
+
+ var result = new List();
+ result.AddRange(attributesFromAssemblies);
+ result.AddRange(attributesFromMethods);
+ result.AddRange(attributesFromTypes);
+
+ return result.Select(m_TypeSelector).Where(type => type != null);
+ }
+
+ private static IEnumerable GetTypesFromInterface(IEnumerable selectedTests, RuntimePlatform testTargetPlatform)
+ {
+ var typesWithInterfaces = selectedTests.Where(t => typeof(T1).IsAssignableFrom(t.Method.TypeInfo.Type) && IsTestEnabledOnPlatform(t, testTargetPlatform));
+ return typesWithInterfaces.Select(t => t.Method.TypeInfo.Type);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta
new file mode 100644
index 00000000..19986f0e
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5d4de3d4682a8d641907cc75e4fb950e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs
new file mode 100644
index 00000000..b331d155
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs
@@ -0,0 +1,44 @@
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class DelayedCallback
+ {
+ private System.Action m_Callback;
+ private double m_CallbackTime;
+ private double m_Delay;
+
+ public DelayedCallback(System.Action function, double timeFromNow)
+ {
+ m_Callback = function;
+ m_CallbackTime = EditorApplication.timeSinceStartup + timeFromNow;
+ m_Delay = timeFromNow;
+ EditorApplication.update += Update;
+ }
+
+ public void Clear()
+ {
+ EditorApplication.update -= Update;
+ m_CallbackTime = 0.0;
+ m_Callback = null;
+ }
+
+ private void Update()
+ {
+ if (EditorApplication.timeSinceStartup > m_CallbackTime)
+ {
+ // Clear state before firing callback to ensure reset (callback could call ExitGUI)
+ var callback = m_Callback;
+ Clear();
+
+ callback?.Invoke();
+ }
+ }
+
+ public void Reset()
+ {
+ if (m_Callback != null)
+ {
+ m_CallbackTime = EditorApplication.timeSinceStartup + m_Delay;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs.meta
new file mode 100644
index 00000000..5218c8ec
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b9d121df8c444236a5b38ccfadfdd1a7
+timeCreated: 1583140472
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs
new file mode 100644
index 00000000..12683dcf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs
@@ -0,0 +1,161 @@
+using System;
+using System.Collections.Generic;
+using NUnit.Framework.Interfaces;
+using UnityEditor.SceneManagement;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEditor.TestTools.TestRunner.GUI;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.TestRunner.Utils;
+using UnityEngine.TestTools;
+using UnityEngine.TestTools.TestRunner;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class EditModeLauncher : TestLauncherBase
+ {
+ public static bool IsRunning;
+ internal readonly EditModeRunner m_EditModeRunner;
+ public bool launchedOutsideApi;
+
+ // provided for backward compatibility with Rider UnitTesting prior to Rider package v.1.1.1
+ public EditModeLauncher(UITestRunnerFilter filter, TestPlatform platform)
+ {
+ launchedOutsideApi = true;
+ var apiFilter = new[]
+ {
+ new Filter()
+ {
+ testMode = TestMode.EditMode,
+ testNames = filter.testNames,
+ categoryNames = filter.categoryNames,
+ groupNames = filter.groupNames,
+ assemblyNames = filter.assemblyNames
+ }
+ };
+
+ ScriptableObject.CreateInstance().Execute(new ExecutionSettings(apiFilter));
+ }
+
+ public EditModeLauncher(Filter[] filters, TestPlatform platform, bool runSynchronously)
+ {
+ TestEnumerator.Reset();
+ m_EditModeRunner = ScriptableObject.CreateInstance();
+ m_EditModeRunner.UnityTestAssemblyRunnerFactory = new UnityTestAssemblyRunnerFactory();
+ m_EditModeRunner.Init(filters, platform, runSynchronously);
+ }
+
+ public override void Run()
+ {
+ if (launchedOutsideApi)
+ {
+ // Do not use the launcher, as it will be relaunched trough the api. See ctor.
+ return;
+ }
+
+ IsRunning = true;
+
+ SceneSetup[] previousSceneSetup;
+ if (!OpenNewScene(out previousSceneSetup))
+ return;
+
+ var callback = AddEventHandler();
+ callback.previousSceneSetup = previousSceneSetup;
+ callback.runner = m_EditModeRunner;
+ AddEventHandler();
+
+ m_EditModeRunner.Run();
+ AddEventHandler();
+ AddEventHandler();
+
+ if (m_EditModeRunner.RunningSynchronously)
+ m_EditModeRunner.CompleteSynchronously();
+ }
+
+ private static bool OpenNewScene(out SceneSetup[] previousSceneSetup)
+ {
+ previousSceneSetup = null;
+
+ var sceneCount = SceneManager.sceneCount;
+
+ var scene = SceneManager.GetSceneAt(0);
+ var isSceneNotPersisted = string.IsNullOrEmpty(scene.path);
+
+ if (sceneCount == 1 && isSceneNotPersisted)
+ {
+ EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single);
+ return true;
+ }
+ RemoveUntitledScenes();
+
+ // In case the user chose not to save the dirty scenes we reload them
+ ReloadUnsavedDirtyScene();
+
+ previousSceneSetup = EditorSceneManager.GetSceneManagerSetup();
+
+ scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive);
+ SceneManager.SetActiveScene(scene);
+
+ return true;
+ }
+
+ private static void ReloadUnsavedDirtyScene()
+ {
+ for (var i = 0; i < SceneManager.sceneCount; i++)
+ {
+ var scene = SceneManager.GetSceneAt(i);
+ var isSceneNotPersisted = string.IsNullOrEmpty(scene.path);
+ var isSceneDirty = scene.isDirty;
+ if (isSceneNotPersisted && isSceneDirty)
+ {
+ EditorSceneManager.ReloadScene(scene);
+ }
+ }
+ }
+
+ private static void RemoveUntitledScenes()
+ {
+ int sceneCount = SceneManager.sceneCount;
+
+ var scenesToClose = new List();
+ for (var i = 0; i < sceneCount; i++)
+ {
+ var scene = SceneManager.GetSceneAt(i);
+ var isSceneNotPersisted = string.IsNullOrEmpty(scene.path);
+ if (isSceneNotPersisted)
+ {
+ scenesToClose.Add(scene);
+ }
+ }
+ foreach (Scene scene in scenesToClose)
+ {
+ EditorSceneManager.CloseScene(scene, true);
+ }
+ }
+
+ public class BackgroundListener : ScriptableObject, ITestRunnerListener
+ {
+ public void RunStarted(ITest testsToRun)
+ {
+ }
+
+ public void RunFinished(ITestResult testResults)
+ {
+ IsRunning = false;
+ }
+
+ public void TestStarted(ITest test)
+ {
+ }
+
+ public void TestFinished(ITestResult result)
+ {
+ }
+ }
+
+ public T AddEventHandler() where T : ScriptableObject, ITestRunnerListener
+ {
+ return m_EditModeRunner.AddEventHandler();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta
new file mode 100644
index 00000000..694d7d6a
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ac68f5ae37c8957468562b8da42f9984
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs
new file mode 100644
index 00000000..e20305cd
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs
@@ -0,0 +1,31 @@
+using System;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class EditModeLauncherContextSettings : IDisposable
+ {
+ private bool m_RunInBackground;
+
+ public EditModeLauncherContextSettings()
+ {
+ SetupProjectParameters();
+ }
+
+ public void Dispose()
+ {
+ CleanupProjectParameters();
+ }
+
+ private void SetupProjectParameters()
+ {
+ m_RunInBackground = Application.runInBackground;
+ Application.runInBackground = true;
+ }
+
+ private void CleanupProjectParameters()
+ {
+ Application.runInBackground = m_RunInBackground;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta
new file mode 100644
index 00000000..2bed8fde
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a582090813554df479fb9ca03e9857d3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta
new file mode 100644
index 00000000..49473826
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ebc4d20cc106cea49b1df1153f0b3b5e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs
new file mode 100644
index 00000000..e0f72777
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs
@@ -0,0 +1,66 @@
+using System;
+using UnityEngine;
+using System.Net;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class AndroidPlatformSetup : IPlatformSetup
+ {
+ private string m_oldApplicationIdentifier;
+ private string m_oldDeviceSocketAddress;
+ [SerializeField]
+ private bool m_Stripping;
+
+ public void Setup()
+ {
+ m_oldApplicationIdentifier = PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.Android);
+ PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.UnityTestRunner.UnityTestRunner");
+
+ m_oldDeviceSocketAddress = EditorUserBuildSettings.androidDeviceSocketAddress;
+ var androidDeviceConnection = Environment.GetEnvironmentVariable("ANDROID_DEVICE_CONNECTION");
+ EditorUserBuildSettings.waitForPlayerConnection = true;
+ if (androidDeviceConnection != null)
+ {
+ EditorUserBuildSettings.androidDeviceSocketAddress = androidDeviceConnection;
+ }
+ m_Stripping = PlayerSettings.stripEngineCode;
+ PlayerSettings.stripEngineCode = false;
+ }
+
+ public void PostBuildAction()
+ {
+ PlayerSettings.stripEngineCode = m_Stripping;
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ var connectionResult = -1;
+ var maxTryCount = 10;
+ var tryCount = maxTryCount;
+ while (tryCount-- > 0 && connectionResult == -1)
+ {
+ connectionResult = EditorConnectionInternal.ConnectPlayerProxy(IPAddress.Loopback.ToString(), 34999);
+ if (EditorUtility.DisplayCancelableProgressBar("Editor Connection", "Connecting to the player",
+ 1 - ((float)tryCount / maxTryCount)))
+ {
+ EditorUtility.ClearProgressBar();
+ throw new TestLaunchFailedException();
+ }
+ }
+ EditorUtility.ClearProgressBar();
+ if (connectionResult == -1)
+ throw new TestLaunchFailedException(
+ "Timed out trying to connect to the player. Player failed to launch or crashed soon after launching");
+ }
+
+ public void CleanUp()
+ {
+ EditorUserBuildSettings.androidDeviceSocketAddress = m_oldDeviceSocketAddress;
+ PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, m_oldApplicationIdentifier);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta
new file mode 100644
index 00000000..6e18a7c7
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 961642509dec50b44a293d26240140ec
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs
new file mode 100644
index 00000000..f625eb23
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Diagnostics;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ [Serializable]
+ internal class ApplePlatformSetup : IPlatformSetup
+ {
+ [SerializeField]
+ private bool m_Stripping;
+
+ public ApplePlatformSetup(BuildTarget buildTarget)
+ {
+ }
+
+ public void Setup()
+ {
+ // Camera and fonts are stripped out and app crashes on iOS when test runner is trying to add a scene with... camera and text
+ m_Stripping = PlayerSettings.stripEngineCode;
+ PlayerSettings.stripEngineCode = false;
+ }
+
+ public void PostBuildAction()
+ {
+ // Restoring player setting as early as possible
+ PlayerSettings.stripEngineCode = m_Stripping;
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ }
+
+ public void CleanUp()
+ {
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta
new file mode 100644
index 00000000..36f22a6b
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f6c189a159d3bde4c964cee562e508ea
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs
new file mode 100644
index 00000000..db76c212
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs
@@ -0,0 +1,11 @@
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal interface IPlatformSetup
+ {
+ void Setup();
+ void PostBuildAction();
+ void PostSuccessfulBuildAction();
+ void PostSuccessfulLaunchAction();
+ void CleanUp();
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta
new file mode 100644
index 00000000..94405b53
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9d614808f9add8a4f8e4860db2c7af0d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs
new file mode 100644
index 00000000..1a0c4bf4
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Threading;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class LuminPlatformSetup : IPlatformSetup
+ {
+ private const string kDeviceAddress = "127.0.0.1";
+ private const int kDevicePort = 55000;
+
+ public void Setup()
+ {
+ }
+
+ public void PostBuildAction()
+ {
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ var connectionResult = -1;
+ var maxTryCount = 100;
+ var tryCount = maxTryCount;
+ while (tryCount-- > 0 && connectionResult == -1)
+ {
+ Thread.Sleep(1000);
+ connectionResult = EditorConnectionInternal.ConnectPlayerProxy(kDeviceAddress, kDevicePort);
+ if (EditorUtility.DisplayCancelableProgressBar("Editor Connection", "Connecting to the player",
+ 1 - ((float)tryCount / maxTryCount)))
+ {
+ EditorUtility.ClearProgressBar();
+ throw new TestLaunchFailedException();
+ }
+ }
+ EditorUtility.ClearProgressBar();
+ if (connectionResult == -1)
+ throw new TestLaunchFailedException(
+ "Timed out trying to connect to the player. Player failed to launch or crashed soon after launching");
+ }
+
+ public void CleanUp()
+ {
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta
new file mode 100644
index 00000000..9e4dcc52
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c38ae0585d6a55042a2d678330689685
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs
new file mode 100644
index 00000000..4c8ae77c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs
@@ -0,0 +1,123 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ [Serializable]
+ internal class PlatformSpecificSetup
+ {
+ [SerializeField]
+ private ApplePlatformSetup m_AppleiOSPlatformSetup = new ApplePlatformSetup(BuildTarget.iOS);
+ [SerializeField]
+ private ApplePlatformSetup m_AppleTvOSPlatformSetup = new ApplePlatformSetup(BuildTarget.tvOS);
+ [SerializeField]
+ private XboxOnePlatformSetup m_XboxOnePlatformSetup = new XboxOnePlatformSetup();
+ [SerializeField]
+ private AndroidPlatformSetup m_AndroidPlatformSetup = new AndroidPlatformSetup();
+ [SerializeField]
+ private SwitchPlatformSetup m_SwitchPlatformSetup = new SwitchPlatformSetup();
+#if UNITY_2019_3_OR_NEWER
+ [SerializeField]
+ private StadiaPlatformSetup m_StadiaPlatformSetup = new StadiaPlatformSetup();
+#endif
+ [SerializeField]
+ private UwpPlatformSetup m_UwpPlatformSetup = new UwpPlatformSetup();
+
+ [SerializeField]
+ private LuminPlatformSetup m_LuminPlatformSetup = new LuminPlatformSetup();
+
+
+ private IDictionary m_SetupTypes;
+
+ [SerializeField]
+ private BuildTarget m_Target;
+
+ public PlatformSpecificSetup()
+ {
+ }
+
+ public PlatformSpecificSetup(BuildTarget target)
+ {
+ m_Target = target;
+ }
+
+ public void Setup()
+ {
+ var dictionary = GetSetup();
+
+ if (!dictionary.ContainsKey(m_Target))
+ {
+ return;
+ }
+
+ dictionary[m_Target].Setup();
+ }
+
+ public void PostBuildAction()
+ {
+ var dictionary = GetSetup();
+
+ if (!dictionary.ContainsKey(m_Target))
+ {
+ return;
+ }
+
+ dictionary[m_Target].PostBuildAction();
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ var dictionary = GetSetup();
+
+ if (!dictionary.ContainsKey(m_Target))
+ {
+ return;
+ }
+
+ dictionary[m_Target].PostSuccessfulBuildAction();
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ var dictionary = GetSetup();
+
+ if (!dictionary.ContainsKey(m_Target))
+ {
+ return;
+ }
+
+ dictionary[m_Target].PostSuccessfulLaunchAction();
+ }
+
+ public void CleanUp()
+ {
+ var dictionary = GetSetup();
+
+ if (!dictionary.ContainsKey(m_Target))
+ {
+ return;
+ }
+
+ dictionary[m_Target].CleanUp();
+ }
+
+ private IDictionary GetSetup()
+ {
+ m_SetupTypes = new Dictionary()
+ {
+ {BuildTarget.iOS, m_AppleiOSPlatformSetup},
+ {BuildTarget.tvOS, m_AppleTvOSPlatformSetup},
+ {BuildTarget.XboxOne, m_XboxOnePlatformSetup},
+ {BuildTarget.Android, m_AndroidPlatformSetup},
+ {BuildTarget.WSAPlayer, m_UwpPlatformSetup},
+ {BuildTarget.Lumin, m_LuminPlatformSetup},
+#if UNITY_2019_3_OR_NEWER
+ {BuildTarget.Stadia, m_StadiaPlatformSetup},
+#endif
+ {BuildTarget.Switch, m_SwitchPlatformSetup}
+ };
+ return m_SetupTypes;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta
new file mode 100644
index 00000000..a250a1a3
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6cccd50ebf7384242bda4d7bcb282ebf
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs
new file mode 100644
index 00000000..c62016be
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs
@@ -0,0 +1,25 @@
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class StadiaPlatformSetup : IPlatformSetup
+ {
+ public void Setup()
+ {
+ }
+
+ public void PostBuildAction()
+ {
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ }
+
+ public void CleanUp()
+ {
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs.meta
new file mode 100644
index 00000000..59e70a4c
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fa19b42bd3dc35e40a618448bd330270
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs
new file mode 100644
index 00000000..7c1ea363
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs
@@ -0,0 +1,41 @@
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class SwitchPlatformSetup : IPlatformSetup
+ {
+ public void Setup()
+ {
+ EditorUserBuildSettings.switchCreateRomFile = true;
+ EditorUserBuildSettings.switchNVNGraphicsDebugger = false;
+#if UNITY_2020_1_OR_NEWER
+ EditorUserBuildSettings.switchNVNDrawValidation_Heavy = true; // catches more graphics errors
+#else
+ EditorUserBuildSettings.switchNVNDrawValidation = true; // catches more graphics errors
+#endif
+ EditorUserBuildSettings.development = true;
+ EditorUserBuildSettings.switchRedirectWritesToHostMount = true;
+
+ // We can use these when more debugging is required:
+ //EditorUserBuildSettings.switchNVNDrawValidation = false; // cannot be used with shader debug
+ //EditorUserBuildSettings.switchNVNGraphicsDebugger = true;
+ //EditorUserBuildSettings.switchNVNShaderDebugging = true;
+ //EditorUserBuildSettings.switchCreateSolutionFile = true; // for shorter iteration time
+ //EditorUserBuildSettings.allowDebugging = true; // managed debugger can be attached
+ }
+
+ public void PostBuildAction()
+ {
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ }
+
+ public void CleanUp()
+ {
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta
new file mode 100644
index 00000000..fb9dd054
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: adf7bea9401c1834380d55601add6cfb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs
new file mode 100644
index 00000000..a229c343
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs
@@ -0,0 +1,52 @@
+using System;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class UwpPlatformSetup : IPlatformSetup
+ {
+ private const string k_SettingsBuildConfiguration = "BuildConfiguration";
+ private bool m_InternetClientServer;
+ private bool m_PrivateNetworkClientServer;
+
+ public void Setup()
+ {
+ m_InternetClientServer = PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.InternetClientServer);
+ m_PrivateNetworkClientServer = PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer);
+ PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.InternetClientServer, true);
+ PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer, true);
+
+ // This setting is initialized only when Window Store App is selected from the Build Settings window, and
+ // is typically an empty strings when running tests via UTR on the command-line.
+ bool wsaSettingNotInitialized = string.IsNullOrEmpty(EditorUserBuildSettings.wsaArchitecture);
+
+ // If WSA build settings aren't fully initialized or running from a build machine, specify a default build configuration.
+ // Otherwise we can use the existing configuration specified by the user in Build Settings.
+ if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("UNITY_THISISABUILDMACHINE")) || wsaSettingNotInitialized)
+ {
+ EditorUserBuildSettings.wsaSubtarget = WSASubtarget.PC;
+ EditorUserBuildSettings.wsaArchitecture = "x64";
+ EditorUserBuildSettings.SetPlatformSettings(BuildPipeline.GetBuildTargetName(BuildTarget.WSAPlayer), k_SettingsBuildConfiguration, WSABuildType.Debug.ToString());
+ EditorUserBuildSettings.wsaUWPBuildType = WSAUWPBuildType.ExecutableOnly;
+ PlayerSettings.SetIl2CppCompilerConfiguration(BuildTargetGroup.WSA, Il2CppCompilerConfiguration.Debug);
+ }
+ }
+
+ public void PostBuildAction()
+ {
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ }
+
+ public void CleanUp()
+ {
+ PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.InternetClientServer, m_InternetClientServer);
+ PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer, m_PrivateNetworkClientServer);
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta
new file mode 100644
index 00000000..751ac7e9
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 667c6ad86a0b7a548aaa5c287f2c2861
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs
new file mode 100644
index 00000000..54c51edb
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs
@@ -0,0 +1,47 @@
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class XboxOnePlatformSetup : IPlatformSetup
+ {
+ private XboxOneDeployMethod oldXboxOneDeployMethod;
+ private XboxOneDeployDrive oldXboxOneDeployDrive;
+ private string oldXboxOneAdditionalDebugPorts;
+
+ public void Setup()
+ {
+ oldXboxOneDeployMethod = EditorUserBuildSettings.xboxOneDeployMethod;
+ oldXboxOneDeployDrive = EditorUserBuildSettings.xboxOneDeployDrive;
+ oldXboxOneAdditionalDebugPorts = EditorUserBuildSettings.xboxOneAdditionalDebugPorts;
+
+ EditorUserBuildSettings.xboxOneDeployMethod = XboxOneDeployMethod.Package;
+ EditorUserBuildSettings.xboxOneDeployDrive = XboxOneDeployDrive.Default;
+
+ // This causes the XboxOne post processing systems to open this port in your package manifest.
+ // In addition it will open the ephemeral range for debug connections as well.
+ // Failure to do this will cause connection problems.
+ EditorUserBuildSettings.xboxOneAdditionalDebugPorts = "34999";
+ }
+
+ public void PostBuildAction()
+ {
+ }
+
+ public void PostSuccessfulBuildAction()
+ {
+ }
+
+ public void PostSuccessfulLaunchAction()
+ {
+ }
+
+ public void CleanUp()
+ {
+ EditorUserBuildSettings.xboxOneDeployMethod = oldXboxOneDeployMethod;
+ EditorUserBuildSettings.xboxOneDeployDrive = oldXboxOneDeployDrive;
+
+ // This causes the XboxOne post processing systems to open this port in your package manifest.
+ // In addition it will open the ephemeral range for debug connections as well.
+ // Failure to do this will cause connection problems.
+ EditorUserBuildSettings.xboxOneAdditionalDebugPorts = oldXboxOneAdditionalDebugPorts;
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta
new file mode 100644
index 00000000..771c8538
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: aed7ab02155e43341a2dbcb7bc17c160
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs
new file mode 100644
index 00000000..ea3e5968
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs
@@ -0,0 +1,251 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using NUnit.Framework.Internal.Filters;
+using UnityEditor;
+using UnityEditor.TestRunner.TestLaunchers;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.TestRunner.Utils;
+using UnityEngine.TestTools.TestRunner;
+using UnityEngine.TestTools.TestRunner.Callbacks;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class TestLaunchFailedException : Exception
+ {
+ public TestLaunchFailedException() {}
+ public TestLaunchFailedException(string message) : base(message) {}
+ }
+
+ [Serializable]
+ internal class PlayerLauncher : RuntimeTestLauncherBase
+ {
+ private readonly PlaymodeTestsControllerSettings m_Settings;
+ private readonly BuildTarget m_TargetPlatform;
+ private ITestRunSettings m_OverloadTestRunSettings;
+ private string m_SceneName;
+ private int m_HeartbeatTimeout;
+
+ public PlayerLauncher(PlaymodeTestsControllerSettings settings, BuildTarget? targetPlatform, ITestRunSettings overloadTestRunSettings, int heartbeatTimeout)
+ {
+ m_Settings = settings;
+ m_TargetPlatform = targetPlatform ?? EditorUserBuildSettings.activeBuildTarget;
+ m_OverloadTestRunSettings = overloadTestRunSettings;
+ m_HeartbeatTimeout = heartbeatTimeout;
+ }
+
+ protected override RuntimePlatform? TestTargetPlatform
+ {
+ get { return BuildTargetConverter.TryConvertToRuntimePlatform(m_TargetPlatform); }
+ }
+
+ public override void Run()
+ {
+ var editorConnectionTestCollector = RemoteTestRunController.instance;
+ editorConnectionTestCollector.hideFlags = HideFlags.HideAndDontSave;
+ editorConnectionTestCollector.Init(m_TargetPlatform, m_HeartbeatTimeout);
+
+ var remotePlayerLogController = RemotePlayerLogController.instance;
+ remotePlayerLogController.hideFlags = HideFlags.HideAndDontSave;
+
+ using (var settings = new PlayerLauncherContextSettings(m_OverloadTestRunSettings))
+ {
+ m_SceneName = CreateSceneName();
+ var scene = PrepareScene(m_SceneName);
+ string scenePath = scene.path;
+
+ var filter = m_Settings.BuildNUnitFilter();
+ var runner = LoadTests(filter);
+ var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, filter);
+ if (exceptionThrown)
+ {
+ ReopenOriginalScene(m_Settings.originalScene);
+ AssetDatabase.DeleteAsset(m_SceneName);
+ CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details.");
+ return;
+ }
+
+ var playerBuildOptions = GetBuildOptions(scenePath);
+
+ var success = BuildAndRunPlayer(playerBuildOptions);
+
+ editorConnectionTestCollector.PostBuildAction();
+ ExecutePostBuildCleanupMethods(runner.LoadedTest, filter);
+
+ ReopenOriginalScene(m_Settings.originalScene);
+ AssetDatabase.DeleteAsset(m_SceneName);
+
+ if (!success)
+ {
+ editorConnectionTestCollector.CleanUp();
+ ScriptableObject.DestroyImmediate(editorConnectionTestCollector);
+ Debug.LogError("Player build failed");
+ throw new TestLaunchFailedException("Player build failed");
+ }
+
+ if ((playerBuildOptions.BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0)
+ {
+ editorConnectionTestCollector.PostSuccessfulBuildAction();
+ editorConnectionTestCollector.PostSuccessfulLaunchAction();
+ }
+
+ var runSettings = m_OverloadTestRunSettings as PlayerLauncherTestRunSettings;
+ if (success && runSettings != null && runSettings.buildOnly)
+ {
+ EditorUtility.RevealInFinder(playerBuildOptions.BuildPlayerOptions.locationPathName);
+ }
+ }
+ }
+
+ public Scene PrepareScene(string sceneName)
+ {
+ var scene = CreateBootstrapScene(sceneName, runner =>
+ {
+ runner.AddEventHandlerMonoBehaviour();
+ runner.settings = m_Settings;
+ var commandLineArgs = Environment.GetCommandLineArgs();
+ if (!commandLineArgs.Contains("-doNotReportTestResultsBackToEditor"))
+ {
+ runner.AddEventHandlerMonoBehaviour();
+ }
+ runner.AddEventHandlerMonoBehaviour();
+ runner.AddEventHandlerScriptableObject();
+ });
+ return scene;
+ }
+
+ private static bool BuildAndRunPlayer(PlayerLauncherBuildOptions buildOptions)
+ {
+ Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Building player with following options:\n{0}", buildOptions);
+
+
+ // Android has to be in listen mode to establish player connection
+ if (buildOptions.BuildPlayerOptions.target == BuildTarget.Android)
+ {
+ buildOptions.BuildPlayerOptions.options &= ~BuildOptions.ConnectToHost;
+ }
+
+ // For now, so does Lumin
+ if (buildOptions.BuildPlayerOptions.target == BuildTarget.Lumin)
+ {
+ buildOptions.BuildPlayerOptions.options &= ~BuildOptions.ConnectToHost;
+ }
+
+ var result = BuildPipeline.BuildPlayer(buildOptions.BuildPlayerOptions);
+ if (result.summary.result != Build.Reporting.BuildResult.Succeeded)
+ Debug.LogError(result.SummarizeErrors());
+
+ return result.summary.result == Build.Reporting.BuildResult.Succeeded;
+ }
+
+ internal PlayerLauncherBuildOptions GetBuildOptions(string scenePath)
+ {
+ var buildOnly = false;
+ var runSettings = m_OverloadTestRunSettings as PlayerLauncherTestRunSettings;
+ if (runSettings != null)
+ {
+ buildOnly = runSettings.buildOnly;
+ }
+
+ var buildOptions = new BuildPlayerOptions();
+
+ var scenes = new List() { scenePath };
+ scenes.AddRange(EditorBuildSettings.scenes.Select(x => x.path));
+ buildOptions.scenes = scenes.ToArray();
+
+ buildOptions.options |= BuildOptions.Development | BuildOptions.ConnectToHost | BuildOptions.IncludeTestAssemblies | BuildOptions.StrictMode;
+ buildOptions.target = m_TargetPlatform;
+
+ if (EditorUserBuildSettings.waitForPlayerConnection)
+ buildOptions.options |= BuildOptions.WaitForPlayerConnection;
+
+ if (EditorUserBuildSettings.allowDebugging)
+ buildOptions.options |= BuildOptions.AllowDebugging;
+
+ if (EditorUserBuildSettings.installInBuildFolder)
+ buildOptions.options |= BuildOptions.InstallInBuildFolder;
+ else if (!buildOnly)
+ buildOptions.options |= BuildOptions.AutoRunPlayer;
+
+ var buildTargetGroup = EditorUserBuildSettings.activeBuildTargetGroup;
+
+ //Check if Lz4 is supported for the current buildtargetgroup and enable it if need be
+ if (PostprocessBuildPlayer.SupportsLz4Compression(buildTargetGroup, m_TargetPlatform))
+ {
+ if (EditorUserBuildSettings.GetCompressionType(buildTargetGroup) == Compression.Lz4)
+ buildOptions.options |= BuildOptions.CompressWithLz4;
+ else if (EditorUserBuildSettings.GetCompressionType(buildTargetGroup) == Compression.Lz4HC)
+ buildOptions.options |= BuildOptions.CompressWithLz4HC;
+ }
+
+ string buildLocation;
+ if (buildOnly)
+ {
+ buildLocation = buildOptions.locationPathName = runSettings.buildOnlyLocationPath;
+ }
+ else
+ {
+ var reduceBuildLocationPathLength = false;
+
+ //Some platforms hit MAX_PATH limits during the build process, in these cases minimize the path length
+ if ((m_TargetPlatform == BuildTarget.WSAPlayer) || (m_TargetPlatform == BuildTarget.XboxOne))
+ {
+ reduceBuildLocationPathLength = true;
+ }
+
+ var uniqueTempPathInProject = FileUtil.GetUniqueTempPathInProject();
+ var playerDirectoryName = reduceBuildLocationPathLength ? "PwT" : "PlayerWithTests";
+
+ if (reduceBuildLocationPathLength)
+ {
+ uniqueTempPathInProject = Path.GetTempFileName();
+ File.Delete(uniqueTempPathInProject);
+ Directory.CreateDirectory(uniqueTempPathInProject);
+ }
+
+ var tempPath = Path.GetFullPath(uniqueTempPathInProject);
+ buildLocation = Path.Combine(tempPath, playerDirectoryName);
+
+ // iOS builds create a folder with Xcode project instead of an executable, therefore no executable name is added
+ if (m_TargetPlatform == BuildTarget.iOS)
+ {
+ buildOptions.locationPathName = buildLocation;
+ }
+ else
+ {
+ string extensionForBuildTarget =
+ PostprocessBuildPlayer.GetExtensionForBuildTarget(buildTargetGroup, buildOptions.target,
+ buildOptions.options);
+ var playerExecutableName = "PlayerWithTests";
+ playerExecutableName += string.Format(".{0}", extensionForBuildTarget);
+ buildOptions.locationPathName = Path.Combine(buildLocation, playerExecutableName);
+ }
+ }
+
+ return new PlayerLauncherBuildOptions
+ {
+ BuildPlayerOptions = ModifyBuildOptions(buildOptions),
+ PlayerDirectory = buildLocation,
+ };
+ }
+
+ private BuildPlayerOptions ModifyBuildOptions(BuildPlayerOptions buildOptions)
+ {
+ var allAssemblies = AppDomain.CurrentDomain.GetAssemblies()
+ .Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEditor.TestRunner")).ToArray();
+ var attributes = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(TestPlayerBuildModifierAttribute), true).OfType()).ToArray();
+ var modifiers = attributes.Select(attribute => attribute.ConstructModifier()).ToArray();
+
+ foreach (var modifier in modifiers)
+ {
+ buildOptions = modifier.ModifyOptions(buildOptions);
+ }
+
+ return buildOptions;
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta
new file mode 100644
index 00000000..60bb1c7f
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d973fc1524e4d724081553934c55958c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs
new file mode 100644
index 00000000..b4985147
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs
@@ -0,0 +1,23 @@
+using System.Text;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class PlayerLauncherBuildOptions
+ {
+ public BuildPlayerOptions BuildPlayerOptions;
+ public string PlayerDirectory;
+
+ public override string ToString()
+ {
+ var str = new StringBuilder();
+ str.AppendLine("locationPathName = " + BuildPlayerOptions.locationPathName);
+ str.AppendLine("target = " + BuildPlayerOptions.target);
+ str.AppendLine("scenes = " + string.Join(", ", BuildPlayerOptions.scenes));
+ str.AppendLine("assetBundleManifestPath = " + BuildPlayerOptions.assetBundleManifestPath);
+ str.AppendLine("options.Development = " + ((BuildPlayerOptions.options & BuildOptions.Development) != 0));
+ str.AppendLine("options.AutoRunPlayer = " + ((BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0));
+ str.AppendLine("options.ForceEnableAssertions = " + ((BuildPlayerOptions.options & BuildOptions.ForceEnableAssertions) != 0));
+ return str.ToString();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta
new file mode 100644
index 00000000..73c17796
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2a0bd678385f98e4d8eabdfc07d62b4f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs
new file mode 100644
index 00000000..151d8a28
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs
@@ -0,0 +1,113 @@
+using System;
+using System.IO;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class PlayerLauncherContextSettings : IDisposable
+ {
+ private ITestRunSettings m_OverloadSettings;
+
+ private EditorBuildSettingsScene[] m_EditorBuildSettings;
+#pragma warning disable 618
+ private ResolutionDialogSetting m_DisplayResolutionDialog;
+#pragma warning restore 618
+ private bool m_RunInBackground;
+ private FullScreenMode m_FullScreenMode;
+ private bool m_ResizableWindow;
+ private bool m_ShowUnitySplashScreen;
+ private string m_OldproductName;
+ private string m_OldAotOptions;
+#pragma warning disable 618
+ private Lightmapping.GIWorkflowMode m_OldLightmapping;
+#pragma warning restore 618
+ private bool m_explicitNullChecks;
+
+ private bool m_Disposed;
+
+ public PlayerLauncherContextSettings(ITestRunSettings overloadSettings)
+ {
+ m_OverloadSettings = overloadSettings;
+ SetupProjectParameters();
+
+ if (overloadSettings != null)
+ {
+ overloadSettings.Apply();
+ }
+ }
+
+ public void Dispose()
+ {
+ if (!m_Disposed)
+ {
+ CleanupProjectParameters();
+ if (m_OverloadSettings != null)
+ {
+ m_OverloadSettings.Dispose();
+ }
+
+ m_Disposed = true;
+ }
+ }
+
+ private void SetupProjectParameters()
+ {
+ EditorApplication.LockReloadAssemblies();
+
+ m_EditorBuildSettings = EditorBuildSettings.scenes;
+
+#pragma warning disable 618
+ m_DisplayResolutionDialog = PlayerSettings.displayResolutionDialog;
+ PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled;
+#pragma warning restore 618
+
+ m_RunInBackground = PlayerSettings.runInBackground;
+ PlayerSettings.runInBackground = true;
+
+ m_FullScreenMode = PlayerSettings.fullScreenMode;
+ PlayerSettings.fullScreenMode = FullScreenMode.Windowed;
+
+ m_OldAotOptions = PlayerSettings.aotOptions;
+ PlayerSettings.aotOptions = "nimt-trampolines=1024";
+
+ m_ResizableWindow = PlayerSettings.resizableWindow;
+ PlayerSettings.resizableWindow = true;
+
+ m_ShowUnitySplashScreen = PlayerSettings.SplashScreen.show;
+ PlayerSettings.SplashScreen.show = false;
+
+ m_OldproductName = PlayerSettings.productName;
+ PlayerSettings.productName = string.Join("_", Application.productName.Split(Path.GetInvalidFileNameChars()));
+
+#pragma warning disable 618
+ m_OldLightmapping = Lightmapping.giWorkflowMode;
+ Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.OnDemand;
+#pragma warning restore 618
+
+ m_explicitNullChecks = EditorUserBuildSettings.explicitNullChecks;
+ EditorUserBuildSettings.explicitNullChecks = true;
+ }
+
+ private void CleanupProjectParameters()
+ {
+ EditorBuildSettings.scenes = m_EditorBuildSettings;
+
+ PlayerSettings.fullScreenMode = m_FullScreenMode;
+ PlayerSettings.runInBackground = m_RunInBackground;
+#pragma warning disable 618
+ PlayerSettings.displayResolutionDialog = m_DisplayResolutionDialog;
+#pragma warning restore 618
+ PlayerSettings.resizableWindow = m_ResizableWindow;
+ PlayerSettings.SplashScreen.show = m_ShowUnitySplashScreen;
+ PlayerSettings.productName = m_OldproductName;
+ PlayerSettings.aotOptions = m_OldAotOptions;
+#pragma warning disable 618
+ Lightmapping.giWorkflowMode = m_OldLightmapping;
+#pragma warning restore 618
+ EditorUserBuildSettings.explicitNullChecks = m_explicitNullChecks;
+
+ EditorApplication.UnlockReloadAssemblies();
+ }
+ }
+}
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta
new file mode 100644
index 00000000..29cb8915
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6965880f76f40194593cb53a88f74005
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs
new file mode 100644
index 00000000..21832827
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs
@@ -0,0 +1,19 @@
+using UnityEditor.TestTools.TestRunner.Api;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ class PlayerLauncherTestRunSettings : ITestRunSettings
+ {
+ public bool buildOnly { set; get; }
+
+ public string buildOnlyLocationPath { set; get; }
+
+ public void Dispose()
+ {
+ }
+
+ void ITestRunSettings.Apply()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs.meta b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs.meta
new file mode 100644
index 00000000..ea71a0cf
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c1cba6f3ed484514097080a3bb835958
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs
new file mode 100644
index 00000000..223db274
--- /dev/null
+++ b/clock/Library/PackageCache/com.unity.test-framework@1.1.22/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs
@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal.Filters;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.TestRunner.Utils;
+using UnityEngine.TestTools.TestRunner;
+using UnityEngine.TestTools.TestRunner.Callbacks;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ internal class PlaymodeLauncher : RuntimeTestLauncherBase
+ {
+ public static bool IsRunning;
+ private Scene m_Scene;
+ private bool m_IsTestSetupPerformed;
+ private readonly PlaymodeTestsControllerSettings m_Settings;
+ private ITestFilter testFilter;
+
+ [SerializeField]
+ private List