From b36f5acdcfeb45180fc907a70eeddce902697865 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Wed, 8 Nov 2023 14:27:35 +0300 Subject: [PATCH 01/27] xml docs --- src/ImageProcessing/Agents.fs | 38 +++++++++++++++++- src/ImageProcessing/Arguments.fs | 14 ++++++- src/ImageProcessing/CpuProcessing.fs | 26 ++++++++++++ src/ImageProcessing/GpuKernels.fs | 29 +++++++++++++- src/ImageProcessing/GpuProcessing.fs | 44 ++++++++++++++++++++- src/ImageProcessing/ImageArrayProcessing.fs | 15 ++++++- src/ImageProcessing/Kernels.fs | 5 ++- src/ImageProcessing/MyImage.fs | 9 +++++ src/ImageProcessing/Types.fs | 23 ++++++++++- 9 files changed, 196 insertions(+), 7 deletions(-) diff --git a/src/ImageProcessing/Agents.fs b/src/ImageProcessing/Agents.fs index 6979eb5a..c2a6a560 100644 --- a/src/ImageProcessing/Agents.fs +++ b/src/ImageProcessing/Agents.fs @@ -1,14 +1,28 @@ -module Agents +/// +/// Module with implementation of agents for image processing +/// +module Agents open Types open MyImage +/// +/// List of all files in directory +/// let listAllFiles dir = let files = System.IO.Directory.GetFiles dir List.ofArray files +/// +/// Creation of path to save the image +/// let outFile (imgName: string) (outDir: string) = System.IO.Path.Combine(outDir, imgName) +/// +/// Agent for saving images +/// +/// Path to save +/// Logging Agent let imgSaver outDir (logger: MailboxProcessor<_>) = MailboxProcessor.Start(fun inbox -> @@ -26,6 +40,12 @@ let imgSaver outDir (logger: MailboxProcessor<_>) = | _ -> failwith "imgSaver received the wrong message" }) +/// +/// Agent for image processing +/// +/// Filter for application +/// Saving Agent +/// Logging Agent let imgProcessor filter (imgSaver: MailboxProcessor<_>) (logger: MailboxProcessor<_>) = MailboxProcessor.Start(fun inbox -> @@ -46,6 +66,9 @@ let imgProcessor filter (imgSaver: MailboxProcessor<_>) (logger: MailboxProcesso | _ -> failwith "imgProcessor received the wrong message" }) +/// +/// Agent for logging +/// let msgLogger () = MailboxProcessor.Start(fun inbox -> async { @@ -60,6 +83,12 @@ let msgLogger () = | _ -> failwith "msgLogger received the wrong message" }) +/// +/// Agent with the ability to process and save the image +/// +/// Path to save +/// Image transformation +/// Logging Agent let superAgent outputDir conversion (logger: MailboxProcessor<_>) = MailboxProcessor.Start(fun inbox -> @@ -80,6 +109,13 @@ let superAgent outputDir conversion (logger: MailboxProcessor<_>) = | _ -> failwith "superAgent received the wrong message" }) +/// +/// Image processing using superAgents +/// +/// Path to image or images +/// Path to save +/// Image transformation +/// Count of superAgents to processing let superImageProcessing inputDir outputDir conversion countOfAgents = let filesToProcess = listAllFiles inputDir let logger = msgLogger () diff --git a/src/ImageProcessing/Arguments.fs b/src/ImageProcessing/Arguments.fs index 711e5f3b..0105b373 100644 --- a/src/ImageProcessing/Arguments.fs +++ b/src/ImageProcessing/Arguments.fs @@ -1,4 +1,7 @@ -module Arguments +/// +/// Module with implementation of work via console commands +/// +module Arguments open Argu open Kernels @@ -10,6 +13,9 @@ let second (_, x, _, _) = x let third (_, _, x, _) = x let fourth (_, _, _, x) = x +/// +/// Parsing of CPU modification +/// let modificationParser modification = match modification with | Gauss5x5 -> CpuProcessing.applyFilter gaussianBlurKernel @@ -23,6 +29,9 @@ let modificationParser modification = | MirrorHorizontal -> CpuProcessing.mirror Horizontal | FishEye -> CpuProcessing.fishEye +/// +/// Parsing of GPU modification +/// let modificationGpuParser modification cortege = match modification with | Gauss5x5 -> GpuProcessing.applyFilter gaussianBlurKernel (first cortege) @@ -36,6 +45,9 @@ let modificationGpuParser modification cortege = | MirrorHorizontal -> GpuProcessing.mirror Horizontal (third cortege) | FishEye -> GpuProcessing.fishEye (fourth cortege) +/// +/// Parsing of device +/// let deviceParser device = match device with | AnyGpu -> Platform.Any diff --git a/src/ImageProcessing/CpuProcessing.fs b/src/ImageProcessing/CpuProcessing.fs index 645847ae..e0e23ae4 100644 --- a/src/ImageProcessing/CpuProcessing.fs +++ b/src/ImageProcessing/CpuProcessing.fs @@ -1,8 +1,17 @@ +/// +/// Module with functions for image processing on the CPU +/// module CpuProcessing open MyImage open Types +/// +/// Filter application +/// +/// A two-dimensional array applied to an image as a filter +/// Image with type MyImage +/// Image with type MyImage let applyFilter (filter: float32[][]) (img: MyImage) = let filterD = (Array.length filter) / 2 let filter = Array.concat filter @@ -23,6 +32,12 @@ let applyFilter (filter: float32[][]) (img: MyImage) = MyImage(Array.mapi (fun p _ -> byte (processPixel p)) img.Data, img.Width, img.Height, img.Name) +/// +/// Rotate of image +/// +/// The side to which the image will be rotated +/// Image with type MyImage +/// Image with type MyImage let rotate (side: Side) (image: MyImage) = let res = Array.zeroCreate image.Data.Length @@ -34,6 +49,12 @@ let rotate (side: Side) (image: MyImage) = MyImage(res, image.Height, image.Width, image.Name) +/// +/// Image Reflection +/// +/// The side to which the image will be reflected +/// Image with type MyImage +/// Image with type MyImage let mirror (side: MirrorDirection) (image: MyImage) = let res = Array.zeroCreate image.Data.Length @@ -45,6 +66,11 @@ let mirror (side: MirrorDirection) (image: MyImage) = MyImage(res, image.Width, image.Height, image.Name) +/// +/// Applying "FishEye" to an image +/// +/// Image with type MyImage +/// Image with type MyImage let fishEye (image: MyImage) = let distortion = 0.5 diff --git a/src/ImageProcessing/GpuKernels.fs b/src/ImageProcessing/GpuKernels.fs index a1e7d913..3c759dec 100644 --- a/src/ImageProcessing/GpuKernels.fs +++ b/src/ImageProcessing/GpuKernels.fs @@ -1,8 +1,14 @@ -module GpuKernels +/// +/// Module with kernels for image processing on the GPU +/// +module GpuKernels open Types open Brahma.FSharp +/// +/// Compilation of kernel to apply filter to the image +/// let applyFilterKernel (clContext: ClContext) = let kernel = @@ -30,6 +36,9 @@ let applyFilterKernel (clContext: ClContext) = clContext.Compile kernel +/// +/// Asynchronous application of the filter kernel to the image +/// let applyFilterProcessor (kernel: ClProgram -> int -> int -> ClArray -> int -> ClArray -> unit>) localWorkSize @@ -42,6 +51,9 @@ let applyFilterProcessor commandQueue.Post(Msg.CreateRunMsg<_, _> kernel) result +/// +/// Compilation of kernel to rotate the image +/// let rotateKernel (clContext: ClContext) = let kernel = @@ -59,6 +71,9 @@ let rotateKernel (clContext: ClContext) = clContext.Compile kernel +/// +/// Asynchronous application of the rotation kernel to the image +/// let rotateKernelProcessor (kernel: ClProgram -> int -> int -> int -> ClArray -> unit>) localWorkSize @@ -73,6 +88,9 @@ let rotateKernelProcessor commandQueue.Post(Msg.CreateRunMsg<_, _> kernel) result +/// +/// Compilation of kernel to reflect the image +/// let mirrorKernel (clContext: ClContext) = let kernel = @@ -90,6 +108,9 @@ let mirrorKernel (clContext: ClContext) = clContext.Compile kernel +/// +/// Asynchronous application of the reflection kernel to the image +/// let mirrorKernelProcessor (kernel: ClProgram -> int -> int -> int -> ClArray -> unit>) localWorkSize @@ -104,6 +125,9 @@ let mirrorKernelProcessor commandQueue.Post(Msg.CreateRunMsg<_, _> kernel) result +/// +/// Compilation of kernel to apply FishEye to the image +/// let fishEyeKernel (clContext: ClContext) = let kernel = @@ -135,6 +159,9 @@ let fishEyeKernel (clContext: ClContext) = clContext.Compile kernel +/// +/// Asynchronous application of the fisheye kernel to the image +/// let fishEyeKernelProcessor (kernel: ClProgram -> int -> int -> ClArray -> unit>) localWorkSize diff --git a/src/ImageProcessing/GpuProcessing.fs b/src/ImageProcessing/GpuProcessing.fs index 56212ff7..64c41503 100644 --- a/src/ImageProcessing/GpuProcessing.fs +++ b/src/ImageProcessing/GpuProcessing.fs @@ -1,9 +1,22 @@ -module GpuProcessing +/// +/// Module with functions for image processing on the GPU +/// +module GpuProcessing open Brahma.FSharp open MyImage open GpuKernels +/// +/// Filter application +/// +/// A two-dimensional array applied to an image as a filter +/// Compiled kernel for filter application +/// Abstraction over OpenCL context +/// Local workgroup size +/// Command queue capable of handling messages of type Msg +/// Image with type MyImage +/// Image with type MyImage let applyFilter (filter: float32[][]) kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor) = let kernel = applyFilterProcessor kernel localWorkSize @@ -36,6 +49,16 @@ let applyFilter (filter: float32[][]) kernel (clContext: ClContext) localWorkSiz queue.Post(Msg.CreateFreeMsg output) MyImage(result, img.Width, img.Height, img.Name) +/// +/// Rotate of image +/// +/// The side to which the image will be rotated +/// Compiled kernel for rotation application +/// Abstraction over OpenCL context +/// Local workgroup size +/// Command queue capable of handling messages of type Msg +/// Image with type MyImage +/// Image with type MyImage let rotate side kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor) = let kernel = rotateKernelProcessor kernel localWorkSize @@ -61,6 +84,16 @@ let rotate side kernel (clContext: ClContext) localWorkSize (queue: MailboxProce queue.Post(Msg.CreateFreeMsg output) MyImage(result, img.Height, img.Width, img.Name) +/// +/// Reflection of image +/// +/// The side to which the image will be reflected +/// Compiled kernel for reflection application +/// Abstraction over OpenCL context +/// Local workgroup size +/// Command queue capable of handling messages of type Msg +/// Image with type MyImage +/// Image with type MyImage let mirror side kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor) = let kernel = mirrorKernelProcessor kernel localWorkSize @@ -86,6 +119,15 @@ let mirror side kernel (clContext: ClContext) localWorkSize (queue: MailboxProce queue.Post(Msg.CreateFreeMsg output) MyImage(result, img.Width, img.Height, img.Name) +/// +/// Applying fisheye filter to the image +/// +/// Compiled kernel for fisheye filter application +/// Abstraction over OpenCL context +/// Local workgroup size +/// Command queue capable of handling messages of type Msg +/// Image with type MyImage +/// Image with type MyImage let fishEye kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor) = let kernel = fishEyeKernelProcessor kernel localWorkSize diff --git a/src/ImageProcessing/ImageArrayProcessing.fs b/src/ImageProcessing/ImageArrayProcessing.fs index 8e975b66..99b37432 100644 --- a/src/ImageProcessing/ImageArrayProcessing.fs +++ b/src/ImageProcessing/ImageArrayProcessing.fs @@ -1,4 +1,7 @@ -module ImageArrayProcessing +/// +/// Module with implementation of processing array of images +/// +module ImageArrayProcessing open MyImage open Agents @@ -16,6 +19,9 @@ let extensions = ".tga" ".tiff" |] +/// +/// List of all files in directory with correct extensions +/// let listAllFiles dir = let files = System.IO.Directory.GetFiles dir @@ -24,6 +30,13 @@ let listAllFiles dir = List.ofArray filtered +/// +/// Processing array of images +/// +/// Path to the folder with images +/// Path to save +/// Image transformation +/// Processing with or without agent assistance let arrayOfImagesProcessing inputDir outputDir conversion agentMod = let list = listAllFiles inputDir diff --git a/src/ImageProcessing/Kernels.fs b/src/ImageProcessing/Kernels.fs index dce9e6ac..0942e87b 100644 --- a/src/ImageProcessing/Kernels.fs +++ b/src/ImageProcessing/Kernels.fs @@ -1,4 +1,7 @@ -module Kernels +/// +/// Module with kernels for image processing +/// +module Kernels let gaussianBlurKernel = [| [| 1; 4; 6; 4; 1 |] diff --git a/src/ImageProcessing/MyImage.fs b/src/ImageProcessing/MyImage.fs index bd438dda..f74a2d66 100644 --- a/src/ImageProcessing/MyImage.fs +++ b/src/ImageProcessing/MyImage.fs @@ -4,6 +4,9 @@ open System open SixLabors.ImageSharp open SixLabors.ImageSharp.PixelFormats +/// +/// Type to represent images +/// [] type MyImage = val Data: array @@ -17,6 +20,9 @@ type MyImage = Height = height Name = name } +/// +/// Load image as MyImage type +/// let loadAsImage (file: string) = let img = Image.Load file @@ -25,6 +31,9 @@ let loadAsImage (file: string) = img.CopyPixelDataTo(Span buf) MyImage(buf, img.Width, img.Height, System.IO.Path.GetFileName file) +/// +/// Save MyImage in a specific directory +/// let saveImage (image: MyImage) file = let img = Image.LoadPixelData(image.Data, image.Width, image.Height) img.Save file diff --git a/src/ImageProcessing/Types.fs b/src/ImageProcessing/Types.fs index 74162ee9..531cf65f 100644 --- a/src/ImageProcessing/Types.fs +++ b/src/ImageProcessing/Types.fs @@ -1,25 +1,43 @@ -module Types +/// +/// Module with necessary algebraic types +/// +module Types open MyImage +/// +/// Type for determining the rotation side of the image +/// type Side = | Right | Left +/// +/// Type for determining the direction of image reflection +/// type MirrorDirection = | Vertical | Horizontal +/// +/// Type to define a message to be forwarded between agents +/// type Msg = | Img of MyImage | Path of string | EOS of AsyncReplyChannel | Message of string +/// +/// Type for determining the status of an agent +/// type AgentStatus = | On | Off +/// +/// Type for determining the applied image transformation +/// type Modifications = | Gauss5x5 | Gauss7x7 @@ -32,6 +50,9 @@ type Modifications = | MirrorHorizontal | FishEye +/// +/// Type for defining the executor of transformations +/// type Devices = | AnyGpu | Nvidia From 318bb62d9469a561acc223f1fc419b7e758c8d5f Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Mon, 27 Nov 2023 22:48:00 +0300 Subject: [PATCH 02/27] Add build steps about docs --- build/FsDocs.fs | 242 +++++++++++++++++++++++++++++++++++++++++++++ build/build.fs | 114 ++++++++++++++++++++- build/build.fsproj | 1 + 3 files changed, 355 insertions(+), 2 deletions(-) create mode 100644 build/FsDocs.fs diff --git a/build/FsDocs.fs b/build/FsDocs.fs new file mode 100644 index 00000000..7386e5df --- /dev/null +++ b/build/FsDocs.fs @@ -0,0 +1,242 @@ +namespace Fake.DotNet + +open Fake.Core +open Fake.IO +open Fake.IO.FileSystemOperators + +/// +/// Contains tasks to interact with fsdocs tool to +/// process F# script files, markdown and for generating API documentation. +/// +[] +module Fsdocs = + + /// + /// Fsdocs build command parameters and options + /// + type BuildCommandParams = { + /// Input directory of content (default: docs) + Input: string option + + /// Project files to build API docs for outputs, defaults to all packable projects + Projects: seq option + + /// Output Directory (default output for build and tmp/watch for watch) + Output: string option + + /// Disable generation of API docs + NoApiDocs: bool option + + /// Evaluate F# fragments in scripts + Eval: bool option + + /// Save images referenced in docs + SaveImages: bool option + + /// Add line numbers + LineNumbers: bool option + + /// Additional substitution parameters for templates + Parameters: seq option + + /// Disable project cracking. + IgnoreProjects: bool option + + /// In API doc generation qualify the output by the collection name, e.g. 'reference/FSharp.Core/...' instead of 'reference/...' . + Qualify: bool option + + /// The tool will also generate documentation for non-public members + NoPublic: bool option + + /// Do not copy default content styles, javascript or use default templates + NoDefaultContent: bool option + + /// Clean the output directory + Clean: bool option + + /// Display version information + Version: bool option + + /// Provide properties to dotnet msbuild, e.g. --properties Configuration=Release Version=3.4 + Properties: string option + + /// Additional arguments passed down as otherflags to the F# compiler when the API is being generated. + /// Note that these arguments are trimmed, this is to overcome a limitation in the command line argument + /// processing. A typical use-case would be to pass an addition assembly reference. + /// Example --fscoptions " -r:MyAssembly.dll" + FscOptions: string option + + /// Fail if docs are missing or can't be generated + Strict: bool option + + /// Source folder at time of component build (<FsDocsSourceFolder>) + SourceFolder: string option + + /// Source repository for github links (<FsDocsSourceRepository>) + SourceRepository: string option + + /// Assume comments in F# code are markdown (<UsesMarkdownComments>) + MdComments: bool option + } with + + /// Parameter default values. + static member Default = { + Input = None + Projects = None + Output = None + NoApiDocs = None + Eval = None + SaveImages = None + LineNumbers = None + Parameters = None + IgnoreProjects = None + Qualify = None + NoPublic = None + NoDefaultContent = None + Clean = None + Version = None + Properties = None + FscOptions = None + Strict = None + SourceFolder = None + SourceRepository = None + MdComments = None + } + + /// + /// Fsdocs watch command parameters and options + /// + type WatchCommandParams = { + /// Do not serve content when watching. + NoServer: bool option + + /// Do not launch a browser window. + NoLaunch: bool option + + /// URL extension to launch http://localhost:/%s. + Open: string option + + /// Port to serve content for http://localhost serving. + Port: int option + + /// Build Commands + BuildCommandParams: BuildCommandParams option + } with + + /// Parameter default values. + static member Default = { + NoServer = None + NoLaunch = None + Open = None + Port = None + BuildCommandParams = None + } + + let internal buildBuildCommandParams (buildParams: BuildCommandParams) = + let buildSubstitutionParameters (subParameters: seq) = + let subParameters = + subParameters + |> Seq.map (fun (key, value) -> (sprintf "%s %s" key value)) + |> String.concat " " + + sprintf "--parameters %s" subParameters + + System.Text.StringBuilder() + |> StringBuilder.appendIfSome buildParams.Input (sprintf "--input %s") + |> StringBuilder.appendIfSome + buildParams.Projects + (fun projects -> + sprintf + "--projects %s" + (projects + |> String.concat " ") + ) + |> StringBuilder.appendIfSome buildParams.Output (sprintf "--output %s") + |> StringBuilder.appendIfSome buildParams.NoApiDocs (fun _ -> "--noapidocs") + |> StringBuilder.appendIfSome buildParams.Eval (fun _ -> "--eval") + |> StringBuilder.appendIfSome buildParams.SaveImages (fun _ -> "--saveimages") + |> StringBuilder.appendIfSome buildParams.LineNumbers (fun _ -> "--linenumbers") + |> StringBuilder.appendIfSome + buildParams.Parameters + (fun parameters -> buildSubstitutionParameters parameters) + |> StringBuilder.appendIfSome buildParams.IgnoreProjects (fun _ -> "--ignoreprojects") + |> StringBuilder.appendIfSome buildParams.Qualify (fun _ -> "--qualify") + |> StringBuilder.appendIfSome buildParams.NoPublic (fun _ -> "--nonpublic") + |> StringBuilder.appendIfSome buildParams.NoDefaultContent (fun _ -> "--nodefaultcontent") + |> StringBuilder.appendIfSome buildParams.Clean (fun _ -> "--clean") + |> StringBuilder.appendIfSome buildParams.Version (fun _ -> "--version") + |> StringBuilder.appendIfSome buildParams.Properties (sprintf "--properties %s") + |> StringBuilder.appendIfSome buildParams.FscOptions (sprintf "--fscoptions %s") + |> StringBuilder.appendIfSome buildParams.Strict (fun _ -> "--strict") + |> StringBuilder.appendIfSome buildParams.SourceFolder (sprintf "--sourcefolder %s") + |> StringBuilder.appendIfSome buildParams.SourceRepository (sprintf "--sourcerepo %s") + |> StringBuilder.appendIfSome buildParams.MdComments (fun _ -> "--mdcomments") + |> StringBuilder.toText + |> String.trim + + let internal buildWatchCommandParams (watchParams: WatchCommandParams) = + System.Text.StringBuilder() + |> StringBuilder.appendIfSome watchParams.NoServer (fun _ -> "--noserver") + |> StringBuilder.appendIfSome watchParams.NoLaunch (fun _ -> "--nolaunch") + |> StringBuilder.appendIfSome watchParams.Open (sprintf "--open %s") + |> StringBuilder.appendIfSome watchParams.Port (sprintf "--port %i") + |> StringBuilder.appendIfSome watchParams.BuildCommandParams buildBuildCommandParams + |> StringBuilder.toText + |> String.trim + + + let cleanCache (workingDirectory) = + Shell.cleanDirs [ + workingDirectory + ".fsdocs" + ] + + /// + /// Build documentation using fsdocs build command + /// + /// + /// Function used to overwrite the dotnetOptions. + /// Function used to overwrite the build command default parameters. + /// + /// + /// + /// Fsdocs.build (fun p -> { p with Clean = Some(true); Strict = Some(true) }) + /// + /// + let build dotnetOptions setBuildParams = + let buildParams = setBuildParams BuildCommandParams.Default + let formattedParameters = buildBuildCommandParams buildParams + + // let dotnetOptions = (fun (buildOptions: DotNet.Options) -> buildOptions) + let result = DotNet.exec dotnetOptions "fsdocs build" formattedParameters + + if + 0 + <> result.ExitCode + then + failwithf "fsdocs build failed with exit code '%d'" result.ExitCode + + /// + /// Watch documentation using fsdocs watch command + /// + /// + /// Function used to overwrite the dotnetOptions. + /// Function used to overwrite the watch command default parameters. + /// + /// + /// + /// Fsdocs.watch (fun p -> { p with Port = Some(3005) }) + /// + /// + let watch dotnetOptions setWatchParams = + let watchParams = setWatchParams WatchCommandParams.Default + let formattedParameters = buildWatchCommandParams watchParams + + // let dotnetOptions = (fun (buildOptions: DotNet.Options) -> buildOptions) + let result = DotNet.exec dotnetOptions "fsdocs watch" formattedParameters + + if + 0 + <> result.ExitCode + then + failwithf "fsdocs watch failed with exit code '%d'" result.ExitCode diff --git a/build/build.fs b/build/build.fs index 21333cca..d6a990c3 100644 --- a/build/build.fs +++ b/build/build.fs @@ -34,6 +34,10 @@ let environVarAsBoolOrDefault varName defaultValue = let productName = "ImageProcessing" let sln = __SOURCE_DIRECTORY__ ".." "ImageProcessing.sln" +let rootDirectory = + __SOURCE_DIRECTORY__ + ".." + let src = __SOURCE_DIRECTORY__ ".." "src" let srcCodeGlob = @@ -49,6 +53,13 @@ let testsCodeGlob = let srcGlob = src @@ "**/*.??proj" let testsGlob = __SOURCE_DIRECTORY__ ".." "tests/**/*.??proj" +let docsDir = + __SOURCE_DIRECTORY__ ".." + "docs" +let docsSrcDir = + __SOURCE_DIRECTORY__ ".." + "docsSrc" + let mainApp = src @@ productName let srcAndTest = @@ -63,18 +74,34 @@ let distGlob = let coverageThresholdPercent = 0 let coverageReportDir = __SOURCE_DIRECTORY__ ".." "docs" @@ "coverage" - -let gitOwner = "gsvgit" +let temp = + rootDirectory + "temp" +let watchDocsDir = + temp + "watch-docs" + +let gitOwner = "LeonidLodygin" let gitRepoName = "ImageProcessing" let gitHubRepoUrl = sprintf "https://github.com/%s/%s" gitOwner gitRepoName +let documentationRootUrl = "https://LeonidLodygin.github.io/ImageProcessing" + let releaseBranch = "main" +let readme = "README.md" +let changelogFile = "CHANGELOG.md" let tagFromVersionNumber versionNumber = sprintf "v%s" versionNumber let changelogFilename = __SOURCE_DIRECTORY__ ".." "CHANGELOG.md" let changelog = Fake.Core.Changelog.load changelogFilename + +let READMElink = Uri(Uri(gitHubRepoUrl), $"blob/{releaseBranch}/{readme}") +let CHANGELOGlink = Uri(Uri(gitHubRepoUrl), $"blob/{releaseBranch}/{changelogFile}") + +let LICENSElink = Uri(Uri(gitHubRepoUrl), $"blob/{releaseBranch}/LICENSE.md") + let mutable latestEntry = if Seq.isEmpty changelog.Entries then Changelog.ChangelogEntry.New("0.0.1", "0.0.1-alpha.1", Some DateTime.Today, None, [], false) @@ -218,6 +245,64 @@ module dotnet = let fsharpLint args = DotNet.exec id "fsharplint lint --file-type solution" args +module DocsTool = + let quoted s = $"\"%s{s}\"" + + let fsDocsDotnetOptions (o: DotNet.Options) = { + o with + WorkingDirectory = __SOURCE_DIRECTORY__ ".." + } + + let fsDocsBuildParams configuration (p: Fsdocs.BuildCommandParams) = { + p with + Clean = Some true + Input = Some(quoted docsSrcDir) + Output = Some(quoted docsDir) + Eval = Some true + //Projects = Some(Seq.map quoted (!!srcGlob)) + Properties = Some($"Configuration=%s{configuration}") + Parameters = + Some [ + // https://fsprojects.github.io/FSharp.Formatting/content.html#Templates-and-Substitutions + "root", quoted documentationRootUrl + "fsdocs-collection-name", quoted productName + "fsdocs-repository-branch", quoted releaseBranch + "fsdocs-repository-link", quoted (gitHubRepoUrl) + "fsdocs-package-version", quoted latestEntry.NuGetVersion + "fsdocs-readme-link", quoted (READMElink.ToString()) + "fsdocs-release-notes-link", quoted (CHANGELOGlink.ToString()) + "fsdocs-license-link", quoted (LICENSElink.ToString()) + ] + IgnoreProjects = Some true + NoApiDocs = Some true + Strict = Some true + } + + let cleanDocsCache () = Fsdocs.cleanCache rootDirectory + + let build (configuration) = + Fsdocs.build fsDocsDotnetOptions (fsDocsBuildParams configuration) + + + let watch (configuration) = + let buildParams bp = + let bp = + Option.defaultValue Fsdocs.BuildCommandParams.Default bp + |> fsDocsBuildParams configuration + + { + bp with + Output = Some watchDocsDir + Strict = None + } + + Fsdocs.watch + fsDocsDotnetOptions + (fun p -> { + p with + BuildCommandParams = Some(buildParams p.BuildCommandParams) + }) + module FSharpAnalyzers = type Arguments = | Project of string @@ -586,6 +671,16 @@ let fsharpLint _ = else failwith "Some files need formatting, please check output for more info" +let cleanDocsCache _ = DocsTool.cleanDocsCache () + +let buildDocs ctx = + let configuration = configuration (ctx.Context.AllExecutingTargets) + DocsTool.build (string configuration) + +let watchDocs ctx = + let configuration = configuration (ctx.Context.AllExecutingTargets) + DocsTool.watch (string configuration) + let initTargets () = BuildServer.install [ GitHubActions.Installer @@ -622,6 +717,9 @@ let initTargets () = Target.create "CheckFormatCode" checkFormatCode Target.create "Release" ignore //Target.create "FsharpLint" fsharpLint + Target.create "CleanDocsCache" cleanDocsCache + Target.create "BuildDocs" buildDocs + Target.create "WatchDocs" watchDocs //----------------------------------------------------------------------------- // Target Dependencies @@ -644,6 +742,18 @@ let initTargets () = "UpdateChangelog" ?=>! "AssemblyInfo" "UpdateChangelog" ==>! "GitRelease" + "CleanDocsCache" + ==>! "BuildDocs" + + "DotnetBuild" + ?=>! "BuildDocs" + + "DotnetBuild" + ==>! "BuildDocs" + + "DotnetBuild" + ==>! "WatchDocs" + "DotnetRestore" ==> "CheckFormatCode" //==> "FsharpLint" diff --git a/build/build.fsproj b/build/build.fsproj index 1402f64d..4378f2cc 100644 --- a/build/build.fsproj +++ b/build/build.fsproj @@ -7,6 +7,7 @@ false + From 0fbaf8d9c80c70dbd21e571d03507eaa0de734d4 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Mon, 4 Dec 2023 08:03:54 +0300 Subject: [PATCH 03/27] Add readme --- README.md | 58 +++++++++++++++++-------------------------- images/example.jpg | Bin 0 -> 150538 bytes images/processed.jpg | Bin 0 -> 57069 bytes 3 files changed, 23 insertions(+), 35 deletions(-) create mode 100644 images/example.jpg create mode 100644 images/processed.jpg diff --git a/README.md b/README.md index 321ad269..5882e06d 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,33 @@ -# ImageProcessing +# LeonidLodygin.ImageProcessing Simple image processing on GPGPU in F# using [Brahma.FSharp](https://github.com/YaccConstructor/Brahma.FSharp). ---- - -## Builds - - -GitHub Actions | -:---: | -[![GitHub Actions](https://github.com/gsvgit/ImageProcessing/workflows/Build%20master/badge.svg)](https://github.com/gsvgit/ImageProcessing/actions?query=branch%3Amaster) | -[![Build History](https://buildstats.info/github/chart/gsvgit/ImageProcessing)](https://github.com/gsvgit/ImageProcessing/actions?query=branch%3Amaster) | - -## NuGet - -Package | Stable | Prerelease ---- | --- | --- -ImageProcessing | | - - ---- - -### Developing - -Make sure the following **requirements** are installed on your system: - -- [dotnet SDK](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) 7.0 or higher -- OpenCL-compatible device with respective driver installed. - ---- - -### Building +## Features +* Apply built-in or custom filters to an image +* Rotating, reflecting the image +* Applying fish-eye to an image +* Image processing using CPU or specific GPU +* Ability to process images in multiple threads using agents (mailbox processor based). +* Process one image or a whole set of images at a time +## Installation +* TODO +## Quick start ```sh -> build.cmd // on windows -$ ./build.sh // on unix +> dotnet run -i *input path* -o *output path* -mod FishEye -gpu AnyGpu ``` +## Result +| Original | Fisheye | +|:-----------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------| +| ![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/images/example.jpg) | ![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/images/processed.jpg) | + +## Contributors ---- +- Leonid Lodygin (Github: [@LeonidLodygin](https://github.com/LeonidLodygin)) +- Semyon Grigorev (Github: [@gsvgit](https://github.com/gsvgit)) -### Build Targets +## License -For details look at [MiniScaffold](https://github.com/TheAngryByrd/MiniScaffold), we use it in our project. +This project licensed under MIT License. License text can be found in the +[license file](https://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md). diff --git a/images/example.jpg b/images/example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0fd8935e4ecd1e07c9e98430407f43e163484a3 GIT binary patch literal 150538 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 LUlyqQYwCXhlfO-v literal 0 HcmV?d00001 From 9a350bba0e9e345712089f0ee82add07816bcf39 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Sat, 16 Dec 2023 22:12:22 +0300 Subject: [PATCH 04/27] Fix namespaces and add some targets for documentation in build.fs --- .config/dotnet-tools.json | 6 + .fsdocs/cache | 5 + CHANGELOG.md | 7 +- Directory.Build.props | 8 +- build/FsDocs.fs | 116 +- build/build.fs | 8 +- docs/coverage/ImageProcessing_Agents.html | 179 -- docs/coverage/ImageProcessing_Arguments.html | 137 - .../ImageProcessing_CpuImageProcessing.html | 297 -- .../ImageProcessing_CpuProcessing.html | 184 -- docs/coverage/ImageProcessing_GpuKernels.html | 254 -- .../ImageProcessing_GpuProcessing.html | 235 -- .../ImageProcessing_ImageArrayProcessing.html | 146 - docs/coverage/ImageProcessing_Kernels.html | 79 - docs/coverage/ImageProcessing_Main.html | 135 - docs/coverage/ImageProcessing_MyImage.html | 131 - docs/coverage/class.js | 221 -- docs/coverage/icon_cube.svg | 2 - docs/coverage/icon_cube_dark.svg | 1 - docs/coverage/icon_down-dir_active.svg | 2 - docs/coverage/icon_down-dir_active_dark.svg | 1 - docs/coverage/icon_fork.svg | 2 - docs/coverage/icon_fork_dark.svg | 1 - docs/coverage/icon_info-circled.svg | 2 - docs/coverage/icon_info-circled_dark.svg | 2 - docs/coverage/icon_minus.svg | 2 - docs/coverage/icon_minus_dark.svg | 1 - docs/coverage/icon_plus.svg | 2 - docs/coverage/icon_plus_dark.svg | 1 - docs/coverage/icon_search-minus.svg | 2 - docs/coverage/icon_search-minus_dark.svg | 1 - docs/coverage/icon_search-plus.svg | 2 - docs/coverage/icon_search-plus_dark.svg | 1 - docs/coverage/icon_sponsor.svg | 2 - docs/coverage/icon_star.svg | 2 - docs/coverage/icon_star_dark.svg | 2 - docs/coverage/icon_up-dir.svg | 2 - docs/coverage/icon_up-dir_active.svg | 2 - docs/coverage/icon_wrench.svg | 2 - docs/coverage/icon_wrench_dark.svg | 1 - docs/coverage/index.htm | 157 -- docs/coverage/index.html | 157 -- docs/coverage/main.js | 313 --- docs/coverage/report.css | 564 ---- src/ImageProcessing/Agents.fs | 2 +- src/ImageProcessing/Arguments.fs | 2 +- src/ImageProcessing/CpuProcessing.fs | 2 +- src/ImageProcessing/GpuKernels.fs | 2 +- src/ImageProcessing/GpuProcessing.fs | 2 +- src/ImageProcessing/ImageArrayProcessing.fs | 2 +- src/ImageProcessing/ImageProcessing.fsproj | 3 +- src/ImageProcessing/Kernels.fs | 2 +- src/ImageProcessing/MyImage.fs | 2 +- src/ImageProcessing/Types.fs | 2 +- tests/ImageProcessing.Tests/coverage.xml | 2434 ++++++++++++----- 55 files changed, 1859 insertions(+), 3973 deletions(-) create mode 100644 .fsdocs/cache delete mode 100644 docs/coverage/ImageProcessing_Agents.html delete mode 100644 docs/coverage/ImageProcessing_Arguments.html delete mode 100644 docs/coverage/ImageProcessing_CpuImageProcessing.html delete mode 100644 docs/coverage/ImageProcessing_CpuProcessing.html delete mode 100644 docs/coverage/ImageProcessing_GpuKernels.html delete mode 100644 docs/coverage/ImageProcessing_GpuProcessing.html delete mode 100644 docs/coverage/ImageProcessing_ImageArrayProcessing.html delete mode 100644 docs/coverage/ImageProcessing_Kernels.html delete mode 100644 docs/coverage/ImageProcessing_Main.html delete mode 100644 docs/coverage/ImageProcessing_MyImage.html delete mode 100644 docs/coverage/class.js delete mode 100644 docs/coverage/icon_cube.svg delete mode 100644 docs/coverage/icon_cube_dark.svg delete mode 100644 docs/coverage/icon_down-dir_active.svg delete mode 100644 docs/coverage/icon_down-dir_active_dark.svg delete mode 100644 docs/coverage/icon_fork.svg delete mode 100644 docs/coverage/icon_fork_dark.svg delete mode 100644 docs/coverage/icon_info-circled.svg delete mode 100644 docs/coverage/icon_info-circled_dark.svg delete mode 100644 docs/coverage/icon_minus.svg delete mode 100644 docs/coverage/icon_minus_dark.svg delete mode 100644 docs/coverage/icon_plus.svg delete mode 100644 docs/coverage/icon_plus_dark.svg delete mode 100644 docs/coverage/icon_search-minus.svg delete mode 100644 docs/coverage/icon_search-minus_dark.svg delete mode 100644 docs/coverage/icon_search-plus.svg delete mode 100644 docs/coverage/icon_search-plus_dark.svg delete mode 100644 docs/coverage/icon_sponsor.svg delete mode 100644 docs/coverage/icon_star.svg delete mode 100644 docs/coverage/icon_star_dark.svg delete mode 100644 docs/coverage/icon_up-dir.svg delete mode 100644 docs/coverage/icon_up-dir_active.svg delete mode 100644 docs/coverage/icon_wrench.svg delete mode 100644 docs/coverage/icon_wrench_dark.svg delete mode 100644 docs/coverage/index.htm delete mode 100644 docs/coverage/index.html delete mode 100644 docs/coverage/main.js delete mode 100644 docs/coverage/report.css diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index e343e3b0..e46c41c4 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -37,6 +37,12 @@ "commands": [ "dotnet-fsharplint" ] + }, + "fsdocs-tool": { + "version": "19.1.1", + "commands": [ + "fsdocs" + ] } } } \ No newline at end of file diff --git a/.fsdocs/cache b/.fsdocs/cache new file mode 100644 index 00000000..0cdbcbfb --- /dev/null +++ b/.fsdocs/cache @@ -0,0 +1,5 @@ +@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item1http://localhost:8901/@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1^C:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0\ImageProcessing.dll@m_Item2^heada-o:C:\Users\Леонид\ImageProcessing\src\ImageProcessing\obj\Debug\net7.0\ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head --define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head*--doc:obj\Debug\net7.0\ImageProcessing.xml^tail^head --optimize-^tail^head --tailcalls-^tail^headO-r:C:\Users\Леонид\.nuget\packages\argu\6.1.1\lib\netstandard2.0\Argu.dll^tail^heado-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.ast\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.AST.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Core.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.printer\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Printer.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.shared\2.0.3\lib\net7.0\Brahma.FSharp.OpenCL.Shared.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.translator\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Translator.dll^tail^headU-r:C:\Users\Леонид\.nuget\packages\expecto\9.0.4\lib\netstandard2.0\Expecto.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\expecto.fscheck\9.0.4\lib\netstandard2.0\Expecto.FsCheck.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\extraconstraints.fody\1.14.0\lib\netstandard1.4\ExtraConstraints.dll^tail^headV-r:C:\Users\Леонид\.nuget\packages\fscheck\2.14.3\lib\netstandard2.0\FsCheck.dll^tail^head]-r:C:\Users\Леонид\.nuget\packages\fsharp.core\6.0.0\lib\netstandard2.1\FSharp.Core.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\fsharp.quotations.evaluator\2.1.0\lib\netstandard2.0\FSharp.Quotations.Evaluator.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\fsharpx.collections\3.1.0\lib\netstandard2.0\FSharpx.Collections.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\fsharpx.text.structuredformat\3.1.0\lib\netstandard2.0\FSharpx.Text.StructuredFormat.dll^tail^head{-r:C:\Users\Леонид\.nuget\packages\microsoft.build.framework\16.10.0\lib\netstandard2.0\Microsoft.Build.Framework.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.CSharp.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.Core.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Primitives.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Registry.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\microsoft.win32.systemevents\7.0.0\lib\net7.0\Microsoft.Win32.SystemEvents.dll^tail^head\-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Mdb.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Pdb.dll^tail^headb-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Rocks.dll^tail^headX-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\mscorlib.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\netstandard.dll^tail^headn-r:C:\Users\Леонид\.nuget\packages\sixlabors.imagesharp\2.1.3\lib\netcoreapp3.1\SixLabors.ImageSharp.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.AppContext.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Buffers.dll^tail^head[-r:C:\Users\Леонид\.nuget\packages\system.codedom\7.0.0\lib\net7.0\System.CodeDom.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Concurrent.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Immutable.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.NonGeneric.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Specialized.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Annotations.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.DataAnnotations.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.EventBasedAsync.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Primitives.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.TypeConverter.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.configuration.configurationmanager\7.0.0\lib\net7.0\System.Configuration.ConfigurationManager.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Configuration.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Console.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Core.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.Common.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.DataSetExtensions.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Contracts.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Debug.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.DiagnosticSource.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.diagnostics.eventlog\7.0.0\lib\net7.0\System.Diagnostics.EventLog.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.FileVersionInfo.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Process.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.StackTrace.dll^tail^headz-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tools.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TraceSource.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tracing.dll^tail^headV-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.dll^tail^headi-r:C:\Users\Леонид\.nuget\packages\system.drawing.common\7.0.0\lib\net7.0\System.Drawing.Common.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.Primitives.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Dynamic.Runtime.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Asn1.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Tar.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Calendars.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Extensions.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.Brotli.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.FileSystem.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.ZipFile.dll^tail^headY-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.AccessControl.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.DriveInfo.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Primitives.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Watcher.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.IsolatedStorage.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.MemoryMappedFiles.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.AccessControl.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.UnmanagedMemoryStream.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Expressions.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Parallel.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Queryable.dll^tail^head]-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Memory.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.Json.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.HttpListener.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Mail.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NameResolution.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NetworkInformation.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Ping.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Primitives.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Quic.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Requests.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Security.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.ServicePoint.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Sockets.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebClient.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebHeaderCollection.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebProxy.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.Client.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.Vectors.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ObjectModel.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.DispatchProxy.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.ILGeneration.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.Lightweight.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Extensions.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Metadata.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.TypeExtensions.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Reader.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.ResourceManager.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Writer.dll^tail^headv-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Extensions.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Handles.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.dll^tail^heady-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.JavaScript.dll^tail^head-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Intrinsics.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Loader.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Numerics.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Formatters.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Json.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Xml.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.AccessControl.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Claims.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Algorithms.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Cng.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Csp.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Encoding.dll^tail^headt-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.OpenSsl.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Primitives.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.security.cryptography.protecteddata\7.0.0\lib\net7.0\System.Security.Cryptography.ProtectedData.dll^tail^head}-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.X509Certificates.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.security.permissions\7.0.0\lib\net7.0\System.Security.Permissions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.Windows.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.SecureString.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceModel.Web.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceProcess.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.CodePages.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.Extensions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encodings.Web.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Json.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.RegularExpressions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Channels.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Overlapped.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Dataflow.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Extensions.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Parallel.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Thread.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.ThreadPool.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Timer.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.Local.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ValueTuple.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.HttpUtility.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Windows.dll^tail^headq-r:C:\Users\Леонид\.nuget\packages\system.windows.extensions\7.0.0\lib\net7.0\System.Windows.Extensions.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.ReaderWriter.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Serialization.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XDocument.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlDocument.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlSerializer.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.XDocument.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\WindowsBase.dll^tail^headY-r:C:\Users\Леонид\.nuget\packages\yc.opencl.net\2.0.3\lib\net7.0\YC.OpenCL.NET.dll^tail^head--target:library^tail^head+--nowarn:IL2121,NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head --fullpaths^tail^head --flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value0https://github.com/LeonidLodygin/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_item fsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Mhttps://github.com/LeonidLodygin/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item24https://github.com/LeonidLodygin/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item27https://github.com/LeonidLodygin/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item25https://github.com/LeonidLodygin/blob/main/LICENSE.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headJC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_item fsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Mhttps://github.com/LeonidLodygin/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item24https://github.com/LeonidLodygin/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item27https://github.com/LeonidLodygin/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item25https://github.com/LeonidLodygin/blob/main/LICENSE.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^valuehttp://localhost:8901/@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string/https://LeonidLodygin.github.io/ImageProcessing^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-repository-link^string0https://github.com/LeonidLodygin/ImageProcessing^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^string4https://github.com/LeonidLodygin/blob/main/README.md^stringfsdocs-release-notes-link^string7https://github.com/LeonidLodygin/blob/main/CHANGELOG.md^stringfsdocs-license-link^string5https://github.com/LeonidLodygin/blob/main/LICENSE.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headPC:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4cH@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTimes[DH \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 83a2bd8c..a8591c55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -## [0.1.0] - 2017-03-17 +## [0.1.0] - 2023-12-16 First release ### Added -- This release already has lots of features +- Processing images by applying filters +- Rotating, reflecting images +- Parallel image processing using agents +- Processing using the CPU or any GPU on your device [0.1.0]: https://github.com/user/MyCoolNewApp.git/releases/tag/v0.1.0 diff --git a/Directory.Build.props b/Directory.Build.props index 26cc6fe2..581fb248 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -2,12 +2,12 @@ f#, fsharp - https://github.com/gsvgit/ImageProcessing - https://github.com/gsvgit/ImageProcessing/blob/master/LICENSE.md + https://github.com/LeonidLodygin/ImageProcessing + https://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md false git - gsvgit - https://github.com/gsvgit/ImageProcessing + LeonidLodygin + https://github.com/LeonidLodygin/ImageProcessing diff --git a/build/FsDocs.fs b/build/FsDocs.fs index 7386e5df..8dbc0c93 100644 --- a/build/FsDocs.fs +++ b/build/FsDocs.fs @@ -14,70 +14,71 @@ module Fsdocs = ///

/// Fsdocs build command parameters and options /// - type BuildCommandParams = { - /// Input directory of content (default: docs) - Input: string option + type BuildCommandParams = + { + /// Input directory of content (default: docs) + Input: string option - /// Project files to build API docs for outputs, defaults to all packable projects - Projects: seq option + /// Project files to build API docs for outputs, defaults to all packable projects + Projects: seq option - /// Output Directory (default output for build and tmp/watch for watch) - Output: string option + /// Output Directory (default output for build and tmp/watch for watch) + Output: string option - /// Disable generation of API docs - NoApiDocs: bool option + /// Disable generation of API docs + NoApiDocs: bool option - /// Evaluate F# fragments in scripts - Eval: bool option + /// Evaluate F# fragments in scripts + Eval: bool option - /// Save images referenced in docs - SaveImages: bool option + /// Save images referenced in docs + SaveImages: bool option - /// Add line numbers - LineNumbers: bool option + /// Add line numbers + LineNumbers: bool option - /// Additional substitution parameters for templates - Parameters: seq option + /// Additional substitution parameters for templates + Parameters: seq option - /// Disable project cracking. - IgnoreProjects: bool option + /// Disable project cracking. + IgnoreProjects: bool option - /// In API doc generation qualify the output by the collection name, e.g. 'reference/FSharp.Core/...' instead of 'reference/...' . - Qualify: bool option + /// In API doc generation qualify the output by the collection name, e.g. 'reference/FSharp.Core/...' instead of 'reference/...' . + Qualify: bool option - /// The tool will also generate documentation for non-public members - NoPublic: bool option + /// The tool will also generate documentation for non-public members + NoPublic: bool option - /// Do not copy default content styles, javascript or use default templates - NoDefaultContent: bool option + /// Do not copy default content styles, javascript or use default templates + NoDefaultContent: bool option - /// Clean the output directory - Clean: bool option + /// Clean the output directory + Clean: bool option - /// Display version information - Version: bool option + /// Display version information + Version: bool option - /// Provide properties to dotnet msbuild, e.g. --properties Configuration=Release Version=3.4 - Properties: string option + /// Provide properties to dotnet msbuild, e.g. --properties Configuration=Release Version=3.4 + Properties: string option - /// Additional arguments passed down as otherflags to the F# compiler when the API is being generated. - /// Note that these arguments are trimmed, this is to overcome a limitation in the command line argument - /// processing. A typical use-case would be to pass an addition assembly reference. - /// Example --fscoptions " -r:MyAssembly.dll" - FscOptions: string option + /// Additional arguments passed down as otherflags to the F# compiler when the API is being generated. + /// Note that these arguments are trimmed, this is to overcome a limitation in the command line argument + /// processing. A typical use-case would be to pass an addition assembly reference. + /// Example --fscoptions " -r:MyAssembly.dll" + FscOptions: string option - /// Fail if docs are missing or can't be generated - Strict: bool option + /// Fail if docs are missing or can't be generated + Strict: bool option - /// Source folder at time of component build (<FsDocsSourceFolder>) - SourceFolder: string option + /// Source folder at time of component build (<FsDocsSourceFolder>) + SourceFolder: string option - /// Source repository for github links (<FsDocsSourceRepository>) - SourceRepository: string option + /// Source repository for github links (<FsDocsSourceRepository>) + SourceRepository: string option - /// Assume comments in F# code are markdown (<UsesMarkdownComments>) - MdComments: bool option - } with + /// Assume comments in F# code are markdown (<UsesMarkdownComments>) + MdComments: bool option + } /// Parameter default values. static member Default = { @@ -106,22 +107,23 @@ module Fsdocs = /// /// Fsdocs watch command parameters and options /// - type WatchCommandParams = { - /// Do not serve content when watching. - NoServer: bool option + type WatchCommandParams = + { + /// Do not serve content when watching. + NoServer: bool option - /// Do not launch a browser window. - NoLaunch: bool option + /// Do not launch a browser window. + NoLaunch: bool option - /// URL extension to launch http://localhost:/%s. - Open: string option + /// URL extension to launch http://localhost:/%s. + Open: string option - /// Port to serve content for http://localhost serving. - Port: int option + /// Port to serve content for http://localhost serving. + Port: int option - /// Build Commands - BuildCommandParams: BuildCommandParams option - } with + /// Build Commands + BuildCommandParams: BuildCommandParams option + } /// Parameter default values. static member Default = { diff --git a/build/build.fs b/build/build.fs index d6a990c3..3f692264 100644 --- a/build/build.fs +++ b/build/build.fs @@ -54,10 +54,10 @@ let srcGlob = src @@ "**/*.??proj" let testsGlob = __SOURCE_DIRECTORY__ ".." "tests/**/*.??proj" let docsDir = - __SOURCE_DIRECTORY__ ".." + rootDirectory "docs" let docsSrcDir = - __SOURCE_DIRECTORY__ ".." + rootDirectory "docsSrc" let mainApp = src @@ productName @@ -259,7 +259,7 @@ module DocsTool = Input = Some(quoted docsSrcDir) Output = Some(quoted docsDir) Eval = Some true - //Projects = Some(Seq.map quoted (!!srcGlob)) + Projects = Some(Seq.map quoted (!!srcGlob)) Properties = Some($"Configuration=%s{configuration}") Parameters = Some [ @@ -273,8 +273,6 @@ module DocsTool = "fsdocs-release-notes-link", quoted (CHANGELOGlink.ToString()) "fsdocs-license-link", quoted (LICENSElink.ToString()) ] - IgnoreProjects = Some true - NoApiDocs = Some true Strict = Some true } diff --git a/docs/coverage/ImageProcessing_Agents.html b/docs/coverage/ImageProcessing_Agents.html deleted file mode 100644 index d2fbde5a..00000000 --- a/docs/coverage/ImageProcessing_Agents.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -Agents - Coverage Report - -
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Arguments.html b/docs/coverage/ImageProcessing_Arguments.html deleted file mode 100644 index bd11ad63..00000000 --- a/docs/coverage/ImageProcessing_Arguments.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -Arguments - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:Arguments
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Arguments.fs
Covered lines:8
Uncovered lines:5
Coverable lines:13
Total lines:37
Line coverage:61.5% (8 of 13)
Covered branches:7
Total branches:11
Branch coverage:63.6% (7 of 11)
Covered methods:1
Total methods:2
Method coverage:50% (1 of 2)
-

Metrics

- - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
modificationParser(...)100%777100%
Argu.IArgParserTemplate.get_Usage()0%20440%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Arguments.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module Arguments
 2
 3open CpuImageProcessing
 4open Argu
 5
 6type Modifications =
 7    | Gauss5x5
 8    | Gauss7x7
 9    | Edges
 10    | Sharpen
 11    | Emboss
 12    | ClockwiseRotation
 13    | CounterClockwiseRotation
 14
 15let modificationParser modification =
 10016    match modification with
 1517    | Gauss5x5 -> applyFilterToImage gaussianBlurKernel
 1118    | Gauss7x7 -> applyFilterToImage gaussianBlur7x7Kernel
 1019    | Edges -> applyFilterToImage edgesKernel
 1520    | Sharpen -> applyFilterToImage sharpenKernel
 1421    | Emboss -> applyFilterToImage embossKernel
 1522    | ClockwiseRotation -> rotate90DegreesImage Right
 2023    | CounterClockwiseRotation -> rotate90DegreesImage Left
 24
 25type CliArguments =
 26    | [<Mandatory; AltCommandLine("-i")>] InputPath of inputPath: string
 27    | [<Mandatory; AltCommandLine("-o")>] OutputPath of outputPath: string
 28    | [<AltCommandLine("-ag")>] Agents
 29    | [<AltCommandLine("-mod")>] Modifications of modifications: List<Modifications>
 30
 31    interface IArgParserTemplate with
 32        member s.Usage =
 033            match s with
 034            | Agents -> "Apply modifications to an image using agents"
 035            | Modifications _ -> "Set of modifications to image or image array"
 036            | InputPath _ -> "Input directory or path to the image"
 037            | OutputPath _ -> "Output directory or path to saved image"
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_CpuImageProcessing.html b/docs/coverage/ImageProcessing_CpuImageProcessing.html deleted file mode 100644 index 9a9e5239..00000000 --- a/docs/coverage/ImageProcessing_CpuImageProcessing.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - -CpuImageProcessing - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:CpuImageProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuImageProcessing.fs
Covered lines:62
Uncovered lines:7
Coverable lines:69
Total lines:167
Line coverage:89.8% (62 of 69)
Covered branches:48
Total branches:50
Branch coverage:96% (48 of 50)
Covered methods:15
Total methods:17
Method coverage:88.2% (15 of 17)
-

Metrics

- - - - - - - - - - - - - - - - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)0%110100%
loadAs2DArray(...)77.78%5516100%
loadAsImage(...)0%110100%
flat2dArray(...)0%110100%
GenerateNext(...)100%884100%
save2DByteArrayAsImage(...)0%2100%
saveImage(...)0%2100%
applyFilter(...)0%110100%
Invoke(...)100%9964100%
Invoke(...)0%110100%
Invoke(...)0%110100%
applyFilterToImage(...)0%110100%
Invoke(...)100%9964100%
Invoke(...)0%110100%
Invoke(...)0%110100%
rotate90Degrees(...)100%6632100%
rotate90DegreesImage(...)100%334100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuImageProcessing.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module CpuImageProcessing
 2
 3open System
 4open SixLabors.ImageSharp
 5open SixLabors.ImageSharp.PixelFormats
 6
 7type Side =
 8    | Right
 9    | Left
 10
 11[<Struct>]
 12type MyImage =
 13    val Data: array<byte>
 14    val Width: int
 15    val Height: int
 16    val Name: string
 17
 18    new(data, width, height, name) =
 70919        { Data = data
 70920          Width = width
 70921          Height = height
 70922          Name = name }
 23
 24let loadAs2DArray (filePath: string) =
 225    let img = Image.Load<L8> filePath
 226    let res = Array2D.zeroCreate img.Height img.Width
 27
 217828    for i in 0 .. img.Width - 1 do
 191091229        for j in 0 .. img.Height - 1 do
 190873630            res[j, i] <- img.Item(i, j).PackedValue
 31
 232    printfn $"%A{System.IO.Path.GetFileName filePath} successfully loaded."
 233    res
 34
 35let loadAsImage (file: string) =
 236    let img = Image.Load<L8> file
 37
 238    let buf = Array.zeroCreate<byte> (img.Width * img.Height)
 39
 240    img.CopyPixelDataTo(Span<byte> buf)
 241    MyImage(buf, img.Width, img.Height, System.IO.Path.GetFileName file)
 42
 43let flat2dArray arr =
 20044    seq {
 355845        for x in [ 0 .. (Array2D.length1 arr) - 1 ] do
 12873346            for y in [ 0 .. (Array2D.length2 arr) - 1 ] do
 11985947                yield arr[x, y]
 20048    }
 20049    |> Array.ofSeq
 50
 51let save2DByteArrayAsImage (imageData: byte[,]) filePath =
 052    let height = Array2D.length1 imageData
 053    let width = Array2D.length2 imageData
 054    let img = Image.LoadPixelData<L8>(flat2dArray imageData, width, height)
 055    img.Save filePath
 056    printfn $"%A{System.IO.Path.GetFileName filePath} successfully saved."
 57
 58let saveImage (image: MyImage) file =
 059    let img = Image.LoadPixelData<L8>(image.Data, image.Width, image.Height)
 060    img.Save file
 61
 62let gaussianBlurKernel =
 63    [| [| 1; 4; 6; 4; 1 |]
 64       [| 4; 16; 24; 16; 4 |]
 65       [| 6; 24; 36; 24; 6 |]
 66       [| 4; 16; 24; 16; 4 |]
 67       [| 1; 4; 6; 4; 1 |] |]
 68    |> Array.map (Array.map (fun x -> (float32 x) / 100.0f))
 69
 70let edgesKernel =
 71    [| [| 0; 0; -1; 0; 0 |]
 72       [| 0; 0; -1; 0; 0 |]
 73       [| 0; 0; 2; 0; 0 |]
 74       [| 0; 0; 0; 0; 0 |]
 75       [| 0; 0; 0; 0; 0 |] |]
 76    |> Array.map (Array.map float32)
 77
 78let gaussianBlur7x7Kernel =
 79    [| [| 0; 0; 1; 2; 1; 0; 0 |]
 80       [| 0; 3; 13; 22; 13; 3; 0 |]
 81       [| 1; 13; 59; 97; 59; 13; 1 |]
 82       [| 2; 22; 97; 159; 97; 22; 2 |]
 83       [| 1; 13; 59; 97; 59; 13; 1 |]
 84       [| 0; 3; 13; 22; 13; 3; 0 |]
 85       [| 0; 0; 1; 2; 1; 0; 0 |] |]
 86    |> Array.map (Array.map (fun x -> (float32 x) / 1003.0f))
 87
 88let sharpenKernel =
 89    [| [| -1; -1; -1; -1; -1 |]
 90       [| -1; 2; 2; 2; -1 |]
 91       [| -1; 2; 8; 2; -1 |]
 92       [| -1; 2; 2; 2; -1 |]
 93       [| -1; -1; -1; -1; -1 |] |]
 94    |> Array.map (Array.map (fun x -> (float32 x) / 8.0f))
 95
 96let embossKernel =
 97    [| [| -1f; -1f; -1f; -1f; 0f |]
 98       [| -1f; -1f; -1f; 0f; 1f |]
 99       [| -1f; -1f; 0f; 1f; 1f |]
 100       [| -1f; 0f; 1f; 1f; 1f |]
 101       [| 0f; 1f; 1f; 1f; 1f |] |]
 102
 103let applyFilter (filter: float32[][]) (img: byte[,]) =
 1104    let imgHeight = Array2D.length1 img
 1105    let imgWidth = Array2D.length2 img
 106
 1107    let filterD = (Array.length filter) / 2
 108
 1109    let filter = Array.concat filter
 110
 111    let processPixel px py =
 65536112        let dataToHandle =
 655360113            [| for i in px - filterD .. px + filterD do
 4653056114                   for j in py - filterD .. py + filterD do
 16057416115                       if i < 0 || i >= imgHeight || j < 0 || j >= imgWidth then
 108400116                           float32 img[px, py]
 65536117                       else
 3233936118                           float32 img[i, j] |]
 119
 3276800120        Array.fold2 (fun s x y -> s + x * y) 0.0f filter dataToHandle
 121
 65537122    Array2D.mapi (fun x y _ -> byte (processPixel x y)) img
 123
 124let applyFilterToImage (filter: float32[][]) (img: MyImage) =
 66125    let filterD = (Array.length filter) / 2
 66126    let filter = Array.concat filter
 127
 128    let processPixel p =
 136837129        let pw = p % img.Width
 136837130        let ph = p / img.Width
 131
 136837132        let dataToHandle =
 1258134133            [| for i in ph - filterD .. ph + filterD do
 8061887134                   for j in pw - filterD .. pw + filterD do
 26784114135                       if i < 0 || i >= img.Height || j < 0 || j >= img.Width then
 310141136                           float32 img.Data[p]
 136837137                       else
 5345714138                           float32 img.Data[i * img.Width + j] |]
 139
 5519018140        Array.fold2 (fun s x y -> s + x * y) 0.0f filter dataToHandle
 141
 136903142    MyImage(Array.mapi (fun p _ -> byte (processPixel p)) img.Data, img.Width, img.Height, img.Name)
 143
 144let rotate90Degrees (side: Side) (image: byte[,]) =
 405145    let height = Array2D.length1 image
 405146    let width = Array2D.length2 image
 405147    let res = Array2D.zeroCreate width height
 148
 7378149    for i in 0 .. width - 1 do
 7383770150        for j in 0 .. height - 1 do
 7376797151            if side = Right then
 7374803152                res[i, height - 1 - j] <- image[j, i]
 153            else
 1994154                res[width - 1 - i, j] <- image[j, i]
 155
 405156    res
 157
 158let rotate90DegreesImage (side: Side) (image: MyImage) =
 440159    let res = Array.zeroCreate image.Data.Length
 160
 7425764161    for p in 0 .. image.Data.Length - 1 do
 7424884162        if side = Right then
 7398922163            res[(p % image.Width) * image.Height + image.Height - 1 - p / image.Width] <- image.Data[p]
 164        else
 25962165            res[image.Height * (image.Width - 1 - p % image.Width) + p / image.Width] <- image.Data[p]
 166
 440167    MyImage(res, image.Height, image.Width, image.Name)
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_CpuProcessing.html b/docs/coverage/ImageProcessing_CpuProcessing.html deleted file mode 100644 index e2692ca4..00000000 --- a/docs/coverage/ImageProcessing_CpuProcessing.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -CpuProcessing - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:CpuProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuProcessing.fs
Covered lines:42
Uncovered lines:0
Coverable lines:42
Total lines:72
Line coverage:100% (42 of 42)
Covered branches:32
Total branches:32
Branch coverage:100% (32 of 32)
Covered methods:8
Total methods:8
Method coverage:100% (8 of 8)
-

Metrics

- - - - - - - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
applyFilter(...)0%110100%
Invoke(...)100%9964100%
Invoke(...)0%110100%
Invoke(...)0%110100%
rotate(...)100%334100%
mirror(...)100%334100%
fishEye(...)100%6632100%
Invoke(...)100%222100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuProcessing.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module CpuProcessing
 2
 3open MyImage
 4open Types
 5
 6let applyFilter (filter: float32[][]) (img: MyImage) =
 537    let filterD = (Array.length filter) / 2
 538    let filter = Array.concat filter
 9
 10    let processPixel p =
 12067911        let pw = p % img.Width
 12067912        let ph = p / img.Width
 13
 12067914        let dataToHandle =
 111628815            [| for i in ph - filterD .. ph + filterD do
 721067916                   for j in pw - filterD .. pw + filterD do
 2403202017                       if i < 0 || i >= img.Height || j < 0 || j >= img.Width then
 26845918                           float32 img.Data[p]
 12067919                       else
 480014620                           float32 img.Data[i * img.Width + j] |]
 21
 494792622        Array.fold2 (fun s x y -> s + x * y) 0.0f filter dataToHandle
 23
 12073224    MyImage(Array.mapi (fun p _ -> byte (processPixel p)) img.Data, img.Width, img.Height, img.Name)
 25
 26let rotate (side: Side) (image: MyImage) =
 42527    let res = Array.zeroCreate image.Data.Length
 28
 741128829    for p in 0 .. image.Data.Length - 1 do
 741043830        if side = Right then
 739936731            res[(p % image.Width) * image.Height + image.Height - 1 - p / image.Width] <- image.Data[p]
 32        else
 1107133            res[image.Height * (image.Width - 1 - p % image.Width) + p / image.Width] <- image.Data[p]
 34
 42535    MyImage(res, image.Height, image.Width, image.Name)
 36
 37let mirror (side: MirrorDirection) (image: MyImage) =
 1938    let res = Array.zeroCreate image.Data.Length
 39
 2369440    for p in 0 .. image.Data.Length - 1 do
 2365641        if side = Vertical then
 1443742            res[p - p % image.Width + image.Width - 1 - p % image.Width] <- image.Data[p]
 43        else
 921944            res[(image.Height - 1 - p / image.Width) * image.Width + p % image.Width] <- image.Data[p]
 45
 1946    MyImage(res, image.Width, image.Height, image.Name)
 47
 48let fishEye (image: MyImage) =
 949    let distortion = 0.5
 50
 51    let getFishCoordinates (x: float) (y: float) (r: float) =
 998852        if 1.0 - distortion * r = 0 then
 953            x, y
 54        else
 997955            x / (1.0 - distortion * r), y / (1.0 - distortion * r)
 56
 957    let h = float image.Height
 958    let w = float image.Width
 959    let res = Array.zeroCreate image.Data.Length
 60
 1000661    for p in 0 .. image.Data.Length - 1 do
 998862        let xnd = (2.0 * float (p / image.Width) - h) / h
 998863        let ynd = (2.0 * float (p % image.Width) - w) / w
 998864        let radius = xnd * xnd + ynd * ynd
 998865        let xdu, ydu = getFishCoordinates xnd ynd radius
 998866        let xu = int ((xdu + 1.0) * h) / 2
 998867        let yu = int ((ydu + 1.0) * w) / 2
 68
 4011769        if 0 <= xu && xu < int h && 0 <= yu && yu < int w then
 488470            res[p] <- image.Data[xu * image.Width + yu]
 71
 972    MyImage(res, image.Width, image.Height, image.Name)
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_GpuKernels.html b/docs/coverage/ImageProcessing_GpuKernels.html deleted file mode 100644 index 376e534a..00000000 --- a/docs/coverage/ImageProcessing_GpuKernels.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - -GpuKernels - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:GpuKernels
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuKernels.fs
Covered lines:0
Uncovered lines:97
Coverable lines:97
Total lines:134
Line coverage:0% (0 of 97)
Covered branches:0
Total branches:4
Branch coverage:0% (0 of 4)
Covered methods:0
Total methods:12
Method coverage:0% (0 of 12)
-

Metrics

- - - - - - - - - - - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
applyFilterKernel(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
rotateKernel(...)0%6220%
Invoke(...)0%2100%
Invoke(...)0%2100%
mirrorKernel(...)0%6220%
Invoke(...)0%2100%
Invoke(...)0%2100%
fishEyeKernel(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuKernels.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module GpuKernels
 2
 3open Types
 4open Brahma.FSharp
 5
 6let applyFilterKernel (clContext: ClContext) localWorkSize =
 7
 08    let kernel =
 09        <@
 010            fun (r: Range1D) (img: ClArray<_>) imgW imgH (filter: ClArray<_>) filterD (result: ClArray<_>) ->
 011                let p = r.GlobalID0
 012                let pw = p % imgW
 013                let ph = p / imgW
 014                let mutable res = 0.0f
 015
 016                for i in ph - filterD .. ph + filterD do
 017                    for j in pw - filterD .. pw + filterD do
 018                        let mutable d = 0uy
 019
 020                        if i < 0 || i >= imgH || j < 0 || j >= imgW then
 021                            d <- img[p]
 022                        else
 023                            d <- img[i * imgW + j]
 024
 025                        let f = filter[(i - ph + filterD) * (2 * filterD + 1) + (j - pw + filterD)]
 026                        res <- res + (float32 d) * f
 027
 028                result[p] <- byte (int res)
 029        @>
 30
 031    let kernel = clContext.Compile kernel
 32
 33    fun (commandQueue: MailboxProcessor<_>) (filter: ClArray<float32>) filterD (img: ClArray<byte>) imgH imgW (result: C
 034        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 035        let kernel = kernel.GetKernel()
 036        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH filter filterD result))
 037        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 038        result
 39
 40let rotateKernel (clContext: ClContext) localWorkSize side =
 41
 42    let kernel =
 043        match side with
 44        | Right ->
 045            <@
 046                fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
 047                    let p = r.GlobalID0
 048
 049                    if p / imgW < imgH then
 050                        result[(p % imgW) * imgH + imgH - 1 - p / imgW] <- img[p]
 051            @>
 52        | Left ->
 053            <@
 054                fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
 055                    let p = r.GlobalID0
 056                    result[imgH * (imgW - 1 - p % imgW) + p / imgW] <- img[p]
 057            @>
 58
 59
 060    let kernel = clContext.Compile kernel
 61
 62    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
 063        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 064        let kernel = kernel.GetKernel()
 065        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH result))
 066        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 067        result
 68
 69let mirrorKernel (clContext: ClContext) localWorkSize side =
 70
 71    let kernel =
 072        match side with
 73        | Vertical ->
 074            <@
 075                fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
 076                    let p = r.GlobalID0
 077
 078                    if p / imgW < imgH then
 079                        result[p - p % imgW + imgW - 1 - p % imgW] <- img[p]
 080            @>
 81        | Horizontal ->
 082            <@
 083                fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
 084                    let p = r.GlobalID0
 085                    result[(imgH - 1 - p / imgW) * imgW + p % imgW] <- img[p]
 086            @>
 87
 88
 089    let kernel = clContext.Compile kernel
 90
 91    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
 092        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 093        let kernel = kernel.GetKernel()
 094        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH result))
 095        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 096        result
 97
 98let fishEyeKernel (clContext: ClContext) localWorkSize =
 99
 0100    let kernel =
 0101        <@
 0102            fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
 0103                let distortion = 1f
 0104                let p = r.GlobalID0
 0105
 0106                if p / imgW < imgH then
 0107                    let h = float32 imgH
 0108                    let w = float32 imgW
 0109                    let xnd = (2.0f * float32 (p / imgW) - h) / h
 0110                    let ynd = (2.0f * float32 (p % imgW) - w) / w
 0111                    let radius = xnd * xnd + ynd * ynd
 0112
 0113                    let xdu, ydu =
 0114                        if 1.0f - distortion * radius = 0.0f then
 0115                            xnd, ynd
 0116                        else
 0117                            xnd / (1.0f - distortion * radius), ynd / (1.0f - distortion * radius)
 0118
 0119                    let xu = int ((xdu + 1.0f) * h) / 2
 0120                    let yu = int ((ydu + 1.0f) * w) / 2
 0121
 0122                    if 0 <= xu && xu < int h && 0 <= yu && yu < int w then
 0123                        result[p] <- img[xu * imgW + yu]
 0124        @>
 125
 126
 0127    let kernel = clContext.Compile kernel
 128
 129    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
 0130        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 0131        let kernel = kernel.GetKernel()
 0132        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH result))
 0133        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 0134        result
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_GpuProcessing.html b/docs/coverage/ImageProcessing_GpuProcessing.html deleted file mode 100644 index ceb776ef..00000000 --- a/docs/coverage/ImageProcessing_GpuProcessing.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - -GpuProcessing - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - -
Class:GpuProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuProcessing.fs
Covered lines:0
Uncovered lines:72
Coverable lines:72
Total lines:116
Line coverage:0% (0 of 72)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:12
Method coverage:0% (0 of 12)
-

Metrics

- - - - - - - - - - - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
applyFilter(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
rotate(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
mirror(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
fishEye(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuProcessing.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module GpuProcessing
 2
 3open Brahma.FSharp
 4open MyImage
 5open GpuKernels
 6
 7
 8let applyFilter (filter: float32[][]) (clContext: ClContext) localWorkSize =
 09    let kernel = applyFilterKernel clContext localWorkSize
 010    let queue = clContext.QueueProvider.CreateQueue()
 11
 12    fun (img: MyImage) ->
 13
 014        let mutable input =
 015            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 16
 017        let mutable output =
 018            clContext.CreateClArray(
 019                img.Data.Length,
 020                HostAccessMode.NotAccessible,
 021                allocationMode = AllocationMode.Default
 022            )
 23
 024        let filterD = (Array.length filter) / 2
 025        let filter = Array.concat filter
 26
 027        let clFilter =
 028            clContext.CreateClArray<_>(filter, HostAccessMode.NotAccessible, DeviceAccessMode.ReadOnly)
 29
 030        let result = Array.zeroCreate (img.Height * img.Width)
 31
 032        let result =
 033            queue.PostAndReply(fun ch ->
 034                Msg.CreateToHostMsg(kernel queue clFilter filterD input img.Height img.Width output, result, ch))
 35
 036        queue.Post(Msg.CreateFreeMsg clFilter)
 037        queue.Post(Msg.CreateFreeMsg input)
 038        queue.Post(Msg.CreateFreeMsg output)
 039        MyImage(result, img.Width, img.Height, img.Name)
 40
 41let rotate side (clContext: ClContext) localWorkSize =
 042    let kernel = rotateKernel clContext localWorkSize
 043    let queue = clContext.QueueProvider.CreateQueue()
 44
 45    fun (img: MyImage) ->
 46
 047        let mutable input =
 048            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 49
 050        let mutable output =
 051            clContext.CreateClArray(
 052                img.Data.Length,
 053                HostAccessMode.NotAccessible,
 054                allocationMode = AllocationMode.Default
 055            )
 56
 057        let result = Array.zeroCreate img.Data.Length
 58
 059        let result =
 060            queue.PostAndReply(fun ch ->
 061                Msg.CreateToHostMsg(kernel side queue input img.Height img.Width output, result, ch))
 62
 063        queue.Post(Msg.CreateFreeMsg input)
 064        queue.Post(Msg.CreateFreeMsg output)
 065        MyImage(result, img.Height, img.Width, img.Name)
 66
 67let mirror side (clContext: ClContext) localWorkSize =
 068    let kernel = mirrorKernel clContext localWorkSize
 069    let queue = clContext.QueueProvider.CreateQueue()
 70
 71    fun (img: MyImage) ->
 72
 073        let mutable input =
 074            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 75
 076        let mutable output =
 077            clContext.CreateClArray(
 078                img.Data.Length,
 079                HostAccessMode.NotAccessible,
 080                allocationMode = AllocationMode.Default
 081            )
 82
 083        let result = Array.zeroCreate img.Data.Length
 84
 085        let result =
 086            queue.PostAndReply(fun ch ->
 087                Msg.CreateToHostMsg(kernel side queue input img.Height img.Width output, result, ch))
 88
 089        queue.Post(Msg.CreateFreeMsg input)
 090        queue.Post(Msg.CreateFreeMsg output)
 091        MyImage(result, img.Width, img.Height, img.Name)
 92
 93let fishEye (clContext: ClContext) localWorkSize =
 094    let kernel = fishEyeKernel clContext localWorkSize
 095    let queue = clContext.QueueProvider.CreateQueue()
 96
 97    fun (img: MyImage) ->
 98
 099        let mutable input =
 0100            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 101
 0102        let mutable output =
 0103            clContext.CreateClArray(
 0104                img.Data.Length,
 0105                HostAccessMode.NotAccessible,
 0106                allocationMode = AllocationMode.Default
 0107            )
 108
 0109        let result = Array.zeroCreate img.Data.Length
 110
 0111        let result =
 0112            queue.PostAndReply(fun ch -> Msg.CreateToHostMsg(kernel queue input img.Height img.Width output, result, ch)
 113
 0114        queue.Post(Msg.CreateFreeMsg input)
 0115        queue.Post(Msg.CreateFreeMsg output)
 0116        MyImage(result, img.Width, img.Height, img.Name)
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_ImageArrayProcessing.html b/docs/coverage/ImageProcessing_ImageArrayProcessing.html deleted file mode 100644 index d209ecce..00000000 --- a/docs/coverage/ImageProcessing_ImageArrayProcessing.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -ImageArrayProcessing - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:ImageArrayProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageArrayProcessing.fs
Covered lines:0
Uncovered lines:14
Coverable lines:14
Total lines:42
Line coverage:0% (0 of 14)
Covered branches:0
Total branches:6
Branch coverage:0% (0 of 6)
Covered methods:0
Total methods:4
Method coverage:0% (0 of 4)
-

Metrics

- - - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
listAllFiles(...)0%2100%
Invoke(...)0%20400%
arrayOfImagesProcessing(...)0%20480%
Invoke(...)0%2100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageArrayProcessing.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module ImageArrayProcessing
 2
 3open CpuImageProcessing
 4open Agents
 5
 6let extensions =
 7    [| ".png"
 8       ".jpeg"
 9       ".jpg"
 10       ".gif"
 11       ".jfif"
 12       ".webp"
 13       ".pbm"
 14       ".bmp"
 15       ".tga"
 16       ".tiff" |]
 17
 18let listAllFiles dir =
 019    let files = System.IO.Directory.GetFiles dir
 20
 021    let filtered =
 022        Array.filter (fun (x: string) -> Array.contains (System.IO.Path.GetExtension x) extensions) files
 23
 024    List.ofArray filtered
 25
 26let arrayOfImagesProcessing inputDir outputDir conversion switcher =
 027    let list = listAllFiles inputDir
 28
 029    if switcher = On then
 030        let agentSaver = imgSaver outputDir
 031        let procAgent = imgProcessor conversion agentSaver
 32
 033        for file in list do
 034            procAgent.Post(Img(loadAsImage file))
 35
 036        procAgent.PostAndReply EOS
 37    else
 38        let helper filePath =
 039            let filtered = conversion (loadAsImage filePath)
 040            saveImage filtered (System.IO.Path.Combine(outputDir, System.IO.Path.GetFileName filePath))
 41
 042        List.iter helper list
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Kernels.html b/docs/coverage/ImageProcessing_Kernels.html deleted file mode 100644 index c05652a0..00000000 --- a/docs/coverage/ImageProcessing_Kernels.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - -Kernels - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - -
Class:Kernels
Assembly:ImageProcessing
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:100% (0 of 0)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:0
Method coverage:
-

File(s)

-

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Main.html b/docs/coverage/ImageProcessing_Main.html deleted file mode 100644 index 5708be1f..00000000 --- a/docs/coverage/ImageProcessing_Main.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -ImageProcessing.Main - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:ImageProcessing.Main
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Main.fs
Covered lines:0
Uncovered lines:17
Coverable lines:17
Total lines:37
Line coverage:0% (0 of 17)
Covered branches:0
Total branches:8
Branch coverage:0% (0 of 8)
Covered methods:0
Total methods:1
Method coverage:0% (0 of 1)
-

Metrics

- - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
main(...)0%305160%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Main.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1namespace ImageProcessing
 2
 3open Argu
 4open Arguments
 5open CpuImageProcessing
 6open ImageArrayProcessing
 7
 8module Main =
 9
 10    [<EntryPoint>]
 11    let main (argv: string array) =
 012        let parser = ArgumentParser.Create<CliArguments>().ParseCommandLine argv
 013        let inputPath = parser.GetResult(InputPath)
 014        let outputPath = parser.GetResult(OutputPath)
 15
 016        if parser.Contains(Modifications) then
 017            let listOfFunc = parser.GetResult(Modifications) |> List.map modificationParser
 18
 019            match listOfFunc with
 020            | [] -> printfn $"List of modifications is empty"
 21            | _ ->
 022                let composition = List.reduce (>>) listOfFunc
 23
 024                match System.IO.Path.GetExtension inputPath with
 25                | "" ->
 026                    if parser.Contains(Agents) then
 027                        arrayOfImagesProcessing inputPath outputPath composition Agents.On
 28                    else
 029                        arrayOfImagesProcessing inputPath outputPath composition Agents.Off
 30                | _ ->
 031                    let image = loadAsImage inputPath
 032                    let filtered = composition image
 033                    saveImage filtered outputPath
 34        else
 035            printfn $"No modifications for image processing"
 36
 037        0
-
-
-
-

Methods/Properties

-main(System.String[])
-
-
- - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_MyImage.html b/docs/coverage/ImageProcessing_MyImage.html deleted file mode 100644 index e29ebc19..00000000 --- a/docs/coverage/ImageProcessing_MyImage.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -MyImage - Coverage Report - -
-

< Summary

- ---- - - - - - - - - - - - - - - - -
Class:MyImage
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\MyImage.fs
Covered lines:8
Uncovered lines:2
Coverable lines:10
Total lines:30
Line coverage:80% (8 of 10)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:3
Method coverage:66.6% (2 of 3)
-

Metrics

- - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)0%110100%
loadAsImage(...)0%110100%
saveImage(...)0%2100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\MyImage.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module MyImage
 2
 3open System
 4open SixLabors.ImageSharp
 5open SixLabors.ImageSharp.PixelFormats
 6
 7[<Struct>]
 8type MyImage =
 9    val Data: array<byte>
 10    val Width: int
 11    val Height: int
 12    val Name: string
 13
 14    new(data, width, height, name) =
 70915        { Data = data
 70916          Width = width
 70917          Height = height
 70918          Name = name }
 19
 20let loadAsImage (file: string) =
 221    let img = Image.Load<L8> file
 22
 223    let buf = Array.zeroCreate<byte> (img.Width * img.Height)
 24
 225    img.CopyPixelDataTo(Span<byte> buf)
 226    MyImage(buf, img.Width, img.Height, System.IO.Path.GetFileName file)
 27
 28let saveImage (image: MyImage) file =
 029    let img = Image.LoadPixelData<L8>(image.Data, image.Width, image.Height)
 030    img.Save file
-
-
- - \ No newline at end of file diff --git a/docs/coverage/class.js b/docs/coverage/class.js deleted file mode 100644 index dafc9a5c..00000000 --- a/docs/coverage/class.js +++ /dev/null @@ -1,221 +0,0 @@ -/* Chartist.js 0.11.0 - * Copyright © 2017 Gion Kunz - * Free to use under either the WTFPL license or the MIT license. - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT - */ - -!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { - var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { - "use strict"; function d(a) { - var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { - var i = c.serialMap(b.normalized.series, function () { - return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) - }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") - } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) - } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) - }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a -}); - -var i, l, selectedLine = null; - -/* Navigate to hash without browser history entry */ -var navigateToHash = function () { - if (window.history !== undefined && window.history.replaceState !== undefined) { - window.history.replaceState(undefined, undefined, this.getAttribute("href")); - } -}; - -var hashLinks = document.getElementsByClassName('navigatetohash'); -for (i = 0, l = hashLinks.length; i < l; i++) { - hashLinks[i].addEventListener('click', navigateToHash); -} - -/* Switch test method */ -var switchTestMethod = function () { - var method = this.getAttribute("value"); - console.log("Selected test method: " + method); - - var lines, i, l, coverageData, lineAnalysis, cells; - - lines = document.querySelectorAll('.lineAnalysis tr'); - - for (i = 1, l = lines.length; i < l; i++) { - coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); - lineAnalysis = coverageData[method]; - cells = lines[i].querySelectorAll('td'); - if (lineAnalysis === undefined) { - lineAnalysis = coverageData.AllTestMethods; - if (lineAnalysis.LVS !== 'gray') { - cells[0].setAttribute('class', 'red'); - cells[1].innerText = cells[1].textContent = '0'; - cells[4].setAttribute('class', 'lightred'); - } - } else { - cells[0].setAttribute('class', lineAnalysis.LVS); - cells[1].innerText = cells[1].textContent = lineAnalysis.VC; - cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); - } - } -}; - -var testMethods = document.getElementsByClassName('switchtestmethod'); -for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].addEventListener('change', switchTestMethod); -} - -/* Highlight test method by line */ -var toggleLine = function () { - if (selectedLine === this) { - selectedLine = null; - } else { - selectedLine = null; - unhighlightTestMethods(); - highlightTestMethods.call(this); - selectedLine = this; - } - -}; -var highlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var lineAnalysis; - var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); - var testMethods = document.getElementsByClassName('testmethod'); - - for (i = 0, l = testMethods.length; i < l; i++) { - lineAnalysis = coverageData[testMethods[i].id]; - if (lineAnalysis === undefined) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } else { - testMethods[i].className += ' light' + lineAnalysis.LVS; - } - } -}; -var unhighlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var testMethods = document.getElementsByClassName('testmethod'); - for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } -}; -var coverableLines = document.getElementsByClassName('coverableline'); -for (i = 0, l = coverableLines.length; i < l; i++) { - coverableLines[i].addEventListener('click', toggleLine); - coverableLines[i].addEventListener('mouseenter', highlightTestMethods); - coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); -} - -/* History charts */ -var renderChart = function (chart) { - // Remove current children (e.g. PNG placeholder) - while (chart.firstChild) { - chart.firstChild.remove(); - } - - var chartData = window[chart.getAttribute('data-data')]; - var options = { - axisY: { - type: undefined, - onlyInteger: true - }, - lineSmooth: false, - low: 0, - high: 100, - scaleMinSpace: 20, - onlyInteger: true, - fullWidth: true - }; - var lineChart = new Chartist.Line(chart, { - labels: [], - series: chartData.series - }, options); - - /* Zoom */ - var zoomButtonDiv = document.createElement("div"); - zoomButtonDiv.className = "toggleZoom"; - var zoomButtonLink = document.createElement("a"); - zoomButtonLink.setAttribute("href", ""); - var zoomButtonText = document.createElement("i"); - zoomButtonText.className = "icon-search-plus"; - - zoomButtonLink.appendChild(zoomButtonText); - zoomButtonDiv.appendChild(zoomButtonLink); - - chart.appendChild(zoomButtonDiv); - - zoomButtonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - if (options.axisY.type === undefined) { - options.axisY.type = Chartist.AutoScaleAxis; - zoomButtonText.className = "icon-search-minus"; - } else { - options.axisY.type = undefined; - zoomButtonText.className = "icon-search-plus"; - } - - lineChart.update(null, options); - }); - - var tooltip = document.createElement("div"); - tooltip.className = "tooltip"; - - chart.appendChild(tooltip); - - /* Tooltips */ - var showToolTip = function () { - var point = this; - var index = [].slice.call(chart.getElementsByClassName('ct-point')).indexOf(point); - - tooltip.innerHTML = chartData.tooltips[index % chartData.tooltips.length]; - tooltip.style.display = 'block'; - }; - - var moveToolTip = function (event) { - var box = chart.getBoundingClientRect(); - var left = event.pageX - box.left - window.pageXOffset; - var top = event.pageY - box.top - window.pageYOffset; - - left = left + 20; - top = top - tooltip.offsetHeight / 2; - - if (left + tooltip.offsetWidth > box.width) { - left -= tooltip.offsetWidth + 40; - } - - if (top < 0) { - top = 0; - } - - if (top + tooltip.offsetHeight > box.height) { - top = box.height - tooltip.offsetHeight; - } - - tooltip.style.left = left + 'px'; - tooltip.style.top = top + 'px'; - }; - - var hideToolTip = function () { - tooltip.style.display = 'none'; - }; - chart.addEventListener('mousemove', moveToolTip); - - lineChart.on('created', function () { - var chartPoints = chart.getElementsByClassName('ct-point'); - for (i = 0, l = chartPoints.length; i < l; i++) { - chartPoints[i].addEventListener('mousemove', showToolTip); - chartPoints[i].addEventListener('mouseout', hideToolTip); - } - }); -}; - -var charts = document.getElementsByClassName('historychart'); -for (i = 0, l = charts.length; i < l; i++) { - renderChart(charts[i]); -} \ No newline at end of file diff --git a/docs/coverage/icon_cube.svg b/docs/coverage/icon_cube.svg deleted file mode 100644 index 3302443c..00000000 --- a/docs/coverage/icon_cube.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_cube_dark.svg b/docs/coverage/icon_cube_dark.svg deleted file mode 100644 index 3e7f0fa8..00000000 --- a/docs/coverage/icon_cube_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_down-dir_active.svg b/docs/coverage/icon_down-dir_active.svg deleted file mode 100644 index d11cf041..00000000 --- a/docs/coverage/icon_down-dir_active.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_down-dir_active_dark.svg b/docs/coverage/icon_down-dir_active_dark.svg deleted file mode 100644 index fa34aeb3..00000000 --- a/docs/coverage/icon_down-dir_active_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_fork.svg b/docs/coverage/icon_fork.svg deleted file mode 100644 index f0148b3a..00000000 --- a/docs/coverage/icon_fork.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_fork_dark.svg b/docs/coverage/icon_fork_dark.svg deleted file mode 100644 index 11930c9b..00000000 --- a/docs/coverage/icon_fork_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_info-circled.svg b/docs/coverage/icon_info-circled.svg deleted file mode 100644 index 252166bb..00000000 --- a/docs/coverage/icon_info-circled.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_info-circled_dark.svg b/docs/coverage/icon_info-circled_dark.svg deleted file mode 100644 index 252166bb..00000000 --- a/docs/coverage/icon_info-circled_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_minus.svg b/docs/coverage/icon_minus.svg deleted file mode 100644 index 3c30c365..00000000 --- a/docs/coverage/icon_minus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_minus_dark.svg b/docs/coverage/icon_minus_dark.svg deleted file mode 100644 index 2516b6fc..00000000 --- a/docs/coverage/icon_minus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_plus.svg b/docs/coverage/icon_plus.svg deleted file mode 100644 index 79327232..00000000 --- a/docs/coverage/icon_plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_plus_dark.svg b/docs/coverage/icon_plus_dark.svg deleted file mode 100644 index 6ed4edd0..00000000 --- a/docs/coverage/icon_plus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_search-minus.svg b/docs/coverage/icon_search-minus.svg deleted file mode 100644 index c174eb5e..00000000 --- a/docs/coverage/icon_search-minus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_search-minus_dark.svg b/docs/coverage/icon_search-minus_dark.svg deleted file mode 100644 index 9caaffbc..00000000 --- a/docs/coverage/icon_search-minus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_search-plus.svg b/docs/coverage/icon_search-plus.svg deleted file mode 100644 index 04b24ecc..00000000 --- a/docs/coverage/icon_search-plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_search-plus_dark.svg b/docs/coverage/icon_search-plus_dark.svg deleted file mode 100644 index 53241945..00000000 --- a/docs/coverage/icon_search-plus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_sponsor.svg b/docs/coverage/icon_sponsor.svg deleted file mode 100644 index bf6d9591..00000000 --- a/docs/coverage/icon_sponsor.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_star.svg b/docs/coverage/icon_star.svg deleted file mode 100644 index b23c54ea..00000000 --- a/docs/coverage/icon_star.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_star_dark.svg b/docs/coverage/icon_star_dark.svg deleted file mode 100644 index 49c0d034..00000000 --- a/docs/coverage/icon_star_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_up-dir.svg b/docs/coverage/icon_up-dir.svg deleted file mode 100644 index 567c11f3..00000000 --- a/docs/coverage/icon_up-dir.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_up-dir_active.svg b/docs/coverage/icon_up-dir_active.svg deleted file mode 100644 index bb225544..00000000 --- a/docs/coverage/icon_up-dir_active.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_wrench.svg b/docs/coverage/icon_wrench.svg deleted file mode 100644 index b6aa318c..00000000 --- a/docs/coverage/icon_wrench.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_wrench_dark.svg b/docs/coverage/icon_wrench_dark.svg deleted file mode 100644 index 5c77a9c8..00000000 --- a/docs/coverage/icon_wrench_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/index.htm b/docs/coverage/index.htm deleted file mode 100644 index 9dd6d6f5..00000000 --- a/docs/coverage/index.htm +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -Summary - Coverage Report - -
-

SummaryStarSponsor

- ---- - - - - - - - - - - - - - - - - - - -
Generated on:16.03.2023 - 20:32:58
Parser:OpenCoverParser
Assemblies:1
Classes:5
Files:5
Covered lines:70
Uncovered lines:82
Coverable lines:152
Total lines:342
Line coverage:46% (70 of 152)
Covered branches:55
Total branches:79
Branch coverage:69.6% (55 of 79)
Covered methods:16
Total methods:36
Method coverage:44.4% (16 of 36)
-

Risk Hotspots

- - -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AssemblyClassMethodCyclomatic complexity NPath complexity Crap Score
ImageProcessingImageProcessing.Mainmain(...)51630
ImageProcessingArgumentsArgu.IArgParserTemplate.get_Usage()4420
ImageProcessingImageArrayProcessingarrayOfImagesProcessing(...)4820
ImageProcessingImageArrayProcessingInvoke(...)4020
-
-

Coverage

- - ------------- - - - - - - - - - -
NameCoveredUncoveredCoverableTotalLine coverageCoveredTotalBranch coverage
ImageProcessing708215234246%
  
557969.6%
  
Agents03939590%
 
040%
 
Arguments85133761.5%
  
71163.6%
  
CpuImageProcessing6276916789.8%
  
485096%
  
ImageArrayProcessing01414420%
 
060%
 
ImageProcessing.Main01717370%
 
080%
 
-
-
- - \ No newline at end of file diff --git a/docs/coverage/index.html b/docs/coverage/index.html deleted file mode 100644 index 9dd6d6f5..00000000 --- a/docs/coverage/index.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -Summary - Coverage Report - -
-

SummaryStarSponsor

- ---- - - - - - - - - - - - - - - - - - - -
Generated on:16.03.2023 - 20:32:58
Parser:OpenCoverParser
Assemblies:1
Classes:5
Files:5
Covered lines:70
Uncovered lines:82
Coverable lines:152
Total lines:342
Line coverage:46% (70 of 152)
Covered branches:55
Total branches:79
Branch coverage:69.6% (55 of 79)
Covered methods:16
Total methods:36
Method coverage:44.4% (16 of 36)
-

Risk Hotspots

- - -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AssemblyClassMethodCyclomatic complexity NPath complexity Crap Score
ImageProcessingImageProcessing.Mainmain(...)51630
ImageProcessingArgumentsArgu.IArgParserTemplate.get_Usage()4420
ImageProcessingImageArrayProcessingarrayOfImagesProcessing(...)4820
ImageProcessingImageArrayProcessingInvoke(...)4020
-
-

Coverage

- - ------------- - - - - - - - - - -
NameCoveredUncoveredCoverableTotalLine coverageCoveredTotalBranch coverage
ImageProcessing708215234246%
  
557969.6%
  
Agents03939590%
 
040%
 
Arguments85133761.5%
  
71163.6%
  
CpuImageProcessing6276916789.8%
  
485096%
  
ImageArrayProcessing01414420%
 
060%
 
ImageProcessing.Main01717370%
 
080%
 
-
-
- - \ No newline at end of file diff --git a/docs/coverage/main.js b/docs/coverage/main.js deleted file mode 100644 index 751e2d01..00000000 --- a/docs/coverage/main.js +++ /dev/null @@ -1,313 +0,0 @@ -/* Chartist.js 0.11.0 - * Copyright © 2017 Gion Kunz - * Free to use under either the WTFPL license or the MIT license. - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT - */ - -!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { - var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { - "use strict"; function d(a) { - var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { - var i = c.serialMap(b.normalized.series, function () { - return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) - }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") - } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) - } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) - }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a -}); - -var i, l, selectedLine = null; - -/* Navigate to hash without browser history entry */ -var navigateToHash = function () { - if (window.history !== undefined && window.history.replaceState !== undefined) { - window.history.replaceState(undefined, undefined, this.getAttribute("href")); - } -}; - -var hashLinks = document.getElementsByClassName('navigatetohash'); -for (i = 0, l = hashLinks.length; i < l; i++) { - hashLinks[i].addEventListener('click', navigateToHash); -} - -/* Switch test method */ -var switchTestMethod = function () { - var method = this.getAttribute("value"); - console.log("Selected test method: " + method); - - var lines, i, l, coverageData, lineAnalysis, cells; - - lines = document.querySelectorAll('.lineAnalysis tr'); - - for (i = 1, l = lines.length; i < l; i++) { - coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); - lineAnalysis = coverageData[method]; - cells = lines[i].querySelectorAll('td'); - if (lineAnalysis === undefined) { - lineAnalysis = coverageData.AllTestMethods; - if (lineAnalysis.LVS !== 'gray') { - cells[0].setAttribute('class', 'red'); - cells[1].innerText = cells[1].textContent = '0'; - cells[4].setAttribute('class', 'lightred'); - } - } else { - cells[0].setAttribute('class', lineAnalysis.LVS); - cells[1].innerText = cells[1].textContent = lineAnalysis.VC; - cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); - } - } -}; - -var testMethods = document.getElementsByClassName('switchtestmethod'); -for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].addEventListener('change', switchTestMethod); -} - -/* Highlight test method by line */ -var toggleLine = function () { - if (selectedLine === this) { - selectedLine = null; - } else { - selectedLine = null; - unhighlightTestMethods(); - highlightTestMethods.call(this); - selectedLine = this; - } - -}; -var highlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var lineAnalysis; - var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); - var testMethods = document.getElementsByClassName('testmethod'); - - for (i = 0, l = testMethods.length; i < l; i++) { - lineAnalysis = coverageData[testMethods[i].id]; - if (lineAnalysis === undefined) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } else { - testMethods[i].className += ' light' + lineAnalysis.LVS; - } - } -}; -var unhighlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var testMethods = document.getElementsByClassName('testmethod'); - for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } -}; -var coverableLines = document.getElementsByClassName('coverableline'); -for (i = 0, l = coverableLines.length; i < l; i++) { - coverableLines[i].addEventListener('click', toggleLine); - coverableLines[i].addEventListener('mouseenter', highlightTestMethods); - coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); -} - -/* History charts */ -var renderChart = function (chart) { - // Remove current children (e.g. PNG placeholder) - while (chart.firstChild) { - chart.firstChild.remove(); - } - - var chartData = window[chart.getAttribute('data-data')]; - var options = { - axisY: { - type: undefined, - onlyInteger: true - }, - lineSmooth: false, - low: 0, - high: 100, - scaleMinSpace: 20, - onlyInteger: true, - fullWidth: true - }; - var lineChart = new Chartist.Line(chart, { - labels: [], - series: chartData.series - }, options); - - /* Zoom */ - var zoomButtonDiv = document.createElement("div"); - zoomButtonDiv.className = "toggleZoom"; - var zoomButtonLink = document.createElement("a"); - zoomButtonLink.setAttribute("href", ""); - var zoomButtonText = document.createElement("i"); - zoomButtonText.className = "icon-search-plus"; - - zoomButtonLink.appendChild(zoomButtonText); - zoomButtonDiv.appendChild(zoomButtonLink); - - chart.appendChild(zoomButtonDiv); - - zoomButtonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - if (options.axisY.type === undefined) { - options.axisY.type = Chartist.AutoScaleAxis; - zoomButtonText.className = "icon-search-minus"; - } else { - options.axisY.type = undefined; - zoomButtonText.className = "icon-search-plus"; - } - - lineChart.update(null, options); - }); - - var tooltip = document.createElement("div"); - tooltip.className = "tooltip"; - - chart.appendChild(tooltip); - - /* Tooltips */ - var showToolTip = function () { - var point = this; - var index = [].slice.call(chart.getElementsByClassName('ct-point')).indexOf(point); - - tooltip.innerHTML = chartData.tooltips[index % chartData.tooltips.length]; - tooltip.style.display = 'block'; - }; - - var moveToolTip = function (event) { - var box = chart.getBoundingClientRect(); - var left = event.pageX - box.left - window.pageXOffset; - var top = event.pageY - box.top - window.pageYOffset; - - left = left + 20; - top = top - tooltip.offsetHeight / 2; - - if (left + tooltip.offsetWidth > box.width) { - left -= tooltip.offsetWidth + 40; - } - - if (top < 0) { - top = 0; - } - - if (top + tooltip.offsetHeight > box.height) { - top = box.height - tooltip.offsetHeight; - } - - tooltip.style.left = left + 'px'; - tooltip.style.top = top + 'px'; - }; - - var hideToolTip = function () { - tooltip.style.display = 'none'; - }; - chart.addEventListener('mousemove', moveToolTip); - - lineChart.on('created', function () { - var chartPoints = chart.getElementsByClassName('ct-point'); - for (i = 0, l = chartPoints.length; i < l; i++) { - chartPoints[i].addEventListener('mousemove', showToolTip); - chartPoints[i].addEventListener('mouseout', hideToolTip); - } - }); -}; - -var charts = document.getElementsByClassName('historychart'); -for (i = 0, l = charts.length; i < l; i++) { - renderChart(charts[i]); -} - -var assemblies = [ - { - "name": "ImageProcessing", - "classes": [ - { "name": "Agents", "rp": "ImageProcessing_Agents.html", "cl": 0, "ucl": 39, "cal": 39, "tl": 59, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 4, "lch": [], "bch": [], "hc": [] }, - { "name": "Arguments", "rp": "ImageProcessing_Arguments.html", "cl": 8, "ucl": 5, "cal": 13, "tl": 37, "ct": "LineCoverage", "mc": "-", "cb": 7, "tb": 11, "lch": [], "bch": [], "hc": [] }, - { "name": "CpuImageProcessing", "rp": "ImageProcessing_CpuImageProcessing.html", "cl": 62, "ucl": 7, "cal": 69, "tl": 167, "ct": "LineCoverage", "mc": "-", "cb": 48, "tb": 50, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageArrayProcessing", "rp": "ImageProcessing_ImageArrayProcessing.html", "cl": 0, "ucl": 14, "cal": 14, "tl": 42, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 6, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.Main", "rp": "ImageProcessing_Main.html", "cl": 0, "ucl": 17, "cal": 17, "tl": 37, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 8, "lch": [], "bch": [], "hc": [] }, - ]}, -]; - -var historicCoverageExecutionTimes = []; - -var riskHotspotMetrics = [ - { "name": "Cyclomatic complexity", "explanationUrl": "https://en.wikipedia.org/wiki/Cyclomatic_complexity" }, - { "name": "NPath complexity", "explanationUrl": "https://modess.io/npath-complexity-cyclomatic-complexity-explained" }, - { "name": "Crap Score", "explanationUrl": "https://googletesting.blogspot.de/2011/02/this-code-is-crap.html" }, -]; - -var riskHotspots = [ - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Main", "reportPath": "ImageProcessing_Main.html", "methodName": "System.Int32 ImageProcessing.Main::main(System.String[])", "methodShortName": "main(...)", "fileIndex": 0, "line": 12, - "metrics": [ - { "value": 5, "exceeded": false }, - { "value": 16, "exceeded": false }, - { "value": 30, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "Arguments", "reportPath": "ImageProcessing_Arguments.html", "methodName": "System.String Arguments/CliArguments::Argu.IArgParserTemplate.get_Usage()", "methodShortName": "Argu.IArgParserTemplate.get_Usage()", "fileIndex": 0, "line": 33, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 4, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageArrayProcessing", "reportPath": "ImageProcessing_ImageArrayProcessing.html", "methodName": "System.Void ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2,Agents/AgentStatus)", "methodShortName": "arrayOfImagesProcessing(...)", "fileIndex": 0, "line": 27, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 8, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageArrayProcessing", "reportPath": "ImageProcessing_ImageArrayProcessing.html", "methodName": "System.Boolean ImageArrayProcessing/filtered@22::Invoke(System.String)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 22, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 0, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, -]; - -var branchCoverageAvailable = true; - - -var translations = { -'top': 'Top:', -'all': 'All', -'assembly': 'Assembly', -'class': 'Class', -'method': 'Method', -'lineCoverage': 'LineCoverage', -'noGrouping': 'No grouping', -'byAssembly': 'By assembly', -'byNamespace': 'By namespace, Level:', -'all': 'All', -'collapseAll': 'Collapse all', -'expandAll': 'Expand all', -'grouping': 'Grouping:', -'filter': 'Filter:', -'name': 'Name', -'covered': 'Covered', -'uncovered': 'Uncovered', -'coverable': 'Coverable', -'total': 'Total', -'coverage': 'Line coverage', -'branchCoverage': 'Branch coverage', -'history': 'Coverage History', -'compareHistory': 'Compare with:', -'date': 'Date', -'allChanges': 'All changes', -'lineCoverageIncreaseOnly': 'Line coverage: Increase only', -'lineCoverageDecreaseOnly': 'Line coverage: Decrease only', -'branchCoverageIncreaseOnly': 'Branch coverage: Increase only', -'branchCoverageDecreaseOnly': 'Branch coverage: Decrease only' -}; - - -(()=>{"use strict";var e,_={},p={};function n(e){var a=p[e];if(void 0!==a)return a.exports;var r=p[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,u,l)=>{if(!r){var c=1/0;for(f=0;f=l)&&Object.keys(n.O).every(d=>n.O[d](r[t]))?r.splice(t--,1):(v=!1,l0&&e[f-1][2]>l;f--)e[f]=e[f-1];e[f]=[r,u,l]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={666:0};n.O.j=u=>0===e[u];var a=(u,l)=>{var t,o,[f,c,v]=l,s=0;for(t in c)n.o(c,t)&&(n.m[t]=c[t]);if(v)var b=v(n);for(u&&u(l);s{!function(e){const n=e.performance;function i(I){n&&n.mark&&n.mark(I)}function r(I,p){n&&n.measure&&n.measure(I,p)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function u(I){return c+I}const f=!0===e[u("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let _=(()=>{class I{constructor(t,o){this._parent=t,this._name=o?o.name||"unnamed":"",this._properties=o&&o.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,o)}static assertZonePatched(){if(e.Promise!==J.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=I.current;for(;t.parent;)t=t.parent;return t}static get current(){return G.zone}static get currentTask(){return te}static __load_patch(t,o,g=!1){if(J.hasOwnProperty(t)){if(!g&&f)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const P="Zone:"+t;i(P),J[t]=o(e,I,le),r(P,P)}}get parent(){return this._parent}get name(){return this._name}get(t){const o=this.getZoneWith(t);if(o)return o._properties[t]}getZoneWith(t){let o=this;for(;o;){if(o._properties.hasOwnProperty(t))return o;o=o._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,o){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const g=this._zoneDelegate.intercept(this,t,o),P=this;return function(){return P.runGuarded(g,this,arguments,o)}}run(t,o,g,P){G={parent:G,zone:this};try{return this._zoneDelegate.invoke(this,t,o,g,P)}finally{G=G.parent}}runGuarded(t,o=null,g,P){G={parent:G,zone:this};try{try{return this._zoneDelegate.invoke(this,t,o,g,P)}catch(K){if(this._zoneDelegate.handleError(this,K))throw K}}finally{G=G.parent}}runTask(t,o,g){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");if(t.state===j&&(t.type===R||t.type===M))return;const P=t.state!=X;P&&t._transitionTo(X,O),t.runCount++;const K=te;te=t,G={parent:G,zone:this};try{t.type==M&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,o,g)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==j&&t.state!==Y&&(t.type==R||t.data&&t.data.isPeriodic?P&&t._transitionTo(O,X):(t.runCount=0,this._updateTaskCount(t,-1),P&&t._transitionTo(j,X,j))),G=G.parent,te=K}}scheduleTask(t){if(t.zone&&t.zone!==this){let g=this;for(;g;){if(g===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);g=g.parent}}t._transitionTo(q,j);const o=[];t._zoneDelegates=o,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(g){throw t._transitionTo(Y,q,j),this._zoneDelegate.handleError(this,g),g}return t._zoneDelegates===o&&this._updateTaskCount(t,1),t.state==q&&t._transitionTo(O,q),t}scheduleMicroTask(t,o,g,P){return this.scheduleTask(new m(v,t,o,g,P,void 0))}scheduleMacroTask(t,o,g,P,K){return this.scheduleTask(new m(M,t,o,g,P,K))}scheduleEventTask(t,o,g,P,K){return this.scheduleTask(new m(R,t,o,g,P,K))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");t._transitionTo(A,O,X);try{this._zoneDelegate.cancelTask(this,t)}catch(o){throw t._transitionTo(Y,A),this._zoneDelegate.handleError(this,o),o}return this._updateTaskCount(t,-1),t._transitionTo(j,A),t.runCount=0,t}_updateTaskCount(t,o){const g=t._zoneDelegates;-1==o&&(t._zoneDelegates=null);for(let P=0;PI.hasTask(t,o),onScheduleTask:(I,p,t,o)=>I.scheduleTask(t,o),onInvokeTask:(I,p,t,o,g,P)=>I.invokeTask(t,o,g,P),onCancelTask:(I,p,t,o)=>I.cancelTask(t,o)};class T{constructor(p,t,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=p,this._parentDelegate=t,this._forkZS=o&&(o&&o.onFork?o:t._forkZS),this._forkDlgt=o&&(o.onFork?t:t._forkDlgt),this._forkCurrZone=o&&(o.onFork?this.zone:t._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:t._interceptZS),this._interceptDlgt=o&&(o.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:t._invokeZS),this._invokeDlgt=o&&(o.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:t._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:t._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:t._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:t._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const g=o&&o.onHasTask;(g||t&&t._hasTaskZS)&&(this._hasTaskZS=g?o:y,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=p,o.onScheduleTask||(this._scheduleTaskZS=y,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),o.onInvokeTask||(this._invokeTaskZS=y,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),o.onCancelTask||(this._cancelTaskZS=y,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(p,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,p,t):new _(p,t)}intercept(p,t,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,p,t,o):t}invoke(p,t,o,g,P){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,p,t,o,g,P):t.apply(o,g)}handleError(p,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,p,t)}scheduleTask(p,t){let o=t;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,p,t),o||(o=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=v)throw new Error("Task is missing scheduleFn.");d(t)}return o}invokeTask(p,t,o,g){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,p,t,o,g):t.callback.apply(o,g)}cancelTask(p,t){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,p,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");o=t.cancelFn(t)}return o}hasTask(p,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,p,t)}catch(o){this.handleError(p,o)}}_updateTaskCount(p,t){const o=this._taskCounts,g=o[p],P=o[p]=g+t;if(P<0)throw new Error("More tasks executed then were scheduled.");0!=g&&0!=P||this.hasTask(this.zone,{microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:p})}}class m{constructor(p,t,o,g,P,K){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=p,this.source=t,this.data=g,this.scheduleFn=P,this.cancelFn=K,!o)throw new Error("callback is not defined");this.callback=o;const l=this;this.invoke=p===R&&g&&g.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(p,t,o){p||(p=this),re++;try{return p.runCount++,p.zone.runTask(p,t,o)}finally{1==re&&L(),re--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(j,q)}_transitionTo(p,t,o){if(this._state!==t&&this._state!==o)throw new Error(`${this.type} '${this.source}': can not transition to '${p}', expecting state '${t}'${o?" or '"+o+"'":""}, was '${this._state}'.`);this._state=p,p==j&&(this._zoneDelegates=null)}toString(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const S=u("setTimeout"),D=u("Promise"),Z=u("then");let E,B=[],V=!1;function d(I){if(0===re&&0===B.length)if(E||e[D]&&(E=e[D].resolve(0)),E){let p=E[Z];p||(p=E.then),p.call(E,L)}else e[S](L,0);I&&B.push(I)}function L(){if(!V){for(V=!0;B.length;){const I=B;B=[];for(let p=0;pG,onUnhandledError:F,microtaskDrainDone:F,scheduleMicroTask:d,showUncaughtError:()=>!_[u("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:F,patchMethod:()=>F,bindArguments:()=>[],patchThen:()=>F,patchMacroTask:()=>F,patchEventPrototype:()=>F,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>F,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>F,wrapWithCurrentZone:()=>F,filterProperties:()=>[],attachOriginToPatched:()=>F,_redefineProperty:()=>F,patchCallbacks:()=>F};let G={parent:null,zone:new _(null,null)},te=null,re=0;function F(){}r("Zone","Zone"),e.Zone=_}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global);const ue=Object.getOwnPropertyDescriptor,he=Object.defineProperty,de=Object.getPrototypeOf,Be=Object.create,ut=Array.prototype.slice,Se="addEventListener",Oe="removeEventListener",Ze=Zone.__symbol__(Se),Ie=Zone.__symbol__(Oe),se="true",ie="false",ke=Zone.__symbol__("");function Le(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,r,c){return Zone.current.scheduleMacroTask(e,n,i,r,c)}const x=Zone.__symbol__,Pe="undefined"!=typeof window,pe=Pe?window:void 0,$=Pe&&pe||"object"==typeof self&&self||global,ht=[null];function Ae(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Le(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}const Ue="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,Re=!("nw"in $)&&void 0!==$.process&&"[object process]"==={}.toString.call($.process),je=!Re&&!Ue&&!(!Pe||!pe.HTMLElement),We=void 0!==$.process&&"[object process]"==={}.toString.call($.process)&&!Ue&&!(!Pe||!pe.HTMLElement),Ce={},qe=function(e){if(!(e=e||$.event))return;let n=Ce[e.type];n||(n=Ce[e.type]=x("ON_PROPERTY"+e.type));const i=this||e.target||$,r=i[n];let c;if(je&&i===pe&&"error"===e.type){const u=e;c=r&&r.call(this,u.message,u.filename,u.lineno,u.colno,u.error),!0===c&&e.preventDefault()}else c=r&&r.apply(this,arguments),null!=c&&!c&&e.preventDefault();return c};function Xe(e,n,i){let r=ue(e,n);if(!r&&i&&ue(i,n)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;const c=x("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete r.writable,delete r.value;const u=r.get,f=r.set,_=n.substr(2);let y=Ce[_];y||(y=Ce[_]=x("ON_PROPERTY"+_)),r.set=function(T){let m=this;!m&&e===$&&(m=$),m&&(m[y]&&m.removeEventListener(_,qe),f&&f.apply(m,ht),"function"==typeof T?(m[y]=T,m.addEventListener(_,qe,!1)):m[y]=null)},r.get=function(){let T=this;if(!T&&e===$&&(T=$),!T)return null;const m=T[y];if(m)return m;if(u){let S=u&&u.call(this);if(S)return r.set.call(this,S),"function"==typeof T.removeAttribute&&T.removeAttribute(n),S}return null},he(e,n,r),e[c]=!0}function Ye(e,n,i){if(n)for(let r=0;rfunction(f,_){const y=i(f,_);return y.cbIdx>=0&&"function"==typeof _[y.cbIdx]?Me(y.name,_[y.cbIdx],y,c):u.apply(f,_)})}function ae(e,n){e[x("OriginalDelegate")]=n}let $e=!1,He=!1;function mt(){if($e)return He;$e=!0;try{const e=pe.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(He=!0)}catch(e){}return He}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const r=Object.getOwnPropertyDescriptor,c=Object.defineProperty,f=i.symbol,_=[],y=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),m=f("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const s=l&&l.rejection;s?console.error("Unhandled Promise rejection:",s instanceof Error?s.message:s,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",s,s instanceof Error?s.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;_.length;){const l=_.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(s){Z(s)}}};const D=f("unhandledPromiseRejectionHandler");function Z(l){i.onUnhandledError(l);try{const s=n[D];"function"==typeof s&&s.call(this,l)}catch(s){}}function B(l){return l&&l.then}function V(l){return l}function E(l){return t.reject(l)}const d=f("state"),L=f("value"),z=f("finally"),j=f("parentPromiseValue"),q=f("parentPromiseState"),X=null,A=!0,Y=!1;function M(l,s){return a=>{try{G(l,s,a)}catch(h){G(l,!1,h)}}}const le=f("currentTaskTrace");function G(l,s,a){const h=function(){let l=!1;return function(a){return function(){l||(l=!0,a.apply(null,arguments))}}}();if(l===a)throw new TypeError("Promise resolved with itself");if(l[d]===X){let w=null;try{("object"==typeof a||"function"==typeof a)&&(w=a&&a.then)}catch(C){return h(()=>{G(l,!1,C)})(),l}if(s!==Y&&a instanceof t&&a.hasOwnProperty(d)&&a.hasOwnProperty(L)&&a[d]!==X)re(a),G(l,a[d],a[L]);else if(s!==Y&&"function"==typeof w)try{w.call(a,h(M(l,s)),h(M(l,!1)))}catch(C){h(()=>{G(l,!1,C)})()}else{l[d]=s;const C=l[L];if(l[L]=a,l[z]===z&&s===A&&(l[d]=l[q],l[L]=l[j]),s===Y&&a instanceof Error){const k=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;k&&c(a,le,{configurable:!0,enumerable:!1,writable:!0,value:k})}for(let k=0;k{try{const b=l[L],N=!!a&&z===a[z];N&&(a[j]=b,a[q]=C);const H=s.run(k,void 0,N&&k!==E&&k!==V?[]:[b]);G(a,!0,H)}catch(b){G(a,!1,b)}},a)}const p=function(){};class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(s){return G(new this(null),A,s)}static reject(s){return G(new this(null),Y,s)}static race(s){let a,h,w=new this((b,N)=>{a=b,h=N});function C(b){a(b)}function k(b){h(b)}for(let b of s)B(b)||(b=this.resolve(b)),b.then(C,k);return w}static all(s){return t.allWithCallback(s)}static allSettled(s){return(this&&this.prototype instanceof t?this:t).allWithCallback(s,{thenCallback:h=>({status:"fulfilled",value:h}),errorCallback:h=>({status:"rejected",reason:h})})}static allWithCallback(s,a){let h,w,C=new this((H,U)=>{h=H,w=U}),k=2,b=0;const N=[];for(let H of s){B(H)||(H=this.resolve(H));const U=b;try{H.then(Q=>{N[U]=a?a.thenCallback(Q):Q,k--,0===k&&h(N)},Q=>{a?(N[U]=a.errorCallback(Q),k--,0===k&&h(N)):w(Q)})}catch(Q){w(Q)}k++,b++}return k-=2,0===k&&h(N),C}constructor(s){const a=this;if(!(a instanceof t))throw new Error("Must be an instanceof Promise.");a[d]=X,a[L]=[];try{s&&s(M(a,A),M(a,Y))}catch(h){G(a,!1,h)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(s,a){let h=this.constructor[Symbol.species];(!h||"function"!=typeof h)&&(h=this.constructor||t);const w=new h(p),C=n.current;return this[d]==X?this[L].push(C,w,s,a):F(this,C,w,s,a),w}catch(s){return this.then(null,s)}finally(s){let a=this.constructor[Symbol.species];(!a||"function"!=typeof a)&&(a=t);const h=new a(p);h[z]=z;const w=n.current;return this[d]==X?this[L].push(w,h,s,s):F(this,w,h,s,s),h}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const o=e[T]=e.Promise;e.Promise=t;const g=f("thenPatched");function P(l){const s=l.prototype,a=r(s,"then");if(a&&(!1===a.writable||!a.configurable))return;const h=s.then;s[m]=h,l.prototype.then=function(w,C){return new t((b,N)=>{h.call(this,b,N)}).then(w,C)},l[g]=!0}return i.patchThen=P,o&&(P(o),ce(e,"fetch",l=>function(l){return function(s,a){let h=l.apply(s,a);if(h instanceof t)return h;let w=h.constructor;return w[g]||P(w),h}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=_,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=x("OriginalDelegate"),r=x("Promise"),c=x("Error"),u=function(){if("function"==typeof this){const T=this[i];if(T)return"function"==typeof T?n.call(T):Object.prototype.toString.call(T);if(this===Promise){const m=e[r];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};u[i]=n,Function.prototype.toString=u;const f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});let me=!1;if("undefined"!=typeof window)try{const e=Object.defineProperty({},"passive",{get:function(){me=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(e){me=!1}const Et={useG:!0},ee={},Ke={},Je=new RegExp("^"+ke+"(\\w+)(true|false)$"),xe=x("propagationStopped");function Qe(e,n){const i=(n?n(e):e)+ie,r=(n?n(e):e)+se,c=ke+i,u=ke+r;ee[e]={},ee[e][ie]=c,ee[e][se]=u}function Tt(e,n,i){const r=i&&i.add||Se,c=i&&i.rm||Oe,u=i&&i.listeners||"eventListeners",f=i&&i.rmAll||"removeAllListeners",_=x(r),y="."+r+":",S=function(E,d,L){if(E.isRemoved)return;const z=E.callback;"object"==typeof z&&z.handleEvent&&(E.callback=q=>z.handleEvent(q),E.originalDelegate=z),E.invoke(E,d,[L]);const j=E.options;j&&"object"==typeof j&&j.once&&d[c].call(d,L.type,E.originalDelegate?E.originalDelegate:E.callback,j)},D=function(E){if(!(E=E||e.event))return;const d=this||E.target||e,L=d[ee[E.type][ie]];if(L)if(1===L.length)S(L[0],d,E);else{const z=L.slice();for(let j=0;jfunction(c,u){c[xe]=!0,r&&r.apply(c,u)})}function yt(e,n,i,r,c){const u=Zone.__symbol__(r);if(n[u])return;const f=n[u]=n[r];n[r]=function(_,y,T){return y&&y.prototype&&c.forEach(function(m){const S=`${i}.${r}::`+m,D=y.prototype;if(D.hasOwnProperty(m)){const Z=e.ObjectGetOwnPropertyDescriptor(D,m);Z&&Z.value?(Z.value=e.wrapWithCurrentZone(Z.value,S),e._redefineProperty(y.prototype,m,Z)):D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}else D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}),f.call(n,_,y,T)},e.attachOriginToPatched(n[r],f)}const Ve=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],wt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],tt=["load"],nt=["blur","error","focus","load","resize","scroll","messageerror"],Dt=["bounce","finish","start"],rt=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],Ee=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],St=["close","error","open","message"],Ot=["error","message"],Te=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Ve,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function ot(e,n,i){if(!i||0===i.length)return n;const r=i.filter(u=>u.target===e);if(!r||0===r.length)return n;const c=r[0].ignoreProperties;return n.filter(u=>-1===c.indexOf(u))}function W(e,n,i,r){e&&Ye(e,ot(e,n,i),r)}Zone.__load_patch("util",(e,n,i)=>{i.patchOnProperties=Ye,i.patchMethod=ce,i.bindArguments=Ae,i.patchMacroTask=_t;const r=n.__symbol__("BLACK_LISTED_EVENTS"),c=n.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[r]=e[c]),e[r]&&(n[r]=n[c]=e[r]),i.patchEventPrototype=gt,i.patchEventTarget=Tt,i.isIEOrEdge=mt,i.ObjectDefineProperty=he,i.ObjectGetOwnPropertyDescriptor=ue,i.ObjectCreate=Be,i.ArraySlice=ut,i.patchClass=ve,i.wrapWithCurrentZone=Le,i.filterProperties=ot,i.attachOriginToPatched=ae,i._redefineProperty=Object.defineProperty,i.patchCallbacks=yt,i.getGlobalObjects=()=>({globalSources:Ke,zoneSymbolEventNames:ee,eventNames:Te,isBrowser:je,isMix:We,isNode:Re,TRUE_STR:se,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ke,ADD_EVENT_LISTENER_STR:Se,REMOVE_EVENT_LISTENER_STR:Oe})});const Ne=x("zoneTask");function ge(e,n,i,r){let c=null,u=null;i+=r;const f={};function _(T){const m=T.data;return m.args[0]=function(){return T.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),T}function y(T){return u.call(e,T.data.handleId)}c=ce(e,n+=r,T=>function(m,S){if("function"==typeof S[0]){const D={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?S[1]||0:void 0,args:S},Z=S[0];S[0]=function(){try{return Z.apply(this,arguments)}finally{D.isPeriodic||("number"==typeof D.handleId?delete f[D.handleId]:D.handleId&&(D.handleId[Ne]=null))}};const B=Me(n,S[0],D,_,y);if(!B)return B;const V=B.data.handleId;return"number"==typeof V?f[V]=B:V&&(V[Ne]=B),V&&V.ref&&V.unref&&"function"==typeof V.ref&&"function"==typeof V.unref&&(B.ref=V.ref.bind(V),B.unref=V.unref.bind(V)),"number"==typeof V||V?V:B}return T.apply(e,S)}),u=ce(e,i,T=>function(m,S){const D=S[0];let Z;"number"==typeof D?Z=f[D]:(Z=D&&D[Ne],Z||(Z=D)),Z&&"string"==typeof Z.type?"notScheduled"!==Z.state&&(Z.cancelFn&&Z.data.isPeriodic||0===Z.runCount)&&("number"==typeof D?delete f[D]:D&&(D[Ne]=null),Z.zone.cancelTask(Z)):T.apply(e,S)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",r=>function(c,u){n.current.scheduleMicroTask("queueMicrotask",u[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";ge(e,n,i,"Timeout"),ge(e,n,i,"Interval"),ge(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{ge(e,"request","cancel","AnimationFrame"),ge(e,"mozRequest","mozCancel","AnimationFrame"),ge(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let r=0;rfunction(y,T){return n.current.run(u,e,T,_)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function(e,n){n.patchEventPrototype(e,n)})(e,i),function(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:r,TRUE_STR:c,FALSE_STR:u,ZONE_SYMBOL_PREFIX:f}=n.getGlobalObjects();for(let y=0;y{ve("MutationObserver"),ve("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ve("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ve("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function(e,n){if(Re&&!We||Zone[e.symbol("patchEvents")])return;const i="undefined"!=typeof WebSocket,r=n.__Zone_ignore_on_properties;if(je){const f=window,_=function(){try{const e=pe.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch(e){}return!1}()?[{target:f,ignoreProperties:["error"]}]:[];W(f,Te.concat(["messageerror"]),r&&r.concat(_),de(f)),W(Document.prototype,Te,r),void 0!==f.SVGElement&&W(f.SVGElement.prototype,Te,r),W(Element.prototype,Te,r),W(HTMLElement.prototype,Te,r),W(HTMLMediaElement.prototype,wt,r),W(HTMLFrameSetElement.prototype,Ve.concat(nt),r),W(HTMLBodyElement.prototype,Ve.concat(nt),r),W(HTMLFrameElement.prototype,tt,r),W(HTMLIFrameElement.prototype,tt,r);const y=f.HTMLMarqueeElement;y&&W(y.prototype,Dt,r);const T=f.Worker;T&&W(T.prototype,Ot,r)}const c=n.XMLHttpRequest;c&&W(c.prototype,rt,r);const u=n.XMLHttpRequestEventTarget;u&&W(u&&u.prototype,rt,r),"undefined"!=typeof IDBIndex&&(W(IDBIndex.prototype,Ee,r),W(IDBRequest.prototype,Ee,r),W(IDBOpenDBRequest.prototype,Ee,r),W(IDBDatabase.prototype,Ee,r),W(IDBTransaction.prototype,Ee,r),W(IDBCursor.prototype,Ee,r)),i&&W(WebSocket.prototype,St,r)}(i,e)}),Zone.__load_patch("customElements",(e,n,i)=>{!function(e,n){const{isBrowser:i,isMix:r}=n.getGlobalObjects();(i||r)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function(T){const m=T.XMLHttpRequest;if(!m)return;const S=m.prototype;let Z=S[Ze],B=S[Ie];if(!Z){const v=T.XMLHttpRequestEventTarget;if(v){const M=v.prototype;Z=M[Ze],B=M[Ie]}}const V="readystatechange",E="scheduled";function d(v){const M=v.data,R=M.target;R[u]=!1,R[_]=!1;const J=R[c];Z||(Z=R[Ze],B=R[Ie]),J&&B.call(R,V,J);const le=R[c]=()=>{if(R.readyState===R.DONE)if(!M.aborted&&R[u]&&v.state===E){const te=R[n.__symbol__("loadfalse")];if(0!==R.status&&te&&te.length>0){const re=v.invoke;v.invoke=function(){const F=R[n.__symbol__("loadfalse")];for(let I=0;Ifunction(v,M){return v[r]=0==M[2],v[f]=M[1],j.apply(v,M)}),O=x("fetchTaskAborting"),X=x("fetchTaskScheduling"),A=ce(S,"send",()=>function(v,M){if(!0===n.current[X]||v[r])return A.apply(v,M);{const R={target:v,url:v[f],isPeriodic:!1,args:M,aborted:!1},J=Me("XMLHttpRequest.send",L,R,d,z);v&&!0===v[_]&&!R.aborted&&J.state===E&&J.invoke()}}),Y=ce(S,"abort",()=>function(v,M){const R=function(v){return v[i]}(v);if(R&&"string"==typeof R.type){if(null==R.cancelFn||R.data&&R.data.aborted)return;R.zone.cancelTask(R)}else if(!0===n.current[O])return Y.apply(v,M)})}(e);const i=x("xhrTask"),r=x("xhrSync"),c=x("xhrListener"),u=x("xhrScheduled"),f=x("xhrURL"),_=x("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function(e,n){const i=e.constructor.name;for(let r=0;r{const y=function(){return _.apply(this,Ae(arguments,i+"."+c))};return ae(y,_),y})(u)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(r){return function(c){et(e,r).forEach(f=>{const _=e.PromiseRejectionEvent;if(_){const y=new _(r,{promise:c.promise,reason:c.rejection});f.invoke(y)}})}}e.PromiseRejectionEvent&&(n[x("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[x("rejectionHandledHandler")]=i("rejectionhandled"))})},443:(we,ue,he)=>{he(273)}},we=>{we(we.s=443)}]); - -(self.webpackChunkcoverage_app=self.webpackChunkcoverage_app||[]).push([[179],{255:wo=>{function Mn(Io){return Promise.resolve().then(()=>{var Tn=new Error("Cannot find module '"+Io+"'");throw Tn.code="MODULE_NOT_FOUND",Tn})}Mn.keys=()=>[],Mn.resolve=Mn,Mn.id=255,wo.exports=Mn},15:(wo,Mn,Io)=>{"use strict";function Tn(e){return"function"==typeof e}let ja=!1;const Rt={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){if(e){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else ja&&console.log("RxJS: Back to a better error behavior. Thank you. <3");ja=e},get useDeprecatedSynchronousErrorHandling(){return ja}};function _r(e){setTimeout(()=>{throw e},0)}const $i={closed:!0,next(e){},error(e){if(Rt.useDeprecatedSynchronousErrorHandling)throw e;_r(e)},complete(){}},$a=Array.isArray||(e=>e&&"number"==typeof e.length);function Ua(e){return null!==e&&"object"==typeof e}const Ui=(()=>{function e(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((n,r)=>`${r+1}) ${n.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return e.prototype=Object.create(Error.prototype),e})();class Ee{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}unsubscribe(){let t;if(this.closed)return;let{_parentOrParents:n,_ctorUnsubscribe:r,_unsubscribe:o,_subscriptions:i}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof Ee)n.remove(this);else if(null!==n)for(let s=0;st.concat(n instanceof Ui?n.errors:n),[])}Ee.EMPTY=((e=new Ee).closed=!0,e);const Gi="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();class lt extends Ee{constructor(t,n,r){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=$i;break;case 1:if(!t){this.destination=$i;break}if("object"==typeof t){t instanceof lt?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new Gd(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new Gd(this,t,n,r)}}[Gi](){return this}static create(t,n,r){const o=new lt(t,n,r);return o.syncErrorThrowable=!1,o}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class Gd extends lt{constructor(t,n,r,o){super(),this._parentSubscriber=t;let i,s=this;Tn(n)?i=n:n&&(i=n.next,r=n.error,o=n.complete,n!==$i&&(s=Object.create(n),Tn(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=i,this._error=r,this._complete=o}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:n}=this;Rt.useDeprecatedSynchronousErrorHandling&&n.syncErrorThrowable?this.__tryOrSetError(n,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:n}=this,{useDeprecatedSynchronousErrorHandling:r}=Rt;if(this._error)r&&n.syncErrorThrowable?(this.__tryOrSetError(n,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(n.syncErrorThrowable)r?(n.syncErrorValue=t,n.syncErrorThrown=!0):_r(t),this.unsubscribe();else{if(this.unsubscribe(),r)throw t;_r(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const n=()=>this._complete.call(this._context);Rt.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,n){try{t.call(this._context,n)}catch(r){if(this.unsubscribe(),Rt.useDeprecatedSynchronousErrorHandling)throw r;_r(r)}}__tryOrSetError(t,n,r){if(!Rt.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{n.call(this._context,r)}catch(o){return Rt.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=o,t.syncErrorThrown=!0,!0):(_r(o),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}const Mo="function"==typeof Symbol&&Symbol.observable||"@@observable";function zd(e){return e}let qe=(()=>{class e{constructor(n){this._isScalar=!1,n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const{operator:i}=this,s=function(e,t,n){if(e){if(e instanceof lt)return e;if(e[Gi])return e[Gi]()}return e||t||n?new lt(e,t,n):new lt($i)}(n,r,o);if(s.add(i?i.call(s,this.source):this.source||Rt.useDeprecatedSynchronousErrorHandling&&!s.syncErrorThrowable?this._subscribe(s):this._trySubscribe(s)),Rt.useDeprecatedSynchronousErrorHandling&&s.syncErrorThrowable&&(s.syncErrorThrowable=!1,s.syncErrorThrown))throw s.syncErrorValue;return s}_trySubscribe(n){try{return this._subscribe(n)}catch(r){Rt.useDeprecatedSynchronousErrorHandling&&(n.syncErrorThrown=!0,n.syncErrorValue=r),function(e){for(;e;){const{closed:t,destination:n,isStopped:r}=e;if(t||r)return!1;e=n&&n instanceof lt?n:null}return!0}(n)?n.error(r):console.warn(r)}}forEach(n,r){return new(r=qd(r))((o,i)=>{let s;s=this.subscribe(a=>{try{n(a)}catch(l){i(l),s&&s.unsubscribe()}},i,o)})}_subscribe(n){const{source:r}=this;return r&&r.subscribe(n)}[Mo](){return this}pipe(...n){return 0===n.length?this:function(e){return 0===e.length?zd:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}(n)(this)}toPromise(n){return new(n=qd(n))((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function qd(e){if(e||(e=Rt.Promise||Promise),!e)throw new Error("no Promise impl found");return e}const To=(()=>{function e(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return e.prototype=Object.create(Error.prototype),e})();class pv extends Ee{constructor(t,n){super(),this.subject=t,this.subscriber=n,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,n=t.observers;if(this.subject=null,!n||0===n.length||t.isStopped||t.closed)return;const r=n.indexOf(this.subscriber);-1!==r&&n.splice(r,1)}}class Qd extends lt{constructor(t){super(t),this.destination=t}}let Ga=(()=>{class e extends qe{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[Gi](){return new Qd(this)}lift(n){const r=new Kd(this,this);return r.operator=n,r}next(n){if(this.closed)throw new To;if(!this.isStopped){const{observers:r}=this,o=r.length,i=r.slice();for(let s=0;snew Kd(t,n),e})();class Kd extends Ga{constructor(t,n){super(),this.destination=t,this.source=n}next(t){const{destination:n}=this;n&&n.next&&n.next(t)}error(t){const{destination:n}=this;n&&n.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:n}=this;return n?this.source.subscribe(t):Ee.EMPTY}}function za(e,t){return function(r){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return r.lift(new mv(e,t))}}class mv{constructor(t,n){this.project=t,this.thisArg=n}call(t,n){return n.subscribe(new _v(t,this.project,this.thisArg))}}class _v extends lt{constructor(t,n,r){super(t),this.project=n,this.count=0,this.thisArg=r||this}_next(t){let n;try{n=this.project.call(this.thisArg,t,this.count++)}catch(r){return void this.destination.error(r)}this.destination.next(n)}}const Yd=e=>t=>{for(let n=0,r=e.length;ne&&"number"==typeof e.length&&"function"!=typeof e;function Jd(e){return!!e&&"function"!=typeof e.subscribe&&"function"==typeof e.then}const Xd=e=>{if(e&&"function"==typeof e[Mo])return(e=>t=>{const n=e[Mo]();if("function"!=typeof n.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return n.subscribe(t)})(e);if(Zd(e))return Yd(e);if(Jd(e))return(e=>t=>(e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,_r),t))(e);if(e&&"function"==typeof e[zi])return(e=>t=>{const n=e[zi]();for(;;){let r;try{r=n.next()}catch(o){return t.error(o),t}if(r.done){t.complete();break}if(t.next(r.value),t.closed)break}return"function"==typeof n.return&&t.add(()=>{n.return&&n.return()}),t})(e);{const n=`You provided ${Ua(e)?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(n)}};function ef(e,t){return new qe(n=>{const r=new Ee;let o=0;return r.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||r.add(this.schedule())):n.complete()})),r})}function Wa(e,t){return t?function(e,t){if(null!=e){if(function(e){return e&&"function"==typeof e[Mo]}(e))return function(e,t){return new qe(n=>{const r=new Ee;return r.add(t.schedule(()=>{const o=e[Mo]();r.add(o.subscribe({next(i){r.add(t.schedule(()=>n.next(i)))},error(i){r.add(t.schedule(()=>n.error(i)))},complete(){r.add(t.schedule(()=>n.complete()))}}))})),r})}(e,t);if(Jd(e))return function(e,t){return new qe(n=>{const r=new Ee;return r.add(t.schedule(()=>e.then(o=>{r.add(t.schedule(()=>{n.next(o),r.add(t.schedule(()=>n.complete()))}))},o=>{r.add(t.schedule(()=>n.error(o)))}))),r})}(e,t);if(Zd(e))return ef(e,t);if(function(e){return e&&"function"==typeof e[zi]}(e)||"string"==typeof e)return function(e,t){if(!e)throw new Error("Iterable cannot be null");return new qe(n=>{const r=new Ee;let o;return r.add(()=>{o&&"function"==typeof o.return&&o.return()}),r.add(t.schedule(()=>{o=e[zi](),r.add(t.schedule(function(){if(n.closed)return;let i,s;try{const a=o.next();i=a.value,s=a.done}catch(a){return void n.error(a)}s?n.complete():(n.next(i),this.schedule())}))})),r})}(e,t)}throw new TypeError((null!==e&&typeof e||e)+" is not observable")}(e,t):e instanceof qe?e:new qe(Xd(e))}class Av extends lt{constructor(t){super(),this.parent=t}_next(t){this.parent.notifyNext(t)}_error(t){this.parent.notifyError(t),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class Sv extends lt{notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.destination.complete()}}function tf(e,t,n=Number.POSITIVE_INFINITY){return"function"==typeof t?r=>r.pipe(tf((o,i)=>Wa(e(o,i)).pipe(za((s,a)=>t(o,s,i,a))),n)):("number"==typeof t&&(n=t),r=>r.lift(new Nv(e,n)))}class Nv{constructor(t,n=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=n}call(t,n){return n.subscribe(new Rv(t,this.project,this.concurrent))}}class Rv extends Sv{constructor(t,n,r=Number.POSITIVE_INFINITY){super(t),this.project=n,this.concurrent=r,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}function Fv(e=Number.POSITIVE_INFINITY){return tf(zd,e)}function nf(){return function(t){return t.lift(new Vv(t))}}class Vv{constructor(t){this.connectable=t}call(t,n){const{connectable:r}=this;r._refCount++;const o=new kv(t,r),i=n.subscribe(o);return o.closed||(o.connection=r.connect()),i}}class kv extends lt{constructor(t,n){super(t),this.connectable=n}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const n=t._refCount;if(n<=0)return void(this.connection=null);if(t._refCount=n-1,n>1)return void(this.connection=null);const{connection:r}=this,o=t._connection;this.connection=null,o&&(!r||o===r)&&o.unsubscribe()}}class Lv extends qe{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new Ee,t.add(this.source.subscribe(new Hv(this.getSubject(),this))),t.closed&&(this._connection=null,t=Ee.EMPTY)),t}refCount(){return nf()(this)}}const Bv=(()=>{const e=Lv.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:e._subscribe},_isComplete:{value:e._isComplete,writable:!0},getSubject:{value:e.getSubject},connect:{value:e.connect},refCount:{value:e.refCount}}})();class Hv extends Qd{constructor(t,n){super(t),this.connectable=n}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const n=t._connection;t._refCount=0,t._subject=null,t._connection=null,n&&n.unsubscribe()}}}function Gv(){return new Ga}function ee(e){for(let t in e)if(e[t]===ee)return t;throw Error("Could not find renamed property on target object.")}function qa(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function W(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(W).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Qa(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const Wv=ee({__forward_ref__:ee});function ue(e){return e.__forward_ref__=ue,e.toString=function(){return W(this())},e}function N(e){return rf(e)?e():e}function rf(e){return"function"==typeof e&&e.hasOwnProperty(Wv)&&e.__forward_ref__===ue}class Qn extends Error{constructor(t,n){super(function(e,t){return`${e?`NG0${e}: `:""}${t}`}(t,n)),this.code=t}}function U(e){return"string"==typeof e?e:null==e?"":String(e)}function Qe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():U(e)}function Wi(e,t){const n=t?` in ${t}`:"";throw new Qn("201",`No provider for ${Qe(e)} found${n}`)}function ut(e,t){null==e&&function(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function te(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ft(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return of(e,qi)||of(e,af)}function of(e,t){return e.hasOwnProperty(t)?e[t]:null}function sf(e){return e&&(e.hasOwnProperty(Ya)||e.hasOwnProperty(Xv))?e[Ya]:null}const qi=ee({\u0275prov:ee}),Ya=ee({\u0275inj:ee}),af=ee({ngInjectableDef:ee}),Xv=ee({ngInjectorDef:ee});var O=(()=>((O=O||{})[O.Default=0]="Default",O[O.Host=1]="Host",O[O.Self=2]="Self",O[O.SkipSelf=4]="SkipSelf",O[O.Optional=8]="Optional",O))();let Za;function An(e){const t=Za;return Za=e,t}function lf(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&O.Optional?null:void 0!==t?t:void Wi(W(e),"Injector")}function Sn(e){return{toString:e}.toString()}var yt=(()=>((yt=yt||{})[yt.OnPush=0]="OnPush",yt[yt.Default=1]="Default",yt))(),Se=(()=>((Se=Se||{})[Se.Emulated=0]="Emulated",Se[Se.None=2]="None",Se[Se.ShadowDom=3]="ShadowDom",Se))();const tD="undefined"!=typeof globalThis&&globalThis,nD="undefined"!=typeof window&&window,rD="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,oD="undefined"!=typeof global&&global,ne=tD||oD||nD||rD,yr={},ie=[],Qi=ee({\u0275cmp:ee}),Ja=ee({\u0275dir:ee}),Xa=ee({\u0275pipe:ee}),cf=ee({\u0275mod:ee}),iD=ee({\u0275loc:ee}),gn=ee({\u0275fac:ee}),Ao=ee({__NG_ELEMENT_ID__:ee});let sD=0;function xn(e){return Sn(()=>{const n={},r={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===yt.OnPush,directiveDefs:null,pipeDefs:null,selectors:e.selectors||ie,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||Se.Emulated,id:"c",styles:e.styles||ie,_:null,setInput:null,schemas:e.schemas||null,tView:null},o=e.directives,i=e.features,s=e.pipes;return r.id+=sD++,r.inputs=hf(e.inputs,n),r.outputs=hf(e.outputs),i&&i.forEach(a=>a(r)),r.directiveDefs=o?()=>("function"==typeof o?o():o).map(uf):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(df):null,r})}function uf(e){return Ke(e)||function(e){return e[Ja]||null}(e)}function df(e){return function(e){return e[Xa]||null}(e)}const ff={};function mn(e){return Sn(()=>{const t={type:e.type,bootstrap:e.bootstrap||ie,declarations:e.declarations||ie,imports:e.imports||ie,exports:e.exports||ie,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null};return null!=e.id&&(ff[e.id]=e.type),t})}function hf(e,t){if(null==e)return yr;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}const L=xn;function ot(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,onDestroy:e.type.prototype.ngOnDestroy||null}}function Ke(e){return e[Qi]||null}function Ct(e,t){const n=e[cf]||null;if(!n&&!0===t)throw new Error(`Type ${W(e)} does not have '\u0275mod' property.`);return n}const G=11;function Yt(e){return Array.isArray(e)&&"object"==typeof e[1]}function Pt(e){return Array.isArray(e)&&!0===e[1]}function nl(e){return 0!=(8&e.flags)}function Ji(e){return 2==(2&e.flags)}function Xi(e){return 1==(1&e.flags)}function Vt(e){return null!==e.template}function hD(e){return 0!=(512&e[2])}function Xn(e,t){return e.hasOwnProperty(gn)?e[gn]:null}class gf{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function ft(){return mf}function mf(e){return e.type.prototype.ngOnChanges&&(e.setInput=_D),mD}function mD(){const e=yf(this),t=null==e?void 0:e.current;if(t){const n=e.previous;if(n===yr)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function _D(e,t,n,r){const o=yf(e)||function(e,t){return e[_f]=t}(e,{previous:yr,current:null}),i=o.current||(o.current={}),s=o.previous,a=this.declaredInputs[n],l=s[a];i[a]=new gf(l&&l.currentValue,t,s===yr),e[r]=t}ft.ngInherit=!0;const _f="__ngSimpleChanges__";function yf(e){return e[_f]||null}const Cf="http://www.w3.org/2000/svg";let il;function ve(e){return!!e.listen}const Df={createRenderer:(e,t)=>void 0!==il?il:"undefined"!=typeof document?document:void 0};function Me(e){for(;Array.isArray(e);)e=e[0];return e}function es(e,t){return Me(t[e])}function bt(e,t){return Me(t[e.index])}function al(e,t){return e.data[t]}function ht(e,t){const n=t[e];return Yt(n)?n:n[0]}function ll(e){return 128==(128&e[2])}function Rn(e,t){return null==t?null:e[t]}function Ef(e){e[18]=0}function cl(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const B={lFrame:Nf(null),bindingsEnabled:!0,isInCheckNoChangesMode:!1};function wf(){return B.bindingsEnabled}function b(){return B.lFrame.lView}function J(){return B.lFrame.tView}function le(e){return B.lFrame.contextLView=e,e[8]}function xe(){let e=If();for(;null!==e&&64===e.type;)e=e.parent;return e}function If(){return B.lFrame.currentTNode}function Zt(e,t){const n=B.lFrame;n.currentTNode=e,n.isParent=t}function ul(){return B.lFrame.isParent}function dl(){B.lFrame.isParent=!1}function ts(){return B.isInCheckNoChangesMode}function ns(e){B.isInCheckNoChangesMode=e}function Ye(){const e=B.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function wr(){return B.lFrame.bindingIndex++}function _n(e){const t=B.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function RD(e,t){const n=B.lFrame;n.bindingIndex=n.bindingRootIndex=e,fl(t)}function fl(e){B.lFrame.currentDirectiveIndex=e}function pl(e){B.lFrame.currentQueryIndex=e}function OD(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Sf(e,t,n){if(n&O.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&O.Host||(o=OD(i),null===o||(i=i[15],10&o.type))););if(null===o)return!1;t=o,e=i}const r=B.lFrame=xf();return r.currentTNode=t,r.lView=e,!0}function rs(e){const t=xf(),n=e[1];B.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function xf(){const e=B.lFrame,t=null===e?null:e.child;return null===t?Nf(e):t}function Nf(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function Rf(){const e=B.lFrame;return B.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Ff=Rf;function os(){const e=Rf();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Ze(){return B.lFrame.selectedIndex}function Fn(e){B.lFrame.selectedIndex=e}function De(){const e=B.lFrame;return al(e.tView,e.selectedIndex)}function is(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[l]<0&&(e[18]+=65536),(a>11>16&&(3&e[2])===t){e[2]+=2048;try{i.call(a)}finally{}}}else try{i.call(a)}finally{}}class Fo{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function ls(e,t,n){const r=ve(e);let o=0;for(;ot){s=i-1;break}}}for(;i>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let yl=!0;function us(e){const t=yl;return yl=e,t}let QD=0;function Po(e,t){const n=vl(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,Cl(r.data,e),Cl(t,null),Cl(r.blueprint,null));const o=ds(e,t),i=e.injectorIndex;if(Lf(o)){const s=Ir(o),a=Mr(o,t),l=a[1].data;for(let c=0;c<8;c++)t[i+c]=a[s+c]|l[s+c]}return t[i+8]=o,i}function Cl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function vl(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function ds(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){const i=o[1],s=i.type;if(r=2===s?i.declTNode:1===s?o[6]:null,null===r)return-1;if(n++,o=o[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function fs(e,t,n){!function(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(Ao)&&(r=n[Ao]),null==r&&(r=n[Ao]=QD++);const o=255&r;t.data[e+(o>>5)]|=1<=0?255&t:ZD:t}(n);if("function"==typeof i){if(!Sf(t,e,r))return r&O.Host?jf(o,n,r):$f(t,n,r,o);try{const s=i(r);if(null!=s||r&O.Optional)return s;Wi(n)}finally{Ff()}}else if("number"==typeof i){let s=null,a=vl(e,t),l=-1,c=r&O.Host?t[16][6]:null;for((-1===a||r&O.SkipSelf)&&(l=-1===a?ds(e,t):t[a+8],-1!==l&&Wf(r,!1)?(s=t[1],a=Ir(l),t=Mr(l,t)):a=-1);-1!==a;){const u=t[1];if(zf(i,a,u.data)){const d=JD(a,t,n,s,r,c);if(d!==Gf)return d}l=t[a+8],-1!==l&&Wf(r,t[1].data[a+8]===c)&&zf(i,a,t)?(s=u,a=Ir(l),t=Mr(l,t)):a=-1}}}return $f(t,n,r,o)}const Gf={};function ZD(){return new Tr(xe(),b())}function JD(e,t,n,r,o,i){const s=t[1],a=s.data[e+8],u=function(e,t,n,r,o){const i=e.providerIndexes,s=t.data,a=1048575&i,l=e.directiveStart,u=i>>20,f=o?a+u:e.directiveEnd;for(let h=r?a:a+u;h=l&&p.type===n)return h}if(o){const h=s[l];if(h&&Vt(h)&&h.type===n)return l}return null}(a,s,n,null==r?Ji(a)&&yl:r!=s&&0!=(3&a.type),o&O.Host&&i===a);return null!==u?Vo(t,s,u,a):Gf}function Vo(e,t,n,r){let o=e[n];const i=t.data;if(function(e){return e instanceof Fo}(o)){const s=o;s.resolving&&function(e,t){throw new Qn("200",`Circular dependency in DI detected for ${e}`)}(Qe(i[n]));const a=us(s.canSeeViewProviders);s.resolving=!0;const l=s.injectImpl?An(s.injectImpl):null;Sf(e,r,O.Default);try{o=e[n]=s.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const s=mf(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,s)}o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,o),i&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,i),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,i))}(n,i[n],t)}finally{null!==l&&An(l),us(a),s.resolving=!1,Ff()}}return o}function zf(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[gn]||Dl(t),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[gn]||Dl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Dl(e){return rf(e)?()=>{const t=Dl(N(e));return t&&t()}:Xn(e)}const Sr="__parameters__";function er(e,t,n){return Sn(()=>{const r=function(e){return function(...n){if(e){const r=e(...n);for(const o in r)this[o]=r[o]}}}(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;const s=new o(...i);return a.annotation=s,a;function a(l,c,u){const d=l.hasOwnProperty(Sr)?l[Sr]:Object.defineProperty(l,Sr,{value:[]})[Sr];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),l}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}class X{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=te({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}toString(){return`InjectionToken ${this._desc}`}}function Xt(e,t){e.forEach(n=>Array.isArray(n)?Xt(n,t):t(n))}function gs(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function tr(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function pt(e,t,n){let r=Nr(e,t);return r>=0?e[1|r]=n:(r=~r,function(e,t,n,r){let o=e.length;if(o==t)e.push(n,r);else if(1===o)e.push(r,e[0]),e[0]=n;else{for(o--,e.push(e[o-1],e[o]);o>t;)e[o]=e[o-2],o--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Il(e,t){const n=Nr(e,t);if(n>=0)return e[1|n]}function Nr(e,t){return function(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){const i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o< ");else if("object"==typeof t){let i=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];i.push(s+":"+("string"==typeof a?JSON.stringify(a):W(a)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(db,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[Rr]=null,e}const Uo=$o(er("Inject",e=>({token:e})),-1),en=$o(er("Optional"),8),rr=$o(er("SkipSelf"),4);class or{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see https://g.co/ng/security#xss)`}}function gt(e){return e instanceof or?e.changingThisBreaksApplicationSecurity:e}function tn(e,t){const n=function(e){return e instanceof or&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see https://g.co/ng/security#xss)`)}return n===t}const Lb=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi,Bb=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;var ce=(()=>((ce=ce||{})[ce.NONE=0]="NONE",ce[ce.HTML=1]="HTML",ce[ce.STYLE=2]="STYLE",ce[ce.SCRIPT=3]="SCRIPT",ce[ce.URL=4]="URL",ce[ce.RESOURCE_URL=5]="RESOURCE_URL",ce))();function Vr(e){const t=function(){const e=b();return e&&e[12]}();return t?t.sanitize(ce.URL,e)||"":tn(e,"URL")?gt(e):function(e){return(e=String(e)).match(Lb)||e.match(Bb)?e:"unsafe:"+e}(U(e))}const _h="__ngContext__";function He(e,t){e[_h]=t}function Ll(e){const t=function(e){return e[_h]||null}(e);return t?Array.isArray(t)?t:t.lView:null}function bs(e){return e.ngOriginalError}function aE(e,...t){e.error(...t)}class ir{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t),r=this._findContext(t),o=function(e){return e&&e.ngErrorLogger||aE}(t);o(this._console,"ERROR",t),n&&o(this._console,"ORIGINAL ERROR",n),r&&o(this._console,"ERROR CONTEXT",r)}_findContext(t){return t?function(e){return e.ngDebugContext}(t)||this._findContext(bs(t)):null}_findOriginalError(t){let n=t&&bs(t);for(;n&&bs(n);)n=bs(n);return n||null}}const Mh=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(ne))();function Hl(e){return e.ownerDocument.defaultView}function rn(e){return e instanceof Function?e():e}var mt=(()=>((mt=mt||{})[mt.Important=1]="Important",mt[mt.DashCase=2]="DashCase",mt))();function $l(e,t){return undefined(e,t)}function Ko(e){const t=e[3];return Pt(t)?t[3]:t}function Ul(e){return Nh(e[13])}function Gl(e){return Nh(e[4])}function Nh(e){for(;null!==e&&!Pt(e);)e=e[4];return e}function Lr(e,t,n,r,o){if(null!=r){let i,s=!1;Pt(r)?i=r:Yt(r)&&(s=!0,r=r[0]);const a=Me(r);0===e&&null!==n?null==o?kh(t,n,a):sr(t,n,a,o||null,!0):1===e&&null!==n?sr(t,n,a,o||null,!0):2===e?function(e,t,n){const r=ws(e,t);r&&function(e,t,n,r){ve(e)?e.removeChild(t,n,r):t.removeChild(n)}(e,r,t,n)}(t,a,s):3===e&&t.destroyNode(a),null!=i&&function(e,t,n,r,o){const i=n[7];i!==Me(n)&&Lr(t,e,r,i,o);for(let a=10;a0&&(e[n-1][4]=r[4]);const i=tr(e,10+t);!function(e,t){Yo(e,t,t[G],2,null,null),t[0]=null,t[6]=null}(r[1],r);const s=i[19];null!==s&&s.detachView(i[1]),r[3]=null,r[4]=null,r[2]&=-129}return r}function Oh(e,t){if(!(256&t[2])){const n=t[G];ve(n)&&n.destroyNode&&Yo(e,t,n,3,null,null),function(e){let t=e[13];if(!t)return Ql(e[1],e);for(;t;){let n=null;if(Yt(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Yt(t)&&Ql(t[1],t),t=t[3];null===t&&(t=e),Yt(t)&&Ql(t[1],t),n=t&&t[4]}t=n}}(t)}}function Ql(e,t){if(!(256&t[2])){t[2]&=-129,t[2]|=256,function(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[o=c]():r[o=-c].unsubscribe(),i+=2}else{const s=r[o=n[i+1]];n[i].call(s)}if(null!==r){for(let i=o+1;ii?"":o[d+1].toLowerCase();const h=8&r?f:null;if(h&&-1!==qh(h,c,0)||2&r&&c!==f){if(kt(r))return!1;s=!0}}}}else{if(!s&&!kt(r)&&!kt(l))return!1;if(s&&kt(l))continue;s=!1,r=l|1&r}}return kt(r)||s}function kt(e){return 0==(1&e)}function PE(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&r?o+="."+s:4&r&&(o+=" "+s);else""!==o&&!kt(s)&&(t+=Zh(i,o),o=""),r=s,i=i||!kt(r);n++}return""!==o&&(t+=Zh(i,o)),t}const j={};function g(e){Jh(J(),b(),Ze()+e,ts())}function Jh(e,t,n,r){if(!r)if(3==(3&t[2])){const i=e.preOrderCheckHooks;null!==i&&ss(t,i,n)}else{const i=e.preOrderHooks;null!==i&&as(t,i,0,n)}Fn(n)}function Ts(e,t){return e<<17|t<<2}function Lt(e){return e>>17&32767}function Xl(e){return 2|e}function yn(e){return(131068&e)>>2}function ec(e,t){return-131069&e|t<<2}function tc(e){return 1|e}function lp(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r20&&Jh(e,t,20,ts()),n(r,o)}finally{Fn(i)}}function up(e,t,n){if(nl(t)){const o=t.directiveEnd;for(let i=t.directiveStart;i0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(a)!=l&&a.push(l),a.push(r,o,s)}}function yp(e,t){null!==e.hostBindings&&e.hostBindings(1,t)}function Cp(e,t){t.flags|=2,(e.components||(e.components=[])).push(t.index)}function fw(e,t,n){if(n){if(t.exportAs)for(let r=0;r0&&hc(n)}}function hc(e){for(let r=Ul(e);null!==r;r=Gl(r))for(let o=10;o0&&hc(i)}const n=e[1].components;if(null!==n)for(let r=0;r0&&hc(o)}}function Cw(e,t){const n=ht(t,e),r=n[1];(function(e,t){for(let n=t.length;nPromise.resolve(null))();function wp(e){return e[7]||(e[7]=[])}function Ip(e){return e.cleanup||(e.cleanup=[])}function Tp(e,t){const n=e[9],r=n?n.get(ir,null):null;r&&r.handleError(t)}function Ap(e,t,n,r,o){for(let i=0;ithis.processProvider(a,t,n)),Xt([t],a=>this.processInjectorType(a,[],i)),this.records.set($r,Ur(void 0,this));const s=this.records.get(Xo);this.scope=null!=s?s.value:null,this.source=o||("object"==typeof t?null:W(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,n=Ho,r=O.Default){this.assertNotDestroyed();const o=Fr(this),i=An(void 0);try{if(!(r&O.SkipSelf)){let a=this.records.get(t);if(void 0===a){const l=function(e){return"function"==typeof e||"object"==typeof e&&e instanceof X}(t)&&pn(t);a=l&&this.injectableDefInScope(l)?Ur(Cc(t),ei):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(r&O.Self?xp():this.parent).get(t,n=r&O.Optional&&n===Ho?null:n)}catch(s){if("NullInjectorError"===s.name){if((s[Rr]=s[Rr]||[]).unshift(W(t)),o)throw s;return Jf(s,t,"R3InjectorError",this.source)}throw s}finally{An(i),Fr(o)}}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(t=>this.get(t))}toString(){const t=[];return this.records.forEach((r,o)=>t.push(W(o))),`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error("Injector has already been destroyed.")}processInjectorType(t,n,r){if(!(t=N(t)))return!1;let o=sf(t);const i=null==o&&t.ngModule||void 0,s=void 0===i?t:i,a=-1!==r.indexOf(s);if(void 0!==i&&(o=sf(i)),null==o)return!1;if(null!=o.imports&&!a){let u;r.push(s);try{Xt(o.imports,d=>{this.processInjectorType(d,n,r)&&(void 0===u&&(u=[]),u.push(d))})}finally{}if(void 0!==u)for(let d=0;dthis.processProvider(p,f,h||ie))}}this.injectorDefTypes.add(s);const l=Xn(s)||(()=>new s);this.records.set(s,Ur(l,ei));const c=o.providers;if(null!=c&&!a){const u=t;Xt(c,d=>this.processProvider(d,u,c))}return void 0!==i&&void 0!==t.providers}processProvider(t,n,r){let o=Gr(t=N(t))?t:N(t&&t.provide);const i=function(e,t,n){return Fp(e)?Ur(void 0,e.useValue):Ur(Rp(e),ei)}(t);if(Gr(t)||!0!==t.multi)this.records.get(o);else{let s=this.records.get(o);s||(s=Ur(void 0,ei,!0),s.factory=()=>nr(s.multi),this.records.set(o,s)),o=t,s.multi.push(t)}this.records.set(o,i)}hydrate(t,n){return n.value===ei&&(n.value=Tw,n.value=n.factory()),"object"==typeof n.value&&n.value&&function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this.onDestroy.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=N(t.providedIn);return"string"==typeof n?"any"===n||n===this.scope:this.injectorDefTypes.has(n)}}function Cc(e){const t=pn(e),n=null!==t?t.factory:Xn(e);if(null!==n)return n;if(e instanceof X)throw new Error(`Token ${W(e)} is missing a \u0275prov definition.`);if(e instanceof Function)return function(e){const t=e.length;if(t>0){const r=function(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new Error("unreachable")}function Rp(e,t,n){let r;if(Gr(e)){const o=N(e);return Xn(o)||Cc(o)}if(Fp(e))r=()=>N(e.useValue);else if(function(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...nr(e.deps||[]));else if(function(e){return!(!e||!e.useExisting)}(e))r=()=>Y(N(e.useExisting));else{const o=N(e&&(e.useClass||e.provide));if(!function(e){return!!e.deps}(e))return Xn(o)||Cc(o);r=()=>new o(...nr(e.deps))}return r}function Ur(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Fp(e){return null!==e&&"object"==typeof e&&Sl in e}function Gr(e){return"function"==typeof e}const Op=function(e,t,n){return function(e,t=null,n=null,r){const o=Np(e,t,n,r);return o._resolveInjectorDefTypes(),o}({name:n},t,e,n)};let pe=(()=>{class e{static create(n,r){return Array.isArray(n)?Op(n,r,""):Op(n.providers,n.parent,n.name||"")}}return e.THROW_IF_NOT_FOUND=Ho,e.NULL=new Sp,e.\u0275prov=te({token:e,providedIn:"any",factory:()=>Y($r)}),e.__NG_ELEMENT_ID__=-1,e})();function Yw(e,t){is(Ll(e)[1],xe())}function ge(e){let t=function(e){return Object.getPrototypeOf(e.prototype).constructor}(e.type),n=!0;const r=[e];for(;t;){let o;if(Vt(e))o=t.\u0275cmp||t.\u0275dir;else{if(t.\u0275cmp)throw new Error("Directives cannot inherit Components");o=t.\u0275dir}if(o){if(n){r.push(o);const s=e;s.inputs=Ic(e.inputs),s.declaredInputs=Ic(e.declaredInputs),s.outputs=Ic(e.outputs);const a=o.hostBindings;a&&e0(e,a);const l=o.viewQuery,c=o.contentQueries;if(l&&Jw(e,l),c&&Xw(e,c),qa(e.inputs,o.inputs),qa(e.declaredInputs,o.declaredInputs),qa(e.outputs,o.outputs),Vt(o)&&o.data.animation){const u=e.data;u.animation=(u.animation||[]).concat(o.data.animation)}}const i=o.features;if(i)for(let s=0;s=0;r--){const o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=cs(o.hostAttrs,n=cs(n,o.hostAttrs))}}(r)}function Ic(e){return e===yr?{}:e===ie?[]:e}function Jw(e,t){const n=e.viewQuery;e.viewQuery=n?(r,o)=>{t(r,o),n(r,o)}:t}function Xw(e,t){const n=e.contentQueries;e.contentQueries=n?(r,o,i)=>{t(r,o,i),n(r,o,i)}:t}function e0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,o)=>{t(r,o),n(r,o)}:t}let Fs=null;function zr(){if(!Fs){const e=ne.Symbol;if(e&&e.iterator)Fs=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;na(Me(R[r.index])):r.index;if(ve(n)){let R=null;if(!a&&l&&(R=function(e,t,n,r){const o=e.cleanup;if(null!=o)for(let i=0;il?a[l]:null}"string"==typeof s&&(i+=2)}return null}(e,t,o,r.index)),null!==R)(R.__ngLastListenerFn__||R).__ngNextListenerFn__=i,R.__ngLastListenerFn__=i,h=!1;else{i=Fc(r,t,d,i,!1);const q=n.listen(E,o,i);f.push(i,q),u&&u.push(o,x,v,v+1)}}else i=Fc(r,t,d,i,!0),E.addEventListener(o,i,s),f.push(i),u&&u.push(o,x,v,s)}else i=Fc(r,t,d,i,!1);const p=r.outputs;let _;if(h&&null!==p&&(_=p[o])){const m=_.length;if(m)for(let E=0;E0;)t=t[15],e--;return t}(e,B.lFrame.contextLView))[8]}(e)}function oi(e,t,n){return Oc(e,"",t,"",n),oi}function Oc(e,t,n,r,o){const i=b(),s=qr(i,t,n,r);return s!==j&&_t(J(),De(),i,e,s,i[G],o,!1),Oc}function xg(e,t,n,r,o){const i=e[n+1],s=null===t;let a=r?Lt(i):yn(i),l=!1;for(;0!==a&&(!1===l||s);){const u=e[a+1];j0(e[a],t)&&(l=!0,e[a+1]=r?tc(u):Xl(u)),a=r?Lt(u):yn(u)}l&&(e[n+1]=r?Xl(i):tc(i))}function j0(e,t){return null===e||null==t||(Array.isArray(e)?e[1]:e)===t||!(!Array.isArray(e)||"string"!=typeof t)&&Nr(e,t)>=0}const Re={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Ng(e){return e.substring(Re.key,Re.keyEnd)}function Rg(e,t){const n=Re.textEnd;return n===t?-1:(t=Re.keyEnd=function(e,t,n){for(;t32;)t++;return t}(e,Re.key=t,n),no(e,t,n))}function no(e,t,n){for(;t=0;n=Rg(t,n))pt(e,Ng(t),!0)}function Lg(e,t){return t>=e.expandoStartIndex}function Bg(e,t,n,r){const o=e.data;if(null===o[n+1]){const i=o[Ze()],s=Lg(e,n);Ug(i,r)&&null===t&&!s&&(t=!1),t=function(e,t,n,r){const o=function(e){const t=B.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let i=r?t.residualClasses:t.residualStyles;if(null===o)0===(r?t.classBindings:t.styleBindings)&&(n=ii(n=Pc(null,e,t,n,r),t.attrs,r),i=null);else{const s=t.directiveStylingLast;if(-1===s||e[s]!==o)if(n=Pc(o,e,t,n,r),null===i){let l=function(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==yn(r))return e[Lt(r)]}(e,t,r);void 0!==l&&Array.isArray(l)&&(l=Pc(null,e,t,l[1],r),l=ii(l,t.attrs,r),function(e,t,n,r){e[Lt(n?t.classBindings:t.styleBindings)]=r}(e,t,r,l))}else i=function(e,t,n){let r;const o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0)&&(c=!0)}else u=n;if(o)if(0!==l){const f=Lt(e[a+1]);e[r+1]=Ts(f,a),0!==f&&(e[f+1]=ec(e[f+1],r)),e[a+1]=function(e,t){return 131071&e|t<<17}(e[a+1],r)}else e[r+1]=Ts(a,0),0!==a&&(e[a+1]=ec(e[a+1],r)),a=r;else e[r+1]=Ts(l,0),0===a?a=r:e[l+1]=ec(e[l+1],r),l=r;c&&(e[r+1]=Xl(e[r+1])),xg(e,u,r,!0),xg(e,u,r,!1),function(e,t,n,r,o){const i=o?e.residualClasses:e.residualStyles;null!=i&&"string"==typeof t&&Nr(i,t)>=0&&(n[r+1]=tc(n[r+1]))}(t,u,e,r,i),s=Ts(a,l),i?t.classBindings=s:t.styleBindings=s}(o,i,t,n,s,r)}}function Pc(e,t,n,r,o){let i=null;const s=n.directiveEnd;let a=n.directiveStylingLast;for(-1===a?a=n.directiveStart:a++;a0;){const l=e[o],c=Array.isArray(l),u=c?l[1]:l,d=null===u;let f=n[o+1];f===j&&(f=d?ie:void 0);let h=d?Il(f,r):u===r?f:void 0;if(c&&!Ls(h)&&(h=Il(l,r)),Ls(h)&&(a=h,s))return a;const p=e[o+1];o=s?Lt(p):yn(p)}if(null!==t){let l=i?t.residualClasses:t.residualStyles;null!=l&&(a=Il(l,r))}return a}function Ls(e){return void 0!==e}function Ug(e,t){return 0!=(e.flags&(t?16:32))}function M(e,t=""){const n=b(),r=J(),o=e+20,i=r.firstCreatePass?Br(r,o,1,t,null):r.data[o],s=n[o]=function(e,t){return ve(e)?e.createText(t):e.createTextNode(t)}(n[G],t);Is(r,n,s,i),Zt(i,!1)}function P(e){return oe("",e,""),P}function oe(e,t,n){const r=b(),o=qr(r,e,t,n);return o!==j&&vn(r,Ze(),o),oe}function Ln(e,t,n){!function(e,t,n,r){const o=J(),i=_n(2);o.firstUpdatePass&&Bg(o,null,i,r);const s=b();if(n!==j&&je(s,i,n)){const a=o.data[Ze()];if(Ug(a,r)&&!Lg(o,i)){let l=r?a.classesWithoutHost:a.stylesWithoutHost;null!==l&&(n=Qa(l,n||"")),Nc(o,a,s,n,r)}else!function(e,t,n,r,o,i,s,a){o===j&&(o=ie);let l=0,c=0,u=0((A=A||{})[A.LocaleId=0]="LocaleId",A[A.DayPeriodsFormat=1]="DayPeriodsFormat",A[A.DayPeriodsStandalone=2]="DayPeriodsStandalone",A[A.DaysFormat=3]="DaysFormat",A[A.DaysStandalone=4]="DaysStandalone",A[A.MonthsFormat=5]="MonthsFormat",A[A.MonthsStandalone=6]="MonthsStandalone",A[A.Eras=7]="Eras",A[A.FirstDayOfWeek=8]="FirstDayOfWeek",A[A.WeekendRange=9]="WeekendRange",A[A.DateFormat=10]="DateFormat",A[A.TimeFormat=11]="TimeFormat",A[A.DateTimeFormat=12]="DateTimeFormat",A[A.NumberSymbols=13]="NumberSymbols",A[A.NumberFormats=14]="NumberFormats",A[A.CurrencyCode=15]="CurrencyCode",A[A.CurrencySymbol=16]="CurrencySymbol",A[A.CurrencyName=17]="CurrencyName",A[A.Currencies=18]="Currencies",A[A.Directionality=19]="Directionality",A[A.PluralCase=20]="PluralCase",A[A.ExtraData=21]="ExtraData",A))();const Bs="en-US";let dm=Bs;function Vc(e){ut(e,"Expected localeId to be defined"),"string"==typeof e&&(dm=e.toLowerCase().replace(/_/g,"-"))}function Bc(e,t,n,r,o){if(e=N(e),Array.isArray(e))for(let i=0;i>20;if(Gr(e)||!e.multi){const h=new Fo(l,o,I),p=jc(a,t,o?u:u+f,d);-1===p?(fs(Po(c,s),i,a),Hc(i,e,t.length),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(h),s.push(h)):(n[p]=h,s[p]=h)}else{const h=jc(a,t,u+f,d),p=jc(a,t,u,u+f),_=h>=0&&n[h],m=p>=0&&n[p];if(o&&!m||!o&&!_){fs(Po(c,s),i,a);const E=function(e,t,n,r,o){const i=new Fo(e,n,I);return i.multi=[],i.index=t,i.componentProviders=0,Pm(i,o,r&&!n),i}(o?y1:_1,n.length,o,r,l);!o&&m&&(n[p].providerFactory=E),Hc(i,e,t.length,0),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(E),s.push(E)}else Hc(i,e,h>-1?h:p,Pm(n[o?p:h],l,!o&&r));!o&&r&&m&&n[p].componentProviders++}}}function Hc(e,t,n,r){const o=Gr(t);if(o||function(e){return!!e.useClass}(t)){const s=(t.useClass||t).prototype.ngOnDestroy;if(s){const a=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){const l=a.indexOf(n);-1===l?a.push(n,[r,s]):a[l+1].push(r,s)}else a.push(n,s)}}}function Pm(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function jc(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>function(e,t,n){const r=J();if(r.firstCreatePass){const o=Vt(e);Bc(n,r.data,r.blueprint,o,!0),Bc(t,r.data,r.blueprint,o,!1)}}(r,o?o(e):e,t)}}class Vm{}const Lm="ngComponent";class D1{resolveComponentFactory(t){throw function(e){const t=Error(`No component factory found for ${W(e)}. Did you add it to @NgModule.entryComponents?`);return t[Lm]=e,t}(t)}}let io=(()=>{class e{}return e.NULL=new D1,e})();function Gs(...e){}function so(e,t){return new $e(bt(e,t))}const w1=function(){return so(xe(),b())};let $e=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=w1,e})();class zs{}let cr=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>M1(),e})();const M1=function(){const e=b(),n=ht(xe().index,e);return function(e){return e[G]}(Yt(n)?n:e)};let Gc=(()=>{class e{}return e.\u0275prov=te({token:e,providedIn:"root",factory:()=>null}),e})();class Ws{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const Hm=new Ws("12.2.6");class jm{constructor(){}supports(t){return ni(t)}create(t){return new x1(t)}}const S1=(e,t)=>t;class x1{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||S1}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){const s=!r||n&&n.currentIndex{s=this._trackByFn(o,a),null!==n&&Object.is(n.trackById,s)?(r&&(n=this._verifyReinsertion(n,a,s,o)),Object.is(n.item,a)||this._addIdentityChange(n,a)):(n=this._mismatch(n,a,s,o),r=!0),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return null===t?i=this._itTail:(i=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,o))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new N1(n,r),i,o),t}_verifyReinsertion(t,n,r,o){let i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==i?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const o=t._prevRemoved,i=t._nextRemoved;return null===o?this._removalsHead=i:o._nextRemoved=i,null===i?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const o=null===n?this._itHead:n._next;return t._next=o,t._prev=n,null===o?this._itTail=t:o._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new $m),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new $m),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class N1{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class R1{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class $m{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new R1,this.map.set(n,r)),r.add(t)}get(t,n){const o=this.map.get(t);return o?o.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Um(e,t,n){const r=e.previousIndex;if(null===r)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const o=this._records.get(t);this._maybeAddToChanges(o,n);const i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}const r=new O1(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class O1{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function zm(){return new ui([new jm])}let ui=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||zm()),deps:[[e,new rr,new en]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(null!=r)return r;throw new Error(`Cannot find a differ supporting object '${n}' of type '${function(e){return e.name||typeof e}(n)}'`)}}return e.\u0275prov=te({token:e,providedIn:"root",factory:zm}),e})();function Wm(){return new ao([new Gm])}let ao=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Wm()),deps:[[e,new rr,new en]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(r)return r;throw new Error(`Cannot find a differ supporting object '${n}'`)}}return e.\u0275prov=te({token:e,providedIn:"root",factory:Wm}),e})();function qs(e,t,n,r,o=!1){for(;null!==n;){const i=t[n.index];if(null!==i&&r.push(Me(i)),Pt(i))for(let a=10;a-1&&(ql(t,r),tr(n,r))}this._attachedToViewContainer=!1}Oh(this._lView[1],this._lView)}onDestroy(t){!function(e,t,n,r){const o=wp(t);null===n?o.push(r):(o.push(n),e.firstCreatePass&&Ip(e).push(r,o.length-1))}(this._lView[1],this._lView,null,t)}markForCheck(){pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){mc(this._lView[1],this._lView,this.context)}checkNoChanges(){!function(e,t,n){ns(!0);try{mc(e,t,n)}finally{ns(!1)}}(this._lView[1],this._lView,this.context)}attachToViewContainerRef(){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function(e,t){Yo(e,t,t[G],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}}class V1 extends di{constructor(t){super(t),this._view=t}detectChanges(){Ep(this._view)}checkNoChanges(){!function(e){ns(!0);try{Ep(e)}finally{ns(!1)}}(this._view)}get context(){return null}}const $1=[new Gm],G1=new ui([new jm]),z1=new ao($1),q1=function(){return function(e,t){return 4&e.type?new K1(t,e,so(e,t)):null}(xe(),b())};let bn=(()=>{class e{}return e.__NG_ELEMENT_ID__=q1,e})();const Q1=bn,K1=class extends Q1{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t){const n=this._declarationTContainer.tViews,r=Zo(this._declarationLView,n,t,16,null,n.declTNode,null,null,null,null);r[17]=this._declarationLView[this._declarationTContainer.index];const i=this._declarationLView[19];return null!==i&&(r[19]=i.createEmbeddedView(n)),Jo(n,r,t),new di(r)}};class ur{}const X1=function(){return function(e,t){let n;const r=t[e.index];if(Pt(r))n=r;else{let o;if(8&e.type)o=Me(r);else{const i=t[G];o=i.createComment("");const s=bt(e,t);sr(i,ws(i,s),o,function(e,t){return ve(e)?e.nextSibling(t):t.nextSibling}(i,s),!1)}t[e.index]=n=bp(r,t,o,e),Ns(t,n)}return new qm(n,e,t)}(xe(),b())};let dn=(()=>{class e{}return e.__NG_ELEMENT_ID__=X1,e})();const tM=dn,qm=class extends tM{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return so(this._hostTNode,this._hostLView)}get injector(){return new Tr(this._hostTNode,this._hostLView)}get parentInjector(){const t=ds(this._hostTNode,this._hostLView);if(Lf(t)){const n=Mr(t,this._hostLView),r=Ir(t);return new Tr(n[1].data[r+8],n)}return new Tr(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=Qm(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){const o=t.createEmbeddedView(n||{});return this.insert(o,r),o}createComponent(t,n,r,o,i){const s=r||this.parentInjector;if(!i&&null==t.ngModule&&s){const l=s.get(ur,null);l&&(i=l)}const a=t.create(s,o,void 0,i);return this.insert(a.hostView,n),a}insert(t,n){const r=t._lView,o=r[1];if(function(e){return Pt(e[3])}(r)){const u=this.indexOf(t);if(-1!==u)this.detach(u);else{const d=r[3],f=new qm(d,d[6],d[3]);f.detach(f.indexOf(t))}}const i=this._adjustIndex(n),s=this._lContainer;!function(e,t,n,r){const o=10+r,i=n.length;r>0&&(n[o-1][4]=t),rMh});class __ extends Vm{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function(e){return e.map(HE).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return m_(this.componentDef.inputs)}get outputs(){return m_(this.componentDef.outputs)}create(t,n,r,o){const i=(o=o||this.ngModule)?function(e,t){return{get:(n,r,o)=>{const i=e.get(n,fo,o);return i!==fo||r===fo?i:t.get(n,r,o)}}}(t,o.injector):t,s=i.get(zs,Df),a=i.get(Gc,null),l=s.createRenderer(null,this.componentDef),c=this.componentDef.selectors[0][0]||"div",u=r?function(e,t,n){if(ve(e))return e.selectRootElement(t,n===Se.ShadowDom);let r="string"==typeof t?e.querySelector(t):t;return r.textContent="",r}(l,r,this.componentDef.encapsulation):Wl(s.createRenderer(null,this.componentDef),c,function(e){const t=e.toLowerCase();return"svg"===t?Cf:"math"===t?"http://www.w3.org/1998/MathML/":null}(c)),d=this.componentDef.onPush?576:528,f=function(e,t){return{components:[],scheduler:e||Mh,clean:ww,playerHandler:t||null,flags:0}}(),h=xs(0,null,null,1,0,null,null,null,null,null),p=Zo(null,h,f,d,null,null,s,l,a,i);let _,m;rs(p);try{const E=function(e,t,n,r,o,i){const s=n[1];n[20]=e;const l=Br(s,20,2,"#host",null),c=l.mergedAttrs=t.hostAttrs;null!==c&&(Rs(l,c,!0),null!==e&&(ls(o,e,c),null!==l.classes&&Jl(o,e,l.classes),null!==l.styles&&Wh(o,e,l.styles)));const u=r.createRenderer(e,t),d=Zo(n,dp(t),null,t.onPush?64:16,n[20],l,r,u,i||null,null);return s.firstCreatePass&&(fs(Po(l,n),s,t.type),Cp(s,l),vp(l,n.length,1)),Ns(n,d),n[20]=d}(u,this.componentDef,p,s,l);if(u)if(r)ls(l,u,["ng-version",Hm.full]);else{const{attrs:v,classes:x}=function(e){const t=[],n=[];let r=1,o=2;for(;r0&&Jl(l,u,x.join(" "))}if(m=al(h,20),void 0!==n){const v=m.projection=[];for(let x=0;xl(s,t)),t.contentQueries){const l=xe();t.contentQueries(1,s,l.directiveStart)}const a=xe();return!i.firstCreatePass||null===t.hostBindings&&null===t.hostAttrs||(Fn(a.index),_p(n[1],a,0,a.directiveStart,a.directiveEnd,t),yp(t,s)),s}(E,this.componentDef,p,f,[Yw]),Jo(h,p,null)}finally{os()}return new eT(this.componentType,_,so(m,p),p,m)}}class eT extends class{}{constructor(t,n,r,o,i){super(),this.location=r,this._rootLView=o,this._tNode=i,this.instance=n,this.hostView=this.changeDetectorRef=new V1(o),this.componentType=t}get injector(){return new Tr(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}}const ho=new Map;class rT extends ur{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new g_(this);const r=Ct(t),o=function(e){return e[iD]||null}(t);o&&Vc(o),this._bootstrapComponents=rn(r.bootstrap),this._r3Injector=Np(t,n,[{provide:ur,useValue:this},{provide:io,useValue:this.componentFactoryResolver}],W(t)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(t)}get(t,n=pe.THROW_IF_NOT_FOUND,r=O.Default){return t===pe||t===ur||t===$r?this:this._r3Injector.get(t,n,r)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class ou extends class{}{constructor(t){super(),this.moduleType=t,null!==Ct(t)&&function(e){const t=new Set;!function n(r){const o=Ct(r,!0),i=o.id;null!==i&&(function(e,t,n){if(t&&t!==n)throw new Error(`Duplicate module registered for ${e} - ${W(t)} vs ${W(t.name)}`)}(i,ho.get(i),r),ho.set(i,r));const s=rn(o.imports);for(const a of s)t.has(a)||(t.add(a),n(a))}(e)}(t)}create(t){return new rT(this.moduleType,t)}}function iu(e,t,n,r){return function(e,t,n,r,o,i){const s=t+n;return je(e,s,o)?sn(e,s+1,i?r.call(i,o):r(o)):Ci(e,s+1)}(b(),Ye(),e,t,n,r)}function su(e,t,n,r,o){return function(e,t,n,r,o,i,s){const a=t+n;return ar(e,a,o,i)?sn(e,a+2,s?r.call(s,o,i):r(o,i)):Ci(e,a+2)}(b(),Ye(),e,t,n,r,o)}function st(e,t,n,r,o,i){return b_(b(),Ye(),e,t,n,r,o,i)}function Ci(e,t){const n=e[t];return n===j?void 0:n}function b_(e,t,n,r,o,i,s,a){const l=t+n;return function(e,t,n,r,o){const i=ar(e,t,n,r);return je(e,t+2,o)||i}(e,l,o,i,s)?sn(e,l+3,a?r.call(a,o,i,s):r(o,i,s)):Ci(e,l+3)}function M_(e,t,n,r,o){const i=e+20,s=b(),a=function(e,t){return e[t]}(s,i);return function(e,t){Ht.isWrapped(t)&&(t=Ht.unwrap(t),e[B.lFrame.bindingIndex]=j);return t}(s,function(e,t){return e[1].data[t].pure}(s,i)?b_(s,Ye(),t,a.transform,n,r,o,a):a.transform(n,r,o))}function au(e){return t=>{setTimeout(e,void 0,t)}}const ze=class extends Ga{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){var o,i,s;let a=t,l=n||(()=>null),c=r;if(t&&"object"==typeof t){const d=t;a=null===(o=d.next)||void 0===o?void 0:o.bind(d),l=null===(i=d.error)||void 0===i?void 0:i.bind(d),c=null===(s=d.complete)||void 0===s?void 0:s.bind(d)}this.__isAsync&&(l=au(l),a&&(a=au(a)),c&&(c=au(c)));const u=super.subscribe({next:a,error:l,complete:c});return t instanceof Ee&&t.add(u),u}};Symbol;const na=new X("Application Initializer");let go=(()=>{class e{constructor(n){this.appInits=n,this.resolve=Gs,this.reject=Gs,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,o)=>{this.resolve=r,this.reject=o})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let o=0;o{i.subscribe({complete:a,error:l})});n.push(s)}}Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(Y(na,8))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Ei=new X("AppId"),rA={provide:Ei,useFactory:function(){return`${yu()}${yu()}${yu()}`},deps:[]};function yu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const K_=new X("Platform Initializer"),Cu=new X("Platform ID"),oA=new X("appBootstrapListener");let vu=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Hn=new X("LocaleId"),Y_=new X("DefaultCurrencyCode");class sA{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}const Du=function(e){return new ou(e)},aA=Du,lA=function(e){return Promise.resolve(Du(e))},Z_=function(e){const t=Du(e),r=rn(Ct(e).declarations).reduce((o,i)=>{const s=Ke(i);return s&&o.push(new __(s)),o},[]);return new sA(t,r)},cA=Z_,uA=function(e){return Promise.resolve(Z_(e))};let oa=(()=>{class e{constructor(){this.compileModuleSync=aA,this.compileModuleAsync=lA,this.compileModuleAndAllComponentsSync=cA,this.compileModuleAndAllComponentsAsync=uA}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const hA=(()=>Promise.resolve(0))();function bu(e){"undefined"==typeof Zone?hA.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class Le{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new ze(!1),this.onMicrotaskEmpty=new ze(!1),this.onStable=new ze(!1),this.onError=new ze(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function(){let e=ne.requestAnimationFrame,t=ne.cancelAnimationFrame;if("undefined"!=typeof Zone&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function(e){const t=()=>{!function(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(ne,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,wu(e),e.isCheckStableRunning=!0,Eu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),wu(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,s,a)=>{try{return J_(e),n.invokeTask(o,i,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),X_(e)}},onInvoke:(n,r,o,i,s,a,l)=>{try{return J_(e),n.invoke(o,i,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&t(),X_(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,wu(e),Eu(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Le.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(Le.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,gA,Gs,Gs);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const gA={};function Eu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function wu(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function J_(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function X_(e){e._nesting--,Eu(e)}class yA{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new ze,this.onMicrotaskEmpty=new ze,this.onStable=new ze,this.onError=new ze}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}let Iu=(()=>{class e{constructor(n){this._ngZone=n,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Le.assertNotInAngularZone(),bu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())bu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(n,r,o){return[]}}return e.\u0275fac=function(n){return new(n||e)(Y(Le))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),ey=(()=>{class e{constructor(){this._applications=new Map,Mu.addToWindow(this)}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Mu.findTestabilityInTree(this,n,r)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();class CA{addToWindow(t){}findTestabilityInTree(t,n,r){return null}}let Mu=new CA,ny=!1;let zt;const oy=new X("AllowMultipleToken");function iy(e,t,n=[]){const r=`Platform: ${t}`,o=new X(r);return(i=[])=>{let s=sy();if(!s||s.injector.get(oy,!1))if(e)e(n.concat(i).concat({provide:o,useValue:!0}));else{const a=n.concat(i).concat({provide:o,useValue:!0},{provide:Xo,useValue:"platform"});!function(e){if(zt&&!zt.destroyed&&!zt.injector.get(oy,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");zt=e.get(ay);const t=e.get(K_,null);t&&t.forEach(n=>n())}(pe.create({providers:a,name:r}))}return function(e){const t=sy();if(!t)throw new Error("No platform exists!");if(!t.injector.get(e,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return t}(o)}}function sy(){return zt&&!zt.destroyed?zt:null}let ay=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const a=function(e,t){let n;return n="noop"===e?new yA:("zone.js"===e?void 0:e)||new Le({enableLongStackTrace:(ny=!0,!0),shouldCoalesceEventChangeDetection:!!(null==t?void 0:t.ngZoneEventCoalescing),shouldCoalesceRunChangeDetection:!!(null==t?void 0:t.ngZoneRunCoalescing)}),n}(r?r.ngZone:void 0,{ngZoneEventCoalescing:r&&r.ngZoneEventCoalescing||!1,ngZoneRunCoalescing:r&&r.ngZoneRunCoalescing||!1}),l=[{provide:Le,useValue:a}];return a.run(()=>{const c=pe.create({providers:l,parent:this.injector,name:n.moduleType.name}),u=n.create(c),d=u.injector.get(ir,null);if(!d)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return a.runOutsideAngular(()=>{const f=a.onError.subscribe({next:h=>{d.handleError(h)}});u.onDestroy(()=>{Tu(this._modules,u),f.unsubscribe()})}),function(e,t,n){try{const r=n();return Vs(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(d,a,()=>{const f=u.injector.get(go);return f.runInitializers(),f.donePromise.then(()=>(Vc(u.injector.get(Hn,Bs)||Bs),this._moduleDoBootstrap(u),u))})})}bootstrapModule(n,r=[]){const o=ly({},r);return function(e,t,n){const r=new ou(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(wi);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new Error(`The module ${W(n.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(n=>n.destroy()),this._destroyListeners.forEach(n=>n()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(Y(pe))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function ly(e,t){return Array.isArray(t)?t.reduce(ly,e):Object.assign(Object.assign({},e),t)}let wi=(()=>{class e{constructor(n,r,o,i,s){this._zone=n,this._injector=r,this._exceptionHandler=o,this._componentFactoryResolver=i,this._initStatus=s,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const a=new qe(c=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{c.next(this._stable),c.complete()})}),l=new qe(c=>{let u;this._zone.runOutsideAngular(()=>{u=this._zone.onStable.subscribe(()=>{Le.assertNotInAngularZone(),bu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,c.next(!0))})})});const d=this._zone.onUnstable.subscribe(()=>{Le.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{c.next(!1)}))});return()=>{u.unsubscribe(),d.unsubscribe()}});this.isStable=function(...e){let t=Number.POSITIVE_INFINITY,n=null,r=e[e.length-1];return function(e){return e&&"function"==typeof e.schedule}(r)?(n=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(t=e.pop())):"number"==typeof r&&(t=e.pop()),null===n&&1===e.length&&e[0]instanceof qe?e[0]:Fv(t)(function(e,t){return t?ef(e,t):new qe(Yd(e))}(e,n))}(a,l.pipe(e=>nf()(function(e,t){return function(r){let o;o="function"==typeof e?e:function(){return e};const i=Object.create(r,Bv);return i.source=r,i.subjectFactory=o,i}}(Gv)(e))))}bootstrap(n,r){if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");let o;o=n instanceof Vm?n:this._componentFactoryResolver.resolveComponentFactory(n),this.componentTypes.push(o.componentType);const i=function(e){return e.isBoundToModule}(o)?void 0:this._injector.get(ur),a=o.create(pe.NULL,[],r||o.selector,i),l=a.location.nativeElement,c=a.injector.get(Iu,null),u=c&&a.injector.get(ey);return c&&u&&u.registerApplication(l,c),a.onDestroy(()=>{this.detachView(a.hostView),Tu(this.components,a),u&&u.unregisterApplication(l)}),this._loadComponent(a),a}tick(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Tu(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(oA,[]).concat(this._bootstrapListeners).forEach(o=>o(n))}ngOnDestroy(){this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return e.\u0275fac=function(n){return new(n||e)(Y(Le),Y(pe),Y(ir),Y(io),Y(go))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function Tu(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const WA=iy(null,"core",[{provide:Cu,useValue:"unknown"},{provide:ay,deps:[pe]},{provide:ey,deps:[]},{provide:vu,deps:[]}]),ZA=[{provide:wi,useClass:wi,deps:[Le,pe,ir,io,go]},{provide:ZM,deps:[Le],useFactory:function(e){let t=[];return e.onStable.subscribe(()=>{for(;t.length;)t.pop()()}),function(n){t.push(n)}}},{provide:go,useClass:go,deps:[[new en,na]]},{provide:oa,useClass:oa,deps:[]},rA,{provide:ui,useFactory:function(){return G1},deps:[]},{provide:ao,useFactory:function(){return z1},deps:[]},{provide:Hn,useFactory:function(e){return Vc(e=e||"undefined"!=typeof $localize&&$localize.locale||Bs),e},deps:[[new Uo(Hn),new en,new rr]]},{provide:Y_,useValue:"USD"}];let XA=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(Y(wi))},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:ZA}),e})(),pa=null;function gr(){return pa}const nt=new X("DocumentToken");var Te=(()=>((Te=Te||{})[Te.Zero=0]="Zero",Te[Te.One=1]="One",Te[Te.Two=2]="Two",Te[Te.Few=3]="Few",Te[Te.Many=4]="Many",Te[Te.Other=5]="Other",Te))();const ax=function(e){return function(e){const t=function(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=um(t);if(n)return n;const r=t.split("-")[0];if(n=um(r),n)return n;if("en"===r)return DI;throw new Error(`Missing locale data for the locale "${e}".`)}(e)[A.PluralCase]};class wa{}let Vx=(()=>{class e extends wa{constructor(n){super(),this.locale=n}getPluralCategory(n,r){switch(ax(r||this.locale)(n)){case Te.Zero:return"zero";case Te.One:return"one";case Te.Two:return"two";case Te.Few:return"few";case Te.Many:return"many";default:return"other"}}}return e.\u0275fac=function(n){return new(n||e)(Y(Hn))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),Ni=(()=>{class e{constructor(n,r,o,i){this._iterableDiffers=n,this._keyValueDiffers=r,this._ngEl=o,this._renderer=i,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(n){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof n?n.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(n){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof n?n.split(/\s+/):n,this._rawClass&&(ni(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const n=this._iterableDiffer.diff(this._rawClass);n&&this._applyIterableChanges(n)}else if(this._keyValueDiffer){const n=this._keyValueDiffer.diff(this._rawClass);n&&this._applyKeyValueChanges(n)}}_applyKeyValueChanges(n){n.forEachAddedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachChangedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachRemovedItem(r=>{r.previousValue&&this._toggleClass(r.key,!1)})}_applyIterableChanges(n){n.forEachAddedItem(r=>{if("string"!=typeof r.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${W(r.item)}`);this._toggleClass(r.item,!0)}),n.forEachRemovedItem(r=>this._toggleClass(r.item,!1))}_applyClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!0)):Object.keys(n).forEach(r=>this._toggleClass(r,!!n[r])))}_removeClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!1)):Object.keys(n).forEach(r=>this._toggleClass(r,!1)))}_toggleClass(n,r){(n=n.trim())&&n.split(/\s+/g).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}}return e.\u0275fac=function(n){return new(n||e)(I(ui),I(ao),I($e),I(cr))},e.\u0275dir=L({type:e,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"}}),e})();class Bx{constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Yu=(()=>{class e{constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;if(!this._differ&&n)try{this._differ=this._differs.find(n).create(this.ngForTrackBy)}catch(r){throw new Error(`Cannot find a differ supporting object '${n}' of type '${function(e){return e.name||typeof e}(n)}'. NgFor only supports binding to Iterables such as Arrays.`)}}if(this._differ){const n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){const r=[];n.forEachOperation((o,i,s)=>{if(null==o.previousIndex){const a=this._viewContainer.createEmbeddedView(this._template,new Bx(null,this._ngForOf,-1,-1),null===s?void 0:s),l=new Wy(o,a);r.push(l)}else if(null==s)this._viewContainer.remove(null===i?void 0:i);else if(null!==i){const a=this._viewContainer.get(i);this._viewContainer.move(a,s);const l=new Wy(o,a);r.push(l)}});for(let o=0;o{this._viewContainer.get(o.currentIndex).context.$implicit=o.item})}_perViewChange(n,r){n.context.$implicit=r.item}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(I(dn),I(bn),I(ui))},e.\u0275dir=L({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}}),e})();class Wy{constructor(t,n){this.record=t,this.view=n}}let yo=(()=>{class e{constructor(n,r){this._viewContainer=n,this._context=new jx,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){qy("ngIfThen",n),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){qy("ngIfElse",n),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(I(dn),I(bn))},e.\u0275dir=L({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}}),e})();class jx{constructor(){this.$implicit=null,this.ngIf=null}}function qy(e,t){if(t&&!t.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${W(t)}'.`)}let Yy=(()=>{class e{transform(n,r,o){if(null==n)return null;if(!this.supports(n))throw function(e,t){return Error(`InvalidPipeArgument: '${t}' for pipe '${W(e)}'`)}(e,n);return n.slice(r,o)}supports(n){return"string"==typeof n||Array.isArray(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275pipe=ot({name:"slice",type:e,pure:!1}),e})(),fN=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:[{provide:wa,useClass:Vx}]}),e})();class td extends class extends class{}{constructor(){super(...arguments),this.supportsDOMEvents=!0}}{static makeCurrent(){!function(e){pa||(pa=e)}(new td)}onAndCancel(t,n,r){return t.addEventListener(n,r,!1),()=>{t.removeEventListener(n,r,!1)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=(Ri=Ri||document.querySelector("base"),Ri?Ri.getAttribute("href"):null);return null==n?null:function(e){Ia=Ia||document.createElement("a"),Ia.setAttribute("href",e);const t=Ia.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){Ri=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let Ia,Ri=null;const Xy=new X("TRANSITION_ID"),bN=[{provide:na,useFactory:function(e,t,n){return()=>{n.get(go).donePromise.then(()=>{const r=gr(),o=t.querySelectorAll(`style[ng-transition="${e}"]`);for(let i=0;i{const i=t.findTestabilityInTree(r,o);if(null==i)throw new Error("Could not find testability for element.");return i},ne.getAllAngularTestabilities=()=>t.getAllTestabilities(),ne.getAllAngularRootElements=()=>t.getAllRootElements(),ne.frameworkStabilizers||(ne.frameworkStabilizers=[]),ne.frameworkStabilizers.push(r=>{const o=ne.getAllAngularTestabilities();let i=o.length,s=!1;const a=function(l){s=s||l,i--,0==i&&r(s)};o.forEach(function(l){l.whenStable(a)})})}findTestabilityInTree(t,n,r){if(null==n)return null;const o=t.getTestability(n);return null!=o?o:r?gr().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null}}let EN=(()=>{class e{build(){return new XMLHttpRequest}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Fi=new X("EventManagerPlugins");let Ta=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>o.manager=this),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}addGlobalEventListener(n,r,o){return this._findPluginFor(r).addGlobalEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){const r=this._eventNameToPlugin.get(n);if(r)return r;const o=this._plugins;for(let i=0;i{class e{constructor(){this._stylesSet=new Set}addStyles(n){const r=new Set;n.forEach(o=>{this._stylesSet.has(o)||(this._stylesSet.add(o),r.add(o))}),this.onStylesAdded(r)}onStylesAdded(n){}getAllStyles(){return Array.from(this._stylesSet)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),Oi=(()=>{class e extends tC{constructor(n){super(),this._doc=n,this._hostNodes=new Map,this._hostNodes.set(n.head,[])}_addStylesToHost(n,r,o){n.forEach(i=>{const s=this._doc.createElement("style");s.textContent=i,o.push(r.appendChild(s))})}addHost(n){const r=[];this._addStylesToHost(this._stylesSet,n,r),this._hostNodes.set(n,r)}removeHost(n){const r=this._hostNodes.get(n);r&&r.forEach(nC),this._hostNodes.delete(n)}onStylesAdded(n){this._hostNodes.forEach((r,o)=>{this._addStylesToHost(n,o,r)})}ngOnDestroy(){this._hostNodes.forEach(n=>n.forEach(nC))}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function nC(e){gr().remove(e)}const od={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},id=/%COMP%/g;function Aa(e,t,n){for(let r=0;r{if("__ngUnwrap__"===t)return e;!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}let sd=(()=>{class e{constructor(n,r,o){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.rendererByCompId=new Map,this.defaultRenderer=new ad(n)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;switch(r.encapsulation){case Se.Emulated:{let o=this.rendererByCompId.get(r.id);return o||(o=new LN(this.eventManager,this.sharedStylesHost,r,this.appId),this.rendererByCompId.set(r.id,o)),o.applyToHost(n),o}case 1:case Se.ShadowDom:return new BN(this.eventManager,this.sharedStylesHost,n,r);default:if(!this.rendererByCompId.has(r.id)){const o=Aa(r.id,r.styles,[]);this.sharedStylesHost.addStyles(o),this.rendererByCompId.set(r.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return e.\u0275fac=function(n){return new(n||e)(Y(Ta),Y(Oi),Y(Ei))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();class ad{constructor(t){this.eventManager=t,this.data=Object.create(null)}destroy(){}createElement(t,n){return n?document.createElementNS(od[n]||n,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,n){t.appendChild(n)}insertBefore(t,n,r){t&&t.insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?document.querySelector(t):t;if(!r)throw new Error(`The selector "${t}" did not match any elements`);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=od[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=od[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(mt.DashCase|mt.Important)?t.style.setProperty(n,r,o&mt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&mt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,n,iC(r)):this.eventManager.addEventListener(t,n,iC(r))}}class LN extends ad{constructor(t,n,r,o){super(t),this.component=r;const i=Aa(o+"-"+r.id,r.styles,[]);n.addStyles(i),this.contentAttr=function(e){return"_ngcontent-%COMP%".replace(id,e)}(o+"-"+r.id),this.hostAttr=function(e){return"_nghost-%COMP%".replace(id,e)}(o+"-"+r.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}class BN extends ad{constructor(t,n,r,o){super(t),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const i=Aa(o.id,o.styles,[]);for(let s=0;s{class e extends rd{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const lC=["alt","control","meta","shift"],qN={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},cC={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"},QN={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let KN=(()=>{class e extends rd{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),s=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>gr().onAndCancel(n,i.domEventName,s))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let s="";if(lC.forEach(l=>{const c=r.indexOf(l);c>-1&&(r.splice(c,1),s+=l+".")}),s+=i,0!=r.length||0===i.length)return null;const a={};return a.domEventName=o,a.fullKey=s,a}static getEventFullKey(n){let r="",o=function(e){let t=e.key;if(null==t){if(t=e.keyIdentifier,null==t)return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&cC.hasOwnProperty(t)&&(t=cC[t]))}return qN[t]||t}(n);return o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),lC.forEach(i=>{i!=o&&QN[i](n)&&(r+=i+".")}),r+=o,r}static eventCallback(n,r,o){return i=>{e.getEventFullKey(i)===n&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){switch(n){case"esc":return"escape";default:return n}}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const rR=iy(WA,"browser",[{provide:Cu,useValue:"browser"},{provide:K_,useValue:function(){td.makeCurrent(),nd.init()},multi:!0},{provide:nt,useFactory:function(){return function(e){il=e}(document),document},deps:[]}]),oR=[[],{provide:Xo,useValue:"root"},{provide:ir,useFactory:function(){return new ir},deps:[]},{provide:Fi,useClass:HN,multi:!0,deps:[nt,Le,Cu]},{provide:Fi,useClass:KN,multi:!0,deps:[nt]},[],{provide:sd,useClass:sd,deps:[Ta,Oi,Ei]},{provide:zs,useExisting:sd},{provide:tC,useExisting:Oi},{provide:Oi,useClass:Oi,deps:[nt]},{provide:Iu,useClass:Iu,deps:[Le]},{provide:Ta,useClass:Ta,deps:[Fi,Le]},{provide:class{},useClass:EN,deps:[]},[]];let iR=(()=>{class e{constructor(n){if(n)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(n){return{ngModule:e,providers:[{provide:Ei,useValue:n.appId},{provide:Xy,useExisting:Ei},bN]}}}return e.\u0275fac=function(n){return new(n||e)(Y(e,12))},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:oR,imports:[fN,XA]}),e})();function Sa(e,t){return new qe(n=>{const r=e.length;if(0===r)return void n.complete();const o=new Array(r);let i=0,s=0;for(let a=0;a{c||(c=!0,s++),o[a]=u},error:u=>n.error(u),complete:()=>{i++,(i===r||!c)&&(s===r&&n.next(t?t.reduce((u,d,f)=>(u[d]=o[f],u),{}):o),n.complete())}}))}})}"undefined"!=typeof window&&window;let dC=(()=>{class e{constructor(n,r){this._renderer=n,this._elementRef=r,this.onChange=o=>{},this.onTouched=()=>{}}setProperty(n,r){this._renderer.setProperty(this._elementRef.nativeElement,n,r)}registerOnTouched(n){this.onTouched=n}registerOnChange(n){this.onChange=n}setDisabledState(n){this.setProperty("disabled",n)}}return e.\u0275fac=function(n){return new(n||e)(I(cr),I($e))},e.\u0275dir=L({type:e}),e})(),mr=(()=>{class e extends dC{}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,features:[ge]}),e})();const fn=new X("NgValueAccessor"),gR={provide:fn,useExisting:ue(()=>Pi),multi:!0},_R=new X("CompositionEventMode");let Pi=(()=>{class e extends dC{constructor(n,r,o){super(n,r),this._compositionMode=o,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const e=gr()?gr().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}writeValue(n){this.setProperty("value",null==n?"":n)}_handleInput(n){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(n)}_compositionStart(){this._composing=!0}_compositionEnd(n){this._composing=!1,this._compositionMode&&this.onChange(n)}}return e.\u0275fac=function(n){return new(n||e)(I(cr),I($e),I(_R,8))},e.\u0275dir=L({type:e,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(n,r){1&n&&Z("input",function(i){return r._handleInput(i.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(i){return r._compositionEnd(i.target.value)})},features:[_e([gR]),ge]}),e})();const We=new X("NgValidators"),Gn=new X("NgAsyncValidators");function bC(e){return null!=e}function EC(e){const t=Vs(e)?Wa(e):e;return Rc(t),t}function wC(e){let t={};return e.forEach(n=>{t=null!=n?Object.assign(Object.assign({},t),n):t}),0===Object.keys(t).length?null:t}function IC(e,t){return t.map(n=>n(e))}function MC(e){return e.map(t=>function(e){return!e.validate}(t)?t:n=>t.validate(n))}function fd(e){return null!=e?function(e){if(!e)return null;const t=e.filter(bC);return 0==t.length?null:function(n){return wC(IC(n,t))}}(MC(e)):null}function hd(e){return null!=e?function(e){if(!e)return null;const t=e.filter(bC);return 0==t.length?null:function(n){return function(...e){if(1===e.length){const t=e[0];if($a(t))return Sa(t,null);if(Ua(t)&&Object.getPrototypeOf(t)===Object.prototype){const n=Object.keys(t);return Sa(n.map(r=>t[r]),n)}}if("function"==typeof e[e.length-1]){const t=e.pop();return Sa(e=1===e.length&&$a(e[0])?e[0]:e,null).pipe(za(n=>t(...n)))}return Sa(e,null)}(IC(n,t).map(EC)).pipe(za(wC))}}(MC(e)):null}function SC(e,t){return null===e?[t]:Array.isArray(e)?[...e,t]:[e,t]}function pd(e){return e?Array.isArray(e)?e:[e]:[]}function xa(e,t){return Array.isArray(e)?e.includes(t):e===t}function RC(e,t){const n=pd(t);return pd(e).forEach(o=>{xa(n,o)||n.push(o)}),n}function FC(e,t){return pd(t).filter(n=>!xa(e,n))}let OC=(()=>{class e{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(n){this._rawValidators=n||[],this._composedValidatorFn=fd(this._rawValidators)}_setAsyncValidators(n){this._rawAsyncValidators=n||[],this._composedAsyncValidatorFn=hd(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(n){this._onDestroyCallbacks.push(n)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(n=>n()),this._onDestroyCallbacks=[]}reset(n){this.control&&this.control.reset(n)}hasError(n,r){return!!this.control&&this.control.hasError(n,r)}getError(n,r){return this.control?this.control.getError(n,r):null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275dir=L({type:e}),e})(),rt=(()=>{class e extends OC{get formDirective(){return null}get path(){return null}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,features:[ge]}),e})();class Wn extends OC{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}let gd=(()=>{class e extends class{constructor(t){this._cd=t}is(t){var n,r,o;return"submitted"===t?!!(null===(n=this._cd)||void 0===n?void 0:n.submitted):!!(null===(o=null===(r=this._cd)||void 0===r?void 0:r.control)||void 0===o?void 0:o[t])}}{constructor(n){super(n)}}return e.\u0275fac=function(n){return new(n||e)(I(Wn,2))},e.\u0275dir=L({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(n,r){2&n&&ks("ng-untouched",r.is("untouched"))("ng-touched",r.is("touched"))("ng-pristine",r.is("pristine"))("ng-dirty",r.is("dirty"))("ng-valid",r.is("valid"))("ng-invalid",r.is("invalid"))("ng-pending",r.is("pending"))},features:[ge]}),e})();function Vi(e,t){(function(e,t){const n=function(e){return e._rawValidators}(e);null!==t.validator?e.setValidators(SC(n,t.validator)):"function"==typeof n&&e.setValidators([n]);const r=function(e){return e._rawAsyncValidators}(e);null!==t.asyncValidator?e.setAsyncValidators(SC(r,t.asyncValidator)):"function"==typeof r&&e.setAsyncValidators([r]);const o=()=>e.updateValueAndValidity();Oa(t._rawValidators,o),Oa(t._rawAsyncValidators,o)})(e,t),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(n=>{e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&VC(e,t)})}(e,t),function(e,t){const n=(r,o)=>{t.valueAccessor.writeValue(r),o&&t.viewToModelUpdate(r)};e.registerOnChange(n),t._registerOnDestroy(()=>{e._unregisterOnChange(n)})}(e,t),function(e,t){t.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&VC(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),function(e,t){if(t.valueAccessor.setDisabledState){const n=r=>{t.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(n),t._registerOnDestroy(()=>{e._unregisterOnDisabledChange(n)})}}(e,t)}function Oa(e,t){e.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(t)})}function VC(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function Va(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const ki="VALID",ka="INVALID",Co="PENDING",Li="DISABLED";function Dd(e){return(Ed(e)?e.validators:e)||null}function BC(e){return Array.isArray(e)?fd(e):e||null}function bd(e,t){return(Ed(t)?t.asyncValidators:e)||null}function HC(e){return Array.isArray(e)?hd(e):e||null}function Ed(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}class wd{constructor(t,n){this._hasOwnPendingAsyncValidator=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._rawValidators=t,this._rawAsyncValidators=n,this._composedValidatorFn=BC(this._rawValidators),this._composedAsyncValidatorFn=HC(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get valid(){return this.status===ki}get invalid(){return this.status===ka}get pending(){return this.status==Co}get disabled(){return this.status===Li}get enabled(){return this.status!==Li}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this._rawValidators=t,this._composedValidatorFn=BC(t)}setAsyncValidators(t){this._rawAsyncValidators=t,this._composedAsyncValidatorFn=HC(t)}addValidators(t){this.setValidators(RC(t,this._rawValidators))}addAsyncValidators(t){this.setAsyncValidators(RC(t,this._rawAsyncValidators))}removeValidators(t){this.setValidators(FC(t,this._rawValidators))}removeAsyncValidators(t){this.setAsyncValidators(FC(t,this._rawAsyncValidators))}hasValidator(t){return xa(this._rawValidators,t)}hasAsyncValidator(t){return xa(this._rawAsyncValidators,t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(n=>{n.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status=Co,!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=Li,this.errors=null,this._forEachChild(r=>{r.disable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:n})),this._onDisabledChange.forEach(r=>r(!0))}enable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=ki,this._forEachChild(r=>{r.enable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:n})),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===ki||this.status===Co)&&this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(n=>n._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Li:ki}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status=Co,this._hasOwnPendingAsyncValidator=!0;const n=EC(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(r=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(r,{emitEvent:t})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(t,n={}){this.errors=t,this._updateControlsErrors(!1!==n.emitEvent)}get(t){return function(e,t,n){if(null==t||(Array.isArray(t)||(t=t.split(".")),Array.isArray(t)&&0===t.length))return null;let r=e;return t.forEach(o=>{r=r instanceof Id?r.controls.hasOwnProperty(o)?r.controls[o]:null:r instanceof RR&&r.at(o)||null}),r}(this,t)}getError(t,n){const r=n?this.get(n):this;return r&&r.errors?r.errors[t]:null}hasError(t,n){return!!this.getError(t,n)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new ze,this.statusChanges=new ze}_calculateStatus(){return this._allControlsDisabled()?Li:this.errors?ka:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Co)?Co:this._anyControlsHaveStatus(ka)?ka:ki}_anyControlsHaveStatus(t){return this._anyControls(n=>n.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_isBoxedValue(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){Ed(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}}class La extends wd{constructor(t=null,n,r){super(Dd(n),bd(r,n)),this._onChange=[],this._applyFormState(t),this._setUpdateStrategy(n),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}setValue(t,n={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==n.emitModelToViewChange&&this._onChange.forEach(r=>r(this.value,!1!==n.emitViewToModelChange)),this.updateValueAndValidity(n)}patchValue(t,n={}){this.setValue(t,n)}reset(t=null,n={}){this._applyFormState(t),this.markAsPristine(n),this.markAsUntouched(n),this.setValue(this.value,n),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){Va(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){Va(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}}class Id extends wd{constructor(t,n,r){super(Dd(n),bd(r,n)),this.controls=t,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(t,n){return this.controls[t]?this.controls[t]:(this.controls[t]=n,n.setParent(this),n._registerOnCollectionChange(this._onCollectionChange),n)}addControl(t,n,r={}){this.registerControl(t,n),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}removeControl(t,n={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}setControl(t,n,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],n&&this.registerControl(t,n),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,n={}){this._checkAllValuesPresent(t),Object.keys(t).forEach(r=>{this._throwIfControlMissing(r),this.controls[r].setValue(t[r],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(t,n={}){null!=t&&(Object.keys(t).forEach(r=>{this.controls[r]&&this.controls[r].patchValue(t[r],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(t={},n={}){this._forEachChild((r,o)=>{r.reset(t[o],{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this._reduceChildren({},(t,n,r)=>(t[r]=n instanceof La?n.value:n.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(n,r)=>!!r._syncPendingControls()||n);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!Object.keys(this.controls).length)throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.controls[t])throw new Error(`Cannot find form control with name: ${t}.`)}_forEachChild(t){Object.keys(this.controls).forEach(n=>{const r=this.controls[n];r&&t(r,n)})}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){for(const n of Object.keys(this.controls)){const r=this.controls[n];if(this.contains(n)&&t(r))return!0}return!1}_reduceValue(){return this._reduceChildren({},(t,n,r)=>((n.enabled||this.disabled)&&(t[r]=n.value),t))}_reduceChildren(t,n){let r=t;return this._forEachChild((o,i)=>{r=n(r,o,i)}),r}_allControlsDisabled(){for(const t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(t){this._forEachChild((n,r)=>{if(void 0===t[r])throw new Error(`Must supply a value for form control with name: '${r}'.`)})}}class RR extends wd{constructor(t,n,r){super(Dd(n),bd(r,n)),this.controls=t,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(t){return this.controls[t]}push(t,n={}){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}insert(t,n,r={}){this.controls.splice(t,0,n),this._registerControl(n),this.updateValueAndValidity({emitEvent:r.emitEvent})}removeAt(t,n={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),this.updateValueAndValidity({emitEvent:n.emitEvent})}setControl(t,n,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),n&&(this.controls.splice(t,0,n),this._registerControl(n)),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,n={}){this._checkAllValuesPresent(t),t.forEach((r,o)=>{this._throwIfControlMissing(o),this.at(o).setValue(r,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(t,n={}){null!=t&&(t.forEach((r,o)=>{this.at(o)&&this.at(o).patchValue(r,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(t=[],n={}){this._forEachChild((r,o)=>{r.reset(t[o],{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this.controls.map(t=>t instanceof La?t.value:t.getRawValue())}clear(t={}){this.controls.length<1||(this._forEachChild(n=>n._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:t.emitEvent}))}_syncPendingControls(){let t=this.controls.reduce((n,r)=>!!r._syncPendingControls()||n,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(t))throw new Error(`Cannot find form control at index ${t}`)}_forEachChild(t){this.controls.forEach((n,r)=>{t(n,r)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(n=>n.enabled&&t(n))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_checkAllValuesPresent(t){this._forEachChild((n,r)=>{if(void 0===t[r])throw new Error(`Must supply a value for form control at index: ${r}.`)})}_allControlsDisabled(){for(const t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}}const PR={provide:Wn,useExisting:ue(()=>Ba)},UC=(()=>Promise.resolve(null))();let Ba=(()=>{class e extends Wn{constructor(n,r,o,i){super(),this.control=new La,this._registered=!1,this.update=new ze,this._parent=n,this._setValidators(r),this._setAsyncValidators(o),this.valueAccessor=function(e,t){if(!t)return null;let n,r,o;return Array.isArray(t),t.forEach(i=>{i.constructor===Pi?n=i:function(e){return Object.getPrototypeOf(e.constructor)===mr}(i)?r=i:o=i}),o||r||n||null}(0,i)}ngOnChanges(n){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in n&&this._updateDisabled(n),function(e,t){if(!e.hasOwnProperty("model"))return!1;const n=e.model;return!!n.isFirstChange()||!Object.is(t,n.currentValue)}(n,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?function(e,t){return[...t.path,e]}(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(n){this.viewModel=n,this.update.emit(n)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Vi(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(n){UC.then(()=>{this.control.setValue(n,{emitViewToModelChange:!1})})}_updateDisabled(n){const r=n.isDisabled.currentValue,o=""===r||r&&"false"!==r;UC.then(()=>{o&&!this.control.disabled?this.control.disable():!o&&this.control.disabled&&this.control.enable()})}}return e.\u0275fac=function(n){return new(n||e)(I(rt,9),I(We,10),I(Gn,10),I(fn,10))},e.\u0275dir=L({type:e,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[_e([PR]),ge,ft]}),e})(),zC=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({}),e})();const HR={provide:fn,useExisting:ue(()=>Td),multi:!0};let Td=(()=>{class e extends mr{writeValue(n){this.setProperty("value",parseFloat(n))}registerOnChange(n){this.onChange=r=>{n(""==r?null:parseFloat(r))}}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,selectors:[["input","type","range","formControlName",""],["input","type","range","formControl",""],["input","type","range","ngModel",""]],hostBindings:function(n,r){1&n&&Z("change",function(i){return r.onChange(i.target.value)})("input",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},features:[_e([HR]),ge]}),e})();const WR={provide:fn,useExisting:ue(()=>Hi),multi:!0};function YC(e,t){return null==e?`${t}`:(t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Hi=(()=>{class e extends mr{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){this.value=n;const r=this._getOptionId(n);null==r&&this.setProperty("selectedIndex",-1);const o=YC(r,n);this.setProperty("value",o)}registerOnChange(n){this.onChange=r=>{this.value=this._getOptionValue(r),n(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(n){for(const r of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(r),n))return r;return null}_getOptionValue(n){const r=function(e){return e.split(":")[0]}(n);return this._optionMap.has(r)?this._optionMap.get(r):n}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(n,r){1&n&&Z("change",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},inputs:{compareWith:"compareWith"},features:[_e([WR]),ge]}),e})(),Rd=(()=>{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption())}set ngValue(n){null!=this._select&&(this._select._optionMap.set(this.id,n),this._setElementValue(YC(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._setElementValue(n),this._select&&this._select.writeValue(this._select.value)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(I($e),I(cr),I(Hi,9))},e.\u0275dir=L({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})();const QR={provide:fn,useExisting:ue(()=>Fd),multi:!0};function ZC(e,t){return null==e?`${t}`:("string"==typeof t&&(t=`'${t}'`),t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Fd=(()=>{class e extends mr{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){let r;if(this.value=n,Array.isArray(n)){const o=n.map(i=>this._getOptionId(i));r=(i,s)=>{i._setSelected(o.indexOf(s.toString())>-1)}}else r=(o,i)=>{o._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(n){this.onChange=r=>{const o=[];if(void 0!==r.selectedOptions){const i=r.selectedOptions;for(let s=0;s{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption(this))}set ngValue(n){null!=this._select&&(this._value=n,this._setElementValue(ZC(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._select?(this._value=n,this._setElementValue(ZC(this.id,n)),this._select.writeValue(this._select.value)):this._setElementValue(n)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}_setSelected(n){this._renderer.setProperty(this._element.nativeElement,"selected",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(I($e),I(cr),I(Fd,9))},e.\u0275dir=L({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})(),av=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({imports:[[zC]]}),e})(),oF=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({imports:[av]}),e})();class lv{constructor(){this.riskHotspotsSettings=null,this.coverageInfoSettings=null}}class iF{constructor(){this.groupingMaximum=0,this.grouping=0,this.historyComparisionDate="",this.historyComparisionType="",this.filter="",this.sortBy="name",this.sortOrder="asc",this.collapseStates=[]}}class sF{constructor(t){this.et="",this.et=t.et,this.cl=t.cl,this.ucl=t.ucl,this.cal=t.cal,this.tl=t.tl,this.lcq=t.lcq,this.cb=t.cb,this.tb=t.tb,this.bcq=t.bcq}get coverageRatioText(){return 0===this.tl?"-":this.cl+"/"+this.cal}get branchCoverageRatioText(){return 0===this.tb?"-":this.cb+"/"+this.tb}}class vo{static roundNumber(t,n){return Math.floor(t*Math.pow(10,n))/Math.pow(10,n)}static getNthOrLastIndexOf(t,n,r){let o=0,i=-1,s=-1;for(;o{this.historicCoverages.push(new sF(r))})}get coverage(){return 0===this.coverableLines?"-"!==this.methodCoverage?parseFloat(this.methodCoverage):NaN:vo.roundNumber(100*this.coveredLines/this.coverableLines,1)}get coverageType(){return 0===this.coverableLines?"-"!==this.methodCoverage?this._coverageType:"":this._coverageType}visible(t,n){if(""!==t&&-1===this.name.toLowerCase().indexOf(t.toLowerCase()))return!1;if(""===n||null===this.currentHistoricCoverage)return!0;if("allChanges"===n){if(this.coveredLines===this.currentHistoricCoverage.cl&&this.uncoveredLines===this.currentHistoricCoverage.ucl&&this.coverableLines===this.currentHistoricCoverage.cal&&this.totalLines===this.currentHistoricCoverage.tl&&this.coveredBranches===this.currentHistoricCoverage.cb&&this.totalBranches===this.currentHistoricCoverage.tb)return!1}else if("lineCoverageIncreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r<=this.currentHistoricCoverage.lcq)return!1}else if("lineCoverageDecreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r>=this.currentHistoricCoverage.lcq)return!1}else if("branchCoverageIncreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.bcq)return!1}else if("branchCoverageDecreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.bcq)return!1}return!0}updateCurrentHistoricCoverage(t){if(this.currentHistoricCoverage=null,""!==t)for(let n=0;n-1&&null===n}visible(t,n){if(""!==t&&this.name.toLowerCase().indexOf(t.toLowerCase())>-1)return!0;for(let r=0;r{class e{get nativeWindow(){return window}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function lF(e,t){1&e&&k(0,"td",3)}function cF(e,t){1&e&&k(0,"td"),2&e&&Ln("green ",w().greenClass,"")}function uF(e,t){1&e&&k(0,"td"),2&e&&Ln("red ",w().redClass,"")}let uv=(()=>{class e{constructor(){this.grayVisible=!0,this.greenVisible=!1,this.redVisible=!1,this.greenClass="",this.redClass="",this._percentage=NaN}get percentage(){return this._percentage}set percentage(n){this._percentage=n,this.grayVisible=isNaN(n),this.greenVisible=!isNaN(n)&&Math.round(n)>0,this.redVisible=!isNaN(n)&&100-Math.round(n)>0,this.greenClass="covered"+Math.round(n),this.redClass="covered"+(100-Math.round(n))}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275cmp=xn({type:e,selectors:[["coverage-bar"]],inputs:{percentage:"percentage"},decls:4,vars:3,consts:[[1,"coverage"],["class","gray covered100",4,"ngIf"],[3,"class",4,"ngIf"],[1,"gray","covered100"]],template:function(n,r){1&n&&(y(0,"table",0),S(1,lF,1,0,"td",1),S(2,cF,1,3,"td",2),S(3,uF,1,3,"td",2),C()),2&n&&(g(1),D("ngIf",r.grayVisible),g(1),D("ngIf",r.greenVisible),g(1),D("ngIf",r.redVisible))},directives:[yo],encapsulation:2,changeDetection:0}),e})();const dF=["codeelement-row",""];function fF(e,t){if(1&e&&(y(0,"th",2),M(1),C()),2&e){const n=w();g(1),P(n.element.coveredBranches)}}function hF(e,t){if(1&e&&(y(0,"th",2),M(1),C()),2&e){const n=w();g(1),P(n.element.totalBranches)}}function pF(e,t){if(1&e&&(y(0,"th",3),M(1),C()),2&e){const n=w();D("title",n.element.branchCoverageRatioText),g(1),P(n.element.branchCoveragePercentage)}}function gF(e,t){if(1&e&&(y(0,"th",2),k(1,"coverage-bar",4),C()),2&e){const n=w();g(1),D("percentage",n.element.branchCoverage)}}const mF=function(e,t){return{"icon-plus":e,"icon-minus":t}};let _F=(()=>{class e{constructor(){this.collapsed=!1,this.branchCoverageAvailable=!1}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275cmp=xn({type:e,selectors:[["","codeelement-row",""]],inputs:{element:"element",collapsed:"collapsed",branchCoverageAvailable:"branchCoverageAvailable"},attrs:dF,decls:20,vars:16,consts:[["href","#",3,"click"],[3,"ngClass"],[1,"right"],[1,"right",3,"title"],[3,"percentage"],["class","right",4,"ngIf"],["class","right",3,"title",4,"ngIf"]],template:function(n,r){1&n&&(y(0,"th"),y(1,"a",0),Z("click",function(i){return r.element.toggleCollapse(i)}),k(2,"i",1),M(3),C(),C(),y(4,"th",2),M(5),C(),y(6,"th",2),M(7),C(),y(8,"th",2),M(9),C(),y(10,"th",2),M(11),C(),y(12,"th",3),M(13),C(),y(14,"th",2),k(15,"coverage-bar",4),C(),S(16,fF,2,1,"th",5),S(17,hF,2,1,"th",5),S(18,pF,2,2,"th",6),S(19,gF,2,1,"th",5)),2&n&&(g(2),D("ngClass",su(13,mF,r.element.collapsed,!r.element.collapsed)),g(1),oe(" ",r.element.name,""),g(2),P(r.element.coveredLines),g(2),P(r.element.uncoveredLines),g(2),P(r.element.coverableLines),g(2),P(r.element.totalLines),g(1),D("title",r.element.coverageRatioText),g(1),P(r.element.coveragePercentage),g(2),D("percentage",r.element.coverage),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable))},directives:[Ni,uv,yo],encapsulation:2,changeDetection:0}),e})();const yF=["coverage-history-chart",""];let CF=(()=>{class e{constructor(){this.path=null,this._historicCoverages=[]}get historicCoverages(){return this._historicCoverages}set historicCoverages(n){if(this._historicCoverages=n,n.length>1){let r="";for(let o=0;o1),g(1),D("ngIf",null!==n.clazz.currentHistoricCoverage),g(1),D("ngIf",null===n.clazz.currentHistoricCoverage)}}function GF(e,t){if(1&e&&(y(0,"td",2),k(1,"coverage-bar",5),C()),2&e){const n=w();g(1),D("percentage",n.clazz.branchCoverage)}}let zF=(()=>{class e{constructor(){this.translations={},this.branchCoverageAvailable=!1,this.historyComparisionDate=""}getClassName(n,r){return n>r?"lightgreen":n1),g(1),D("ngIf",null!==r.clazz.currentHistoricCoverage),g(1),D("ngIf",null===r.clazz.currentHistoricCoverage),g(2),D("percentage",r.clazz.coverage),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable))},directives:[yo,uv,CF,Ni],encapsulation:2,changeDetection:0}),e})();function WF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.noGrouping)}}function qF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.byAssembly)}}function QF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.byNamespace+" "+n.settings.grouping)}}function KF(e,t){if(1&e&&(y(0,"option",26),M(1),C()),2&e){const n=t.$implicit;D("value",n),g(1),P(n)}}function YF(e,t){1&e&&k(0,"br")}function ZF(e,t){if(1&e&&(y(0,"option",32),M(1),C()),2&e){const n=w(4);g(1),oe(" ",n.translations.branchCoverageIncreaseOnly," ")}}function JF(e,t){if(1&e&&(y(0,"option",33),M(1),C()),2&e){const n=w(4);g(1),oe(" ",n.translations.branchCoverageDecreaseOnly," ")}}function XF(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"select",23),Z("ngModelChange",function(o){return le(n),w(3).settings.historyComparisionType=o}),y(2,"option",24),M(3),C(),y(4,"option",27),M(5),C(),y(6,"option",28),M(7),C(),y(8,"option",29),M(9),C(),S(10,ZF,2,1,"option",30),S(11,JF,2,1,"option",31),C(),C()}if(2&e){const n=w(3);g(1),D("ngModel",n.settings.historyComparisionType),g(2),P(n.translations.filter),g(2),P(n.translations.allChanges),g(2),P(n.translations.lineCoverageIncreaseOnly),g(2),P(n.translations.lineCoverageDecreaseOnly),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable)}}function eO(e,t){if(1&e){const n=ln();se(0),y(1,"div"),M(2),y(3,"select",23),Z("ngModelChange",function(o){return le(n),w(2).settings.historyComparisionDate=o})("ngModelChange",function(){return le(n),w(2).updateCurrentHistoricCoverage()}),y(4,"option",24),M(5),C(),S(6,KF,2,2,"option",25),C(),C(),S(7,YF,1,0,"br",0),S(8,XF,12,7,"div",0),ae()}if(2&e){const n=w(2);g(2),oe(" ",n.translations.compareHistory," "),g(1),D("ngModel",n.settings.historyComparisionDate),g(2),P(n.translations.date),g(1),D("ngForOf",n.historicCoverageExecutionTimes),g(1),D("ngIf",""!==n.settings.historyComparisionDate),g(1),D("ngIf",""!==n.settings.historyComparisionDate)}}function tO(e,t){1&e&&k(0,"col",8)}function nO(e,t){1&e&&k(0,"col",11)}function rO(e,t){1&e&&k(0,"col",12)}function oO(e,t){1&e&&k(0,"col",13)}const In=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function iO(e,t){if(1&e){const n=ln();y(0,"th",5),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("covered_branches",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"covered_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered_branches"!==n.settings.sortBy)),g(1),P(n.translations.covered)}}function sO(e,t){if(1&e){const n=ln();y(0,"th",5),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("total_branches",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"total_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total_branches"!==n.settings.sortBy)),g(1),P(n.translations.total)}}function aO(e,t){if(1&e){const n=ln();y(0,"th",19),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("branchcoverage",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"branchcoverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"branchcoverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"branchcoverage"!==n.settings.sortBy)),g(1),P(n.translations.branchCoverage)}}function lO(e,t){if(1&e&&k(0,"tr",35),2&e){const n=w().$implicit,r=w(2);D("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable)}}function cO(e,t){if(1&e&&k(0,"tr",37),2&e){const n=w().$implicit,r=w(3);D("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function uO(e,t){if(1&e&&(se(0),S(1,cO,1,4,"tr",36),ae()),2&e){const n=t.$implicit,r=w().$implicit,o=w(2);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function dO(e,t){if(1&e&&k(0,"tr",40),2&e){const n=w().$implicit,r=w(5);D("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function fO(e,t){if(1&e&&(se(0),S(1,dO,1,4,"tr",39),ae()),2&e){const n=t.$implicit,r=w(2).$implicit,o=w(3);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function hO(e,t){if(1&e&&(se(0),k(1,"tr",38),S(2,fO,2,1,"ng-container",22),ae()),2&e){const n=w().$implicit,r=w(3);g(1),D("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable),g(1),D("ngForOf",n.classes)}}function pO(e,t){if(1&e&&(se(0),S(1,hO,3,4,"ng-container",0),ae()),2&e){const n=t.$implicit,r=w().$implicit,o=w(2);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function gO(e,t){if(1&e&&(se(0),S(1,lO,1,3,"tr",34),S(2,uO,2,1,"ng-container",22),S(3,pO,2,1,"ng-container",22),ae()),2&e){const n=t.$implicit,r=w(2);g(1),D("ngIf",n.visible(r.settings.filter,r.settings.historyComparisionType)),g(1),D("ngForOf",n.classes),g(1),D("ngForOf",n.subElements)}}function mO(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"div",1),y(2,"div"),y(3,"a",2),Z("click",function(o){return le(n),w().collapseAll(o)}),M(4),C(),M(5," | "),y(6,"a",2),Z("click",function(o){return le(n),w().expandAll(o)}),M(7),C(),C(),y(8,"div",3),S(9,WF,2,1,"ng-container",0),S(10,qF,2,1,"ng-container",0),S(11,QF,2,1,"ng-container",0),k(12,"br"),M(13),y(14,"input",4),Z("ngModelChange",function(o){return le(n),w().settings.grouping=o})("ngModelChange",function(){return le(n),w().updateCoverageInfo()}),C(),C(),y(15,"div",3),S(16,eO,9,6,"ng-container",0),C(),y(17,"div",5),y(18,"span"),M(19),C(),y(20,"input",6),Z("ngModelChange",function(o){return le(n),w().settings.filter=o}),C(),C(),C(),y(21,"table",7),y(22,"colgroup"),k(23,"col"),k(24,"col",8),k(25,"col",9),k(26,"col",10),k(27,"col",11),k(28,"col",12),k(29,"col",13),S(30,tO,1,0,"col",14),S(31,nO,1,0,"col",15),S(32,rO,1,0,"col",16),S(33,oO,1,0,"col",17),C(),y(34,"thead"),y(35,"tr"),y(36,"th"),y(37,"a",2),Z("click",function(o){return le(n),w().updateSorting("name",o)}),k(38,"i",18),M(39),C(),C(),y(40,"th",5),y(41,"a",2),Z("click",function(o){return le(n),w().updateSorting("covered",o)}),k(42,"i",18),M(43),C(),C(),y(44,"th",5),y(45,"a",2),Z("click",function(o){return le(n),w().updateSorting("uncovered",o)}),k(46,"i",18),M(47),C(),C(),y(48,"th",5),y(49,"a",2),Z("click",function(o){return le(n),w().updateSorting("coverable",o)}),k(50,"i",18),M(51),C(),C(),y(52,"th",5),y(53,"a",2),Z("click",function(o){return le(n),w().updateSorting("total",o)}),k(54,"i",18),M(55),C(),C(),y(56,"th",19),y(57,"a",2),Z("click",function(o){return le(n),w().updateSorting("coverage",o)}),k(58,"i",18),M(59),C(),C(),S(60,iO,4,6,"th",20),S(61,sO,4,6,"th",20),S(62,aO,4,6,"th",21),C(),C(),y(63,"tbody"),S(64,gO,4,3,"ng-container",22),C(),C(),C()}if(2&e){const n=w();g(4),P(n.translations.collapseAll),g(3),P(n.translations.expandAll),g(2),D("ngIf",-1===n.settings.grouping),g(1),D("ngIf",0===n.settings.grouping),g(1),D("ngIf",n.settings.grouping>0),g(2),oe(" ",n.translations.grouping," "),g(1),D("max",n.settings.groupingMaximum)("ngModel",n.settings.grouping),g(2),D("ngIf",n.historicCoverageExecutionTimes.length>0),g(3),oe("",n.translations.filter," "),g(1),D("ngModel",n.settings.filter),g(10),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(5),D("ngClass",st(31,In,"name"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"name"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"name"!==n.settings.sortBy)),g(1),P(n.translations.name),g(3),D("ngClass",st(35,In,"covered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered"!==n.settings.sortBy)),g(1),P(n.translations.covered),g(3),D("ngClass",st(39,In,"uncovered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"uncovered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"uncovered"!==n.settings.sortBy)),g(1),P(n.translations.uncovered),g(3),D("ngClass",st(43,In,"coverable"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverable"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverable"!==n.settings.sortBy)),g(1),P(n.translations.coverable),g(3),D("ngClass",st(47,In,"total"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total"!==n.settings.sortBy)),g(1),P(n.translations.total),g(3),D("ngClass",st(51,In,"coverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverage"!==n.settings.sortBy)),g(1),P(n.translations.coverage),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(2),D("ngForOf",n.codeElements)}}let _O=(()=>{class e{constructor(n){this.queryString="",this.historicCoverageExecutionTimes=[],this.branchCoverageAvailable=!1,this.codeElements=[],this.translations={},this.settings=new iF,this.window=n.nativeWindow}ngOnInit(){this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes,this.branchCoverageAvailable=this.window.branchCoverageAvailable,this.translations=this.window.translations;let n=!1;if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings)console.log("Coverage info: Restoring from history",this.window.history.state.coverageInfoSettings),n=!0,this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));else{let o=0,i=this.window.assemblies;for(let s=0;s-1&&(this.queryString=window.location.href.substr(r)),this.updateCoverageInfo(),n&&this.restoreCollapseState()}onDonBeforeUnlodad(){if(this.saveCollapseState(),void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Coverage info: Updating history",this.settings);let n=new lv;null!==window.history.state&&(n=JSON.parse(JSON.stringify(this.window.history.state))),n.coverageInfoSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(n,"")}}updateCoverageInfo(){let n=(new Date).getTime(),r=this.window.assemblies,o=[],i=0;if(0===this.settings.grouping)for(let l=0;l{for(let o=0;o{for(let i=0;in&&(o[i].collapsed=this.settings.collapseStates[n]),n++,r(o[i].subElements)};r(this.codeElements)}}return e.\u0275fac=function(n){return new(n||e)(I(kd))},e.\u0275cmp=xn({type:e,selectors:[["coverage-info"]],hostBindings:function(n,r){1&n&&Z("beforeunload",function(){return r.onDonBeforeUnlodad()},!1,Hl)},decls:1,vars:1,consts:[[4,"ngIf"],[1,"customizebox"],["href","#",3,"click"],[1,"center"],["type","range","step","1","min","-1",3,"max","ngModel","ngModelChange"],[1,"right"],["type","text",3,"ngModel","ngModelChange"],[1,"overview","table-fixed","stripped"],[1,"column90"],[1,"column105"],[1,"column100"],[1,"column70"],[1,"column98"],[1,"column112"],["class","column90",4,"ngIf"],["class","column70",4,"ngIf"],["class","column98",4,"ngIf"],["class","column112",4,"ngIf"],[1,"icon-down-dir",3,"ngClass"],["colspan","2",1,"center"],["class","right",4,"ngIf"],["class","center","colspan","2",4,"ngIf"],[4,"ngFor","ngForOf"],[3,"ngModel","ngModelChange"],["value",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["value","allChanges"],["value","lineCoverageIncreaseOnly"],["value","lineCoverageDecreaseOnly"],["value","branchCoverageIncreaseOnly",4,"ngIf"],["value","branchCoverageDecreaseOnly",4,"ngIf"],["value","branchCoverageIncreaseOnly"],["value","branchCoverageDecreaseOnly"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable",4,"ngIf"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable"],["class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate"],["codeelement-row","",1,"namespace",3,"element","collapsed","branchCoverageAvailable"],["class","namespace","class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",1,"namespace",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate"]],template:function(n,r){1&n&&S(0,mO,65,55,"div",0),2&n&&D("ngIf",r.codeElements.length>0)},directives:[yo,Td,Pi,gd,Ba,Ni,Yu,Hi,Rd,Od,_F,zF],encapsulation:2}),e})();class yO{constructor(){this.assembly="",this.numberOfRiskHotspots=10,this.filter="",this.sortBy="",this.sortOrder="asc"}}function CO(e,t){if(1&e&&(y(0,"option",14),M(1),C()),2&e){const n=t.$implicit;D("value",n),g(1),P(n)}}function vO(e,t){if(1&e&&(y(0,"span"),M(1),C()),2&e){const n=w(2);g(1),P(n.translations.top)}}function DO(e,t){1&e&&(y(0,"option",21),M(1,"20"),C())}function bO(e,t){1&e&&(y(0,"option",22),M(1,"50"),C())}function EO(e,t){1&e&&(y(0,"option",23),M(1,"100"),C())}function wO(e,t){if(1&e&&(y(0,"option",14),M(1),C()),2&e){const n=w(3);D("value",n.totalNumberOfRiskHotspots),g(1),P(n.translations.all)}}function IO(e,t){if(1&e){const n=ln();y(0,"select",15),Z("ngModelChange",function(o){return le(n),w(2).settings.numberOfRiskHotspots=o}),y(1,"option",16),M(2,"10"),C(),S(3,DO,2,0,"option",17),S(4,bO,2,0,"option",18),S(5,EO,2,0,"option",19),S(6,wO,2,2,"option",20),C()}if(2&e){const n=w(2);D("ngModel",n.settings.numberOfRiskHotspots),g(3),D("ngIf",n.totalNumberOfRiskHotspots>10),g(1),D("ngIf",n.totalNumberOfRiskHotspots>20),g(1),D("ngIf",n.totalNumberOfRiskHotspots>50),g(1),D("ngIf",n.totalNumberOfRiskHotspots>100)}}function MO(e,t){1&e&&k(0,"col",24)}const Ha=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function TO(e,t){if(1&e){const n=ln();y(0,"th"),y(1,"a",11),Z("click",function(o){const s=le(n).index;return w(2).updateSorting(""+s,o)}),k(2,"i",12),M(3),C(),y(4,"a",25),k(5,"i",26),C(),C()}if(2&e){const n=t.$implicit,r=t.index,o=w(2);g(2),D("ngClass",st(3,Ha,o.settings.sortBy===""+r&&"desc"===o.settings.sortOrder,o.settings.sortBy===""+r&&"asc"===o.settings.sortOrder,o.settings.sortBy!==""+r)),g(1),P(n.name),g(1),oi("href",n.explanationUrl,Vr)}}const AO=function(e,t){return{lightred:e,lightgreen:t}};function SO(e,t){if(1&e&&(y(0,"td",29),M(1),C()),2&e){const n=t.$implicit;D("ngClass",su(2,AO,n.exceeded,!n.exceeded)),g(1),P(n.value)}}function xO(e,t){if(1&e&&(y(0,"tr"),y(1,"td"),M(2),C(),y(3,"td"),y(4,"a",25),M(5),C(),C(),y(6,"td",27),y(7,"a",25),M(8),C(),C(),S(9,SO,2,5,"td",28),C()),2&e){const n=t.$implicit,r=w(2);g(2),P(n.assembly),g(2),D("href",n.reportPath+r.queryString,Vr),g(1),P(n.class),g(1),D("title",n.methodName),g(1),D("href",n.reportPath+r.queryString+"#file"+n.fileIndex+"_line"+n.line,Vr),g(1),oe(" ",n.methodShortName," "),g(1),D("ngForOf",n.metrics)}}function NO(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"div",1),y(2,"div"),y(3,"select",2),Z("ngModelChange",function(o){return le(n),w().settings.assembly=o})("ngModelChange",function(){return le(n),w().updateRiskHotpots()}),y(4,"option",3),M(5),C(),S(6,CO,2,2,"option",4),C(),C(),y(7,"div",5),S(8,vO,2,1,"span",0),S(9,IO,7,5,"select",6),C(),k(10,"div",5),y(11,"div",7),y(12,"span"),M(13),C(),y(14,"input",8),Z("ngModelChange",function(o){return le(n),w().settings.filter=o})("ngModelChange",function(){return le(n),w().updateRiskHotpots()}),C(),C(),C(),y(15,"table",9),y(16,"colgroup"),k(17,"col"),k(18,"col"),k(19,"col"),S(20,MO,1,0,"col",10),C(),y(21,"thead"),y(22,"tr"),y(23,"th"),y(24,"a",11),Z("click",function(o){return le(n),w().updateSorting("assembly",o)}),k(25,"i",12),M(26),C(),C(),y(27,"th"),y(28,"a",11),Z("click",function(o){return le(n),w().updateSorting("class",o)}),k(29,"i",12),M(30),C(),C(),y(31,"th"),y(32,"a",11),Z("click",function(o){return le(n),w().updateSorting("method",o)}),k(33,"i",12),M(34),C(),C(),S(35,TO,6,7,"th",13),C(),C(),y(36,"tbody"),S(37,xO,10,7,"tr",13),function(e,t){const n=J();let r;const o=e+20;n.firstCreatePass?(r=function(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}throw new Qn("302",`The pipe '${e}' could not be found!`)}(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(o,r.onDestroy)):r=n.data[o];const i=r.factory||(r.factory=Xn(r.type)),s=An(I);try{const a=us(!1),l=i();us(a),function(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,b(),o,l)}finally{An(s)}}(38,"slice"),C(),C(),C()}if(2&e){const n=w();g(3),D("ngModel",n.settings.assembly),g(2),P(n.translations.assembly),g(1),D("ngForOf",n.assemblies),g(2),D("ngIf",n.totalNumberOfRiskHotspots>10),g(1),D("ngIf",n.totalNumberOfRiskHotspots>10),g(4),oe("",n.translations.filter," "),g(1),D("ngModel",n.settings.filter),g(6),D("ngForOf",n.riskHotspotMetrics),g(5),D("ngClass",st(20,Ha,"assembly"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"assembly"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"assembly"!==n.settings.sortBy)),g(1),P(n.translations.assembly),g(3),D("ngClass",st(24,Ha,"class"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"class"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"class"!==n.settings.sortBy)),g(1),P(n.translations.class),g(3),D("ngClass",st(28,Ha,"method"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"method"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"method"!==n.settings.sortBy)),g(1),P(n.translations.method),g(1),D("ngForOf",n.riskHotspotMetrics),g(2),D("ngForOf",M_(38,16,n.riskHotspots,0,n.settings.numberOfRiskHotspots))}}let RO=(()=>{class e{constructor(n){this.queryString="",this.riskHotspotMetrics=[],this.riskHotspots=[],this.totalNumberOfRiskHotspots=0,this.assemblies=[],this.translations={},this.settings=new yO,this.window=n.nativeWindow}ngOnInit(){this.riskHotspotMetrics=this.window.riskHotspotMetrics,this.translations=this.window.translations,void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.riskHotspotsSettings&&(console.log("Risk hotspots: Restoring from history",this.window.history.state.riskHotspotsSettings),this.settings=JSON.parse(JSON.stringify(this.window.history.state.riskHotspotsSettings)));const n=window.location.href.indexOf("?");n>-1&&(this.queryString=window.location.href.substr(n)),this.updateRiskHotpots()}onDonBeforeUnlodad(){if(void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Risk hotspots: Updating history",this.settings);let n=new lv;null!==window.history.state&&(n=JSON.parse(JSON.stringify(this.window.history.state))),n.riskHotspotsSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(n,"")}}updateRiskHotpots(){const n=this.window.riskHotspots;if(this.totalNumberOfRiskHotspots=n.length,0===this.assemblies.length){let s=[];for(let a=0;a0)},directives:[yo,Hi,gd,Ba,Rd,Od,Yu,Pi,Ni],pipes:[Yy],encapsulation:2}),e})(),FO=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e,bootstrap:[RO,_O]}),e.\u0275inj=Ft({providers:[kd],imports:[[iR,oF]]}),e})();rR().bootstrapModule(FO).catch(e=>console.error(e))}},wo=>{wo(wo.s=15)}]); \ No newline at end of file diff --git a/docs/coverage/report.css b/docs/coverage/report.css deleted file mode 100644 index 27ef3f3c..00000000 --- a/docs/coverage/report.css +++ /dev/null @@ -1,564 +0,0 @@ -html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } -body { margin: 0; padding: 0; height: 100%; color: #000; } -h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } -h1:first-of-type { margin-top: 0; } -h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } -h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } -a { color: #c00; text-decoration: none; } -a:hover { color: #000; text-decoration: none; } -h1 a.back { color: #fff; background-color: #949494; display: inline-block; margin: -12px 5px -10px -10px; padding: 10px; border-right: 1px solid #fff; } -h1 a.back:hover { background-color: #ccc; } -h1 a.button { color: #000; background-color: #bebebe; margin: -5px 0 0 10px; padding: 5px 8px 5px 8px; border: 1px solid #fff; font-size: 0.9em; border-radius: 3px; float:right; } -h1 a.button:hover { background-color: #ccc; } -h1 a.button i { position: relative; top: 1px; } - -.container { margin: auto; max-width: 1650px; width: 90%; background-color: #fff; display: flex; box-shadow: 0 0 60px #7d7d7d; min-height: 100%; } -.containerleft { padding: 0 20px 20px 20px; flex: 1; } -.containerright { width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } -.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; border-left: solid 1px #6f6f6f; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } -.containerrightfixed h1 { background-color: #c00; } -.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; width: 100%; max-width: 300px; text-overflow: ellipsis; } -.containerright a { margin-bottom: 3px; } - -@media screen and (max-width:1200px){ - .container { box-shadow: none; width: 100%; } - .containerright { display: none; } -} - -.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } - -th { text-align: left; } -.table-fixed { table-layout: fixed; } -.overview { border: solid 1px #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } -.overview th { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 4px 2px 4px; background-color: #ddd; } -.overview tr.namespace th { background-color: #dcdcdc; } -.overview thead th { background-color: #d1d1d1; } -.overview th a { color: #000; } -.overview tr.namespace a { margin-left: 15px; display: block; } -.overview td { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } -div.currenthistory { margin: -2px -5px 0 -5px; padding: 2px 5px 2px 5px; height: 16px; } -.coverage { border-collapse: collapse; font-size: 5px; height: 10px; } -.coverage td { padding: 0; border: none; } -.stripped tr:nth-child(2n+1) { background-color: #F3F3F3; } - -.customizebox { font-size: 0.75em; margin-bottom: 7px; } -.customizebox>div { width: 25%; display: inline-block; } -.customizebox div.right input { width: 150px; } -#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } - -.percentagebar { - padding-left: 3px; -} -a.percentagebar { - padding-left: 6px; -} -.percentagebarundefined { - border-left: 2px solid #fff; -} -.percentagebar0 { - border-left: 2px solid #c10909; -} -.percentagebar10 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 90%, #0aad0a 90%, #0aad0a 100%) 1; -} -.percentagebar20 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 80%, #0aad0a 80%, #0aad0a 100%) 1; -} -.percentagebar30 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 70%, #0aad0a 70%, #0aad0a 100%) 1; -} -.percentagebar40 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 60%, #0aad0a 60%, #0aad0a 100%) 1; -} -.percentagebar50 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 50%, #0aad0a 50%, #0aad0a 100%) 1; -} -.percentagebar60 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 40%, #0aad0a 40%, #0aad0a 100%) 1; -} -.percentagebar70 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 30%, #0aad0a 30%, #0aad0a 100%) 1; -} -.percentagebar80 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 20%, #0aad0a 20%, #0aad0a 100%) 1; -} -.percentagebar90 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 10%, #0aad0a 10%, #0aad0a 100%) 1; -} -.percentagebar100 { - border-left: 2px solid #0aad0a; -} - -.hidden, .ng-hide { display: none; } -.right { text-align: right; } -.center { text-align: center; } -.rightmargin { padding-right: 8px; } -.leftmargin { padding-left: 5px; } -.green { background-color: #0aad0a; } -.lightgreen { background-color: #dcf4dc; } -.red { background-color: #c10909; } -.lightred { background-color: #f7dede; } -.orange { background-color: #FFA500; } -.lightorange { background-color: #FFEFD5; } -.gray { background-color: #dcdcdc; } -.lightgray { color: #888888; } -.lightgraybg { background-color: #dadada; } - -code { font-family: Consolas, monospace; font-size: 0.9em; } - -.toggleZoom { text-align:right; } - -.ct-chart { position: relative; } -.ct-chart .ct-line { stroke-width: 2px !important; } -.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } -.ct-chart .ct-point:hover { stroke-width: 10px !important; } -.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} -.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} - -.tinylinecoveragechart, .tinybranchcoveragechart { background-color: #fff; margin-left: -3px; float: left; border: solid 1px #c1c1c1; width: 30px; height: 18px; } -.historiccoverageoffset { margin-top: 7px; } - -.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line { stroke-width: 1px !important; } -.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } - -.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } -.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } - -.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D; color: #453D3F; pointer-events: none; z-index: 1; min-width: 250px; } - -.column1324 { max-width: 1324px; } -.column674 { max-width: 674px; } -.column60 { width: 60px; } -.column70 { width: 70px; } -.column90 { width: 90px; } -.column98 { width: 98px; } -.column100 { width: 100px; } -.column105 { width: 105px; } -.column112 { width: 112px; } -.column135 { width: 135px; } -.column150 { width: 150px; } - -.covered0 { width: 0px; } -.covered1 { width: 1px; } -.covered2 { width: 2px; } -.covered3 { width: 3px; } -.covered4 { width: 4px; } -.covered5 { width: 5px; } -.covered6 { width: 6px; } -.covered7 { width: 7px; } -.covered8 { width: 8px; } -.covered9 { width: 9px; } -.covered10 { width: 10px; } -.covered11 { width: 11px; } -.covered12 { width: 12px; } -.covered13 { width: 13px; } -.covered14 { width: 14px; } -.covered15 { width: 15px; } -.covered16 { width: 16px; } -.covered17 { width: 17px; } -.covered18 { width: 18px; } -.covered19 { width: 19px; } -.covered20 { width: 20px; } -.covered21 { width: 21px; } -.covered22 { width: 22px; } -.covered23 { width: 23px; } -.covered24 { width: 24px; } -.covered25 { width: 25px; } -.covered26 { width: 26px; } -.covered27 { width: 27px; } -.covered28 { width: 28px; } -.covered29 { width: 29px; } -.covered30 { width: 30px; } -.covered31 { width: 31px; } -.covered32 { width: 32px; } -.covered33 { width: 33px; } -.covered34 { width: 34px; } -.covered35 { width: 35px; } -.covered36 { width: 36px; } -.covered37 { width: 37px; } -.covered38 { width: 38px; } -.covered39 { width: 39px; } -.covered40 { width: 40px; } -.covered41 { width: 41px; } -.covered42 { width: 42px; } -.covered43 { width: 43px; } -.covered44 { width: 44px; } -.covered45 { width: 45px; } -.covered46 { width: 46px; } -.covered47 { width: 47px; } -.covered48 { width: 48px; } -.covered49 { width: 49px; } -.covered50 { width: 50px; } -.covered51 { width: 51px; } -.covered52 { width: 52px; } -.covered53 { width: 53px; } -.covered54 { width: 54px; } -.covered55 { width: 55px; } -.covered56 { width: 56px; } -.covered57 { width: 57px; } -.covered58 { width: 58px; } -.covered59 { width: 59px; } -.covered60 { width: 60px; } -.covered61 { width: 61px; } -.covered62 { width: 62px; } -.covered63 { width: 63px; } -.covered64 { width: 64px; } -.covered65 { width: 65px; } -.covered66 { width: 66px; } -.covered67 { width: 67px; } -.covered68 { width: 68px; } -.covered69 { width: 69px; } -.covered70 { width: 70px; } -.covered71 { width: 71px; } -.covered72 { width: 72px; } -.covered73 { width: 73px; } -.covered74 { width: 74px; } -.covered75 { width: 75px; } -.covered76 { width: 76px; } -.covered77 { width: 77px; } -.covered78 { width: 78px; } -.covered79 { width: 79px; } -.covered80 { width: 80px; } -.covered81 { width: 81px; } -.covered82 { width: 82px; } -.covered83 { width: 83px; } -.covered84 { width: 84px; } -.covered85 { width: 85px; } -.covered86 { width: 86px; } -.covered87 { width: 87px; } -.covered88 { width: 88px; } -.covered89 { width: 89px; } -.covered90 { width: 90px; } -.covered91 { width: 91px; } -.covered92 { width: 92px; } -.covered93 { width: 93px; } -.covered94 { width: 94px; } -.covered95 { width: 95px; } -.covered96 { width: 96px; } -.covered97 { width: 97px; } -.covered98 { width: 98px; } -.covered99 { width: 99px; } -.covered100 { width: 100px; } - - @media print { - html, body { background-color: #fff; } - .container { max-width: 100%; width: 100%; padding: 0; } - .overview colgroup col:first-child { width: 300px; } -} - -.icon-up-dir_active { - background-image: url(icon_up-dir.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDEyMTZxMCAyNi0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMC00NS0xOXQtMTktNDUgMTktNDVsNDQ4LTQ0OHExOS0xOSA0NS0xOXQ0NSAxOWw0NDggNDQ4cTE5IDE5IDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-down-dir_active { - background-image: url(icon_up-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-down-dir { - background-image: url(icon_down-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-info-circled { - background-image: url(icon_info-circled.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; -} -.icon-plus { - background-image: url(icon_plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTQxNnY0MTZxMCA0MC0yOCA2OHQtNjggMjhoLTE5MnEtNDAgMC02OC0yOHQtMjgtNjh2LTQxNmgtNDE2cS00MCAwLTY4LTI4dC0yOC02OHYtMTkycTAtNDAgMjgtNjh0NjgtMjhoNDE2di00MTZxMC00MCAyOC02OHQ2OC0yOGgxOTJxNDAgMCA2OCAyOHQyOCA2OHY0MTZoNDE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-minus { - background-image: url(icon_minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTEyMTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-wrench { - background-image: url(icon_wrench.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik00NDggMTQ3MnEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOSA0NS0xOSAxOS00NXptNjQ0LTQyMGwtNjgyIDY4MnEtMzcgMzctOTAgMzctNTIgMC05MS0zN2wtMTA2LTEwOHEtMzgtMzYtMzgtOTAgMC01MyAzOC05MWw2ODEtNjgxcTM5IDk4IDExNC41IDE3My41dDE3My41IDExNC41em02MzQtNDM1cTAgMzktMjMgMTA2LTQ3IDEzNC0xNjQuNSAyMTcuNXQtMjU4LjUgODMuNXEtMTg1IDAtMzE2LjUtMTMxLjV0LTEzMS41LTMxNi41IDEzMS41LTMxNi41IDMxNi41LTEzMS41cTU4IDAgMTIxLjUgMTYuNXQxMDcuNSA0Ni41cTE2IDExIDE2IDI4dC0xNiAyOGwtMjkzIDE2OXYyMjRsMTkzIDEwN3E1LTMgNzktNDguNXQxMzUuNS04MSA3MC41LTM1LjVxMTUgMCAyMy41IDEwdDguNSAyNXoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-fork { - background-image: url(icon_fork.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNmZmYiIC8+PHBhdGggZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-cube { - background-image: url(icon_cube.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTYyOWw2NDAtMzQ5di02MzZsLTY0MCAyMzN2NzUyem0tNjQtODY1bDY5OC0yNTQtNjk4LTI1NC02OTggMjU0em04MzItMjUydjc2OHEwIDM1LTE4IDY1dC00OSA0N2wtNzA0IDM4NHEtMjggMTYtNjEgMTZ0LTYxLTE2bC03MDQtMzg0cS0zMS0xNy00OS00N3QtMTgtNjV2LTc2OHEwLTQwIDIzLTczdDYxLTQ3bDcwNC0yNTZxMjItOCA0NC04dDQ0IDhsNzA0IDI1NnEzOCAxNCA2MSA0N3QyMyA3M3oiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-search-plus { - background-image: url(icon_search-plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtMjI0djIyNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yMjRoLTIyNHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTY0cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoMjI0di0yMjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41djIyNGgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-search-minus { - background-image: url(icon_search-minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNTc2cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg1NzZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-star { - background-image: url(icon_star.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-sponsor { - background-image: url(icon_sponsor.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTY2NHEtMjYgMC00NC0xOGwtNjI0LTYwMnEtMTAtOC0yNy41LTI2dC01NS41LTY1LjUtNjgtOTcuNS01My41LTEyMS0yMy41LTEzOHEwLTIyMCAxMjctMzQ0dDM1MS0xMjRxNjIgMCAxMjYuNSAyMS41dDEyMCA1OCA5NS41IDY4LjUgNzYgNjhxMzYtMzYgNzYtNjh0OTUuNS02OC41IDEyMC01OCAxMjYuNS0yMS41cTIyNCAwIDM1MSAxMjR0MTI3IDM0NHEwIDIyMS0yMjkgNDUwbC02MjMgNjAwcS0xOCAxOC00NCAxOHoiIGZpbGw9IiNlYTRhYWEiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} - -@media (prefers-color-scheme: dark) { - @media screen { - html { - background-color: #333; - color: #fff; - } - - body { - color: #fff; - } - - h1 { - background-color: #555453; - color: #fff; - } - - .container { - background-color: #333; - box-shadow: 0 0 60px #0c0c0c; - } - - .containerrightfixed { - background-color: #3D3C3C; - border-left: solid 1px #515050; - } - - .containerrightfixed h1 { - background-color: #484747; - } - - .overview tr:hover { - background-color: #2E2D2C; - } - - .overview th { - background-color: #444; - border: solid 1px #3B3A39; - } - - .overview thead th { - background-color: #444; - } - - .overview th a { - color: #fff; - color: rgba(255, 255, 255, 0.95); - } - - .overview th a:hover { - color: #0078d4; - } - - .overview td { - border: solid 1px #3B3A39; - } - - .overview .coverage td { - border: none; - } - - .stripped tr:nth-child(2n+1) { - background-color: #3c3c3c; - } - - input, select { - background-color: #333; - color: #fff; - border: 1px solid #A19F9D; - } - - a { - color: #fff; - color: rgba(255, 255, 255, 0.95); - } - - a:hover { - color: #0078d4; - } - - h1 a.back { - background-color: #4a4846; - } - - h1 a.button { - color: #fff; - background-color: #565656; - border-color: #c1c1c1; - } - - h1 a.button:hover { - background-color: #8d8d8d; - } - - .gray { - background-color: #484747; - } - - .lightgray { - color: #ebebeb; - } - - .lightgraybg { - background-color: #474747; - } - - .lightgreen { - background-color: #406540; - } - - .lightorange { - background-color: #ab7f36; - } - - .lightred { - background-color: #954848; - } - - .ct-label { - color: #fff !important; - } - - .ct-grid { - stroke: #fff !important; - } - - .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { - stroke: #0078D4 !important; - } - - .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { - stroke: #6dc428 !important; - } - - .linecoverage { - background-color: #0078D4; - } - - .branchcoverage { - background-color: #6dc428; - } - - .tinylinecoveragechart, .tinybranchcoveragechart { - background-color: #333; - } - - .tinybranchcoveragechart .ct-series.ct-series-a .ct-line { - stroke: #6dc428 !important; - } - - .icon-down-dir { - background-image: url(icon_down-dir_active_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE0MDggNzA0cTAgMjYtMTkgNDVsLTQ0OCA0NDhxLTE5IDE5LTQ1IDE5dC00NS0xOWwtNDQ4LTQ0OHEtMTktMTktMTktNDV0MTktNDUgNDUtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6Ii8+PC9zdmc+); - } - - .icon-info-circled { - background-image: url(icon_info-circled_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); - } - - .icon-plus { - background-image: url(icon_plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtMTkycS00MCAwLTY4LTI4dC0yOC02OHYtNDE2aC00MTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGg0MTZ2LTQxNnEwLTQwIDI4LTY4dDY4LTI4aDE5MnE0MCAwIDY4IDI4dDI4IDY4djQxNmg0MTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); - } - - .icon-minus { - background-image: url(icon_minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtMTIxNnEtNDAgMC02OC0yOHQtMjgtNjh2LTE5MnEwLTQwIDI4LTY4dDY4LTI4aDEyMTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); - } - - .icon-wrench { - background-image: url(icon_wrench_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JEQkRCRiIgZD0iTTQ0OCAxNDcycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em02NDQtNDIwbC02ODIgNjgycS0zNyAzNy05MCAzNy01MiAwLTkxLTM3bC0xMDYtMTA4cS0zOC0zNi0zOC05MCAwLTUzIDM4LTkxbDY4MS02ODFxMzkgOTggMTE0LjUgMTczLjV0MTczLjUgMTE0LjV6bTYzNC00MzVxMCAzOS0yMyAxMDYtNDcgMTM0LTE2NC41IDIxNy41dC0yNTguNSA4My41cS0xODUgMC0zMTYuNS0xMzEuNXQtMTMxLjUtMzE2LjUgMTMxLjUtMzE2LjUgMzE2LjUtMTMxLjVxNTggMCAxMjEuNSAxNi41dDEwNy41IDQ2LjVxMTYgMTEgMTYgMjh0LTE2IDI4bC0yOTMgMTY5djIyNGwxOTMgMTA3cTUtMyA3OS00OC41dDEzNS41LTgxIDcwLjUtMzUuNXExNSAwIDIzLjUgMTB0OC41IDI1eiIvPjwvc3ZnPg==); - } - - .icon-fork { - background-image: url(icon_fork_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); - } - - .icon-cube { - background-image: url(icon_cube_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTg5NiAxNjI5bDY0MC0zNDl2LTYzNmwtNjQwIDIzM3Y3NTJ6bS02NC04NjVsNjk4LTI1NC02OTgtMjU0LTY5OCAyNTR6bTgzMi0yNTJ2NzY4cTAgMzUtMTggNjV0LTQ5IDQ3bC03MDQgMzg0cS0yOCAxNi02MSAxNnQtNjEtMTZsLTcwNC0zODRxLTMxLTE3LTQ5LTQ3dC0xOC02NXYtNzY4cTAtNDAgMjMtNzN0NjEtNDdsNzA0LTI1NnEyMi04IDQ0LTh0NDQgOGw3MDQgMjU2cTM4IDE0IDYxIDQ3dDIzIDczeiIvPjwvc3ZnPg==); - } - - .icon-search-plus { - background-image: url(icon_search-plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC0yMjR2MjI0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTIyNGgtMjI0cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWgyMjR2LTIyNHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MjI0aDIyNHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); - } - - .icon-search-minus { - background-image: url(icon_search-minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC01NzZxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di02NHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDU3NnExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); - } - - .icon-star { - background-image: url(icon_star_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=); - } - } -} - -.ct-double-octave:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-grid-background,.ct-line{fill:none}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{content:"";display:table;clear:both}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/src/ImageProcessing/Agents.fs b/src/ImageProcessing/Agents.fs index c2a6a560..8c56cd2f 100644 --- a/src/ImageProcessing/Agents.fs +++ b/src/ImageProcessing/Agents.fs @@ -1,7 +1,7 @@ /// /// Module with implementation of agents for image processing /// -module Agents +module ImageProcessing.Agents open Types open MyImage diff --git a/src/ImageProcessing/Arguments.fs b/src/ImageProcessing/Arguments.fs index 0105b373..9906b68d 100644 --- a/src/ImageProcessing/Arguments.fs +++ b/src/ImageProcessing/Arguments.fs @@ -1,7 +1,7 @@ /// /// Module with implementation of work via console commands /// -module Arguments +module ImageProcessing.Arguments open Argu open Kernels diff --git a/src/ImageProcessing/CpuProcessing.fs b/src/ImageProcessing/CpuProcessing.fs index e0e23ae4..c604443b 100644 --- a/src/ImageProcessing/CpuProcessing.fs +++ b/src/ImageProcessing/CpuProcessing.fs @@ -1,7 +1,7 @@ /// /// Module with functions for image processing on the CPU /// -module CpuProcessing +module ImageProcessing.CpuProcessing open MyImage open Types diff --git a/src/ImageProcessing/GpuKernels.fs b/src/ImageProcessing/GpuKernels.fs index 3c759dec..bf5c6e58 100644 --- a/src/ImageProcessing/GpuKernels.fs +++ b/src/ImageProcessing/GpuKernels.fs @@ -1,7 +1,7 @@ /// /// Module with kernels for image processing on the GPU /// -module GpuKernels +module ImageProcessing.GpuKernels open Types open Brahma.FSharp diff --git a/src/ImageProcessing/GpuProcessing.fs b/src/ImageProcessing/GpuProcessing.fs index 64c41503..9ef00c8b 100644 --- a/src/ImageProcessing/GpuProcessing.fs +++ b/src/ImageProcessing/GpuProcessing.fs @@ -1,7 +1,7 @@ /// /// Module with functions for image processing on the GPU /// -module GpuProcessing +module ImageProcessing.GpuProcessing open Brahma.FSharp open MyImage diff --git a/src/ImageProcessing/ImageArrayProcessing.fs b/src/ImageProcessing/ImageArrayProcessing.fs index 99b37432..7c267f39 100644 --- a/src/ImageProcessing/ImageArrayProcessing.fs +++ b/src/ImageProcessing/ImageArrayProcessing.fs @@ -1,7 +1,7 @@ /// /// Module with implementation of processing array of images /// -module ImageArrayProcessing +module ImageProcessing.ImageArrayProcessing open MyImage open Agents diff --git a/src/ImageProcessing/ImageProcessing.fsproj b/src/ImageProcessing/ImageProcessing.fsproj index 77922c02..6273967b 100644 --- a/src/ImageProcessing/ImageProcessing.fsproj +++ b/src/ImageProcessing/ImageProcessing.fsproj @@ -2,7 +2,6 @@ net7.0 - Exe false true @@ -33,4 +32,4 @@
-

< Summary

- ---- - - - - - - - - - - - - - - - - -
Class:Agents
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Agents.fs
Covered lines:0
Uncovered lines:39
Coverable lines:39
Total lines:59
Line coverage:0% (0 of 39)
Covered branches:0
Total branches:4
Branch coverage:0% (0 of 4)
Covered methods:0
Total methods:12
Method coverage:0% (0 of 12)
-

Metrics

- - - - - - - - - - - - - - - - -
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
listAllFiles(...)0%2100%
Invoke(...)0%2100%
imgSaver(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%6220%
Invoke(...)0%2100%
imgProcessor(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%6220%
Invoke(...)0%2100%
-

File(s)

-

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Agents.fs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1module Agents
 2
 3open CpuImageProcessing
 4
 5let listAllFiles dir =
 06    let files = System.IO.Directory.GetFiles dir
 07    List.ofArray files
 8
 9type Msg =
 10    | Img of MyImage
 11    | EOS of AsyncReplyChannel<unit>
 12
 13type AgentStatus =
 14    | On
 15    | Off
 16
 17let imgSaver outDir =
 018    let outFile (imgName: string) = System.IO.Path.Combine(outDir, imgName)
 19
 020    MailboxProcessor.Start(fun inbox ->
 021        let rec loop () =
 022            async {
 023                let! msg = inbox.Receive()
 024
 025                match msg with
 026                | EOS ch ->
 027                    printfn "Image saver is finished!"
 028                    ch.Reply()
 029                | Img img ->
 030                    printfn $"Save: %A{img.Name}"
 031                    saveImage img (outFile img.Name)
 032                    return! loop ()
 033            }
 034
 035        loop ())
 36
 37let imgProcessor filterApplicator (imgSaver: MailboxProcessor<_>) =
 38
 039    let filter = filterApplicator
 40
 041    MailboxProcessor.Start(fun inbox ->
 042        let rec loop () =
 043            async {
 044                let! msg = inbox.Receive()
 045
 046                match msg with
 047                | EOS ch ->
 048                    printfn "Image processor is ready to finish!"
 049                    imgSaver.PostAndReply EOS
 050                    printfn "Image processor is finished!"
 051                    ch.Reply()
 052                | Img img ->
 053                    printfn $"Filter: %A{img.Name}"
 054                    let filtered = filter img
 055                    imgSaver.Post(Img filtered)
 056                    return! loop ()
 057            }
 058
 059        loop ())
-
-
- \ No newline at end of file + diff --git a/src/ImageProcessing/Kernels.fs b/src/ImageProcessing/Kernels.fs index 0942e87b..96010df0 100644 --- a/src/ImageProcessing/Kernels.fs +++ b/src/ImageProcessing/Kernels.fs @@ -1,7 +1,7 @@ /// /// Module with kernels for image processing /// -module Kernels +module ImageProcessing.Kernels let gaussianBlurKernel = [| [| 1; 4; 6; 4; 1 |] diff --git a/src/ImageProcessing/MyImage.fs b/src/ImageProcessing/MyImage.fs index f74a2d66..f9826d8c 100644 --- a/src/ImageProcessing/MyImage.fs +++ b/src/ImageProcessing/MyImage.fs @@ -1,4 +1,4 @@ -module MyImage +module ImageProcessing.MyImage open System open SixLabors.ImageSharp diff --git a/src/ImageProcessing/Types.fs b/src/ImageProcessing/Types.fs index 531cf65f..c8038a80 100644 --- a/src/ImageProcessing/Types.fs +++ b/src/ImageProcessing/Types.fs @@ -1,7 +1,7 @@ /// /// Module with necessary algebraic types /// -module Types +module ImageProcessing.Types open MyImage diff --git a/tests/ImageProcessing.Tests/coverage.xml b/tests/ImageProcessing.Tests/coverage.xml index 258c6a7c..20bf7916 100644 --- a/tests/ImageProcessing.Tests/coverage.xml +++ b/tests/ImageProcessing.Tests/coverage.xml @@ -1,71 +1,98 @@  - + - - + + C:\Users\Леонид\ImageProcessing\tests\ImageProcessing.Tests\bin\Debug\net7.0\ImageProcessing.dll - 2023-03-16T17:32:44.6323838Z + 2023-12-16T14:36:30.2931635Z ImageProcessing - + + + + + - + ImageProcessing.Main - - + + 100663297 System.Int32 ImageProcessing.Main::main(System.String[]) - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + - + - ImageProcessing.Main/listOfFunc@17 + ImageProcessing.Main/filters@28 100663299 - Microsoft.FSharp.Core.FSharpFunc`2<CpuImageProcessing/MyImage,CpuImageProcessing/MyImage> ImageProcessing.Main/listOfFunc@17::Invoke(Arguments/Modifications) + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> ImageProcessing.Main/filters@28::Invoke(Types/Modifications) @@ -73,306 +100,642 @@ 100663300 - System.Void ImageProcessing.Main/listOfFunc@17::.cctor() + System.Void ImageProcessing.Main/filters@28::.cctor() + + + ImageProcessing.Main/filters@37-1 + + + + 100663302 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> ImageProcessing.Main/filters@37-1::Invoke(Types/Modifications) + + + + + + + + + - ImageProcessing.Main/composition@22 + ImageProcessing.Main/filters@39-2 - 100663302 - CpuImageProcessing/MyImage ImageProcessing.Main/composition@22::Invoke(Microsoft.FSharp.Core.FSharpFunc`2<CpuImageProcessing/MyImage,CpuImageProcessing/MyImage>,Microsoft.FSharp.Core.FSharpFunc`2<CpuImageProcessing/MyImage,CpuImageProcessing/MyImage>,CpuImageProcessing/MyImage) + 100663304 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> ImageProcessing.Main/filters@39-2::Invoke(Types/Modifications) + + + + + + + 100663305 + System.Void ImageProcessing.Main/filters@39-2::.cctor() + + + + + + + + + ImageProcessing.Main/composition@41 + + + + 100663307 + MyImage/MyImage ImageProcessing.Main/composition@41::Invoke(Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,MyImage/MyImage) - + - 100663303 - System.Void ImageProcessing.Main/composition@22::.cctor() + 100663308 + System.Void ImageProcessing.Main/composition@41::.cctor() - + - + Arguments - - - 100663304 - Microsoft.FSharp.Core.FSharpFunc`2<CpuImageProcessing/MyImage,CpuImageProcessing/MyImage> Arguments::modificationParser(Arguments/Modifications) + + + 100663309 + a Arguments::first(a,b,c,d) + + + + + + + + + + 100663310 + b Arguments::second(a,b,c,d) + + + + + + + + + + 100663311 + c Arguments::third(a,b,c,d) + + + + + + + + + + 100663312 + d Arguments::fourth(a,b,c,d) + + + + + + + + + + 100663313 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments::modificationParser(Types/Modifications) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663314 + Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClContext,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>>>> Arguments::modificationGpuParser(Types/Modifications,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663315 + Brahma.FSharp.Platform Arguments::deviceParser(Types/Devices) - - - - - - - - + + + + + - - - - - - - + + + + - + + + + + + + Arguments/modificationParser@21 + + + + 100663317 + MyImage/MyImage Arguments/modificationParser@21::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@22-1 + + + + 100663319 + MyImage/MyImage Arguments/modificationParser@22-1::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@23-2 + + + + 100663321 + MyImage/MyImage Arguments/modificationParser@23-2::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@24-3 + + + + 100663323 + MyImage/MyImage Arguments/modificationParser@24-3::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@25-4 + + + + 100663325 + MyImage/MyImage Arguments/modificationParser@25-4::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@26-5 + + + + 100663327 + MyImage/MyImage Arguments/modificationParser@26-5::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@27-6 + + + + 100663329 + MyImage/MyImage Arguments/modificationParser@27-6::Invoke(MyImage/MyImage) + + + + + + + + + Arguments/modificationParser@28-7 + + + + 100663331 + MyImage/MyImage Arguments/modificationParser@28-7::Invoke(MyImage/MyImage) + + + - Arguments/modificationParser@17 + Arguments/modificationParser@29-8 100663333 - CpuImageProcessing/MyImage Arguments/modificationParser@17::Invoke(CpuImageProcessing/MyImage) + MyImage/MyImage Arguments/modificationParser@29-8::Invoke(MyImage/MyImage) - + - Arguments/modificationParser@18-1 + Arguments/modificationParser@30-9 100663335 - CpuImageProcessing/MyImage Arguments/modificationParser@18-1::Invoke(CpuImageProcessing/MyImage) + MyImage/MyImage Arguments/modificationParser@30-9::Invoke(MyImage/MyImage) + + + 100663336 + System.Void Arguments/modificationParser@30-9::.cctor() + + + + + + + + + Arguments/modificationGpuParser@37 + + + + 100663338 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@37::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + + + + + + Arguments/modificationGpuParser@38-1 + + + + 100663340 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@38-1::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + + + + + + Arguments/modificationGpuParser@39-2 + + + + 100663342 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@39-2::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + + + + + + Arguments/modificationGpuParser@40-3 + + + + 100663344 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@40-3::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + + + + + + Arguments/modificationGpuParser@41-4 + + + + 100663346 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@41-4::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + - Arguments/modificationParser@19-2 + Arguments/modificationGpuParser@42-5 - 100663337 - CpuImageProcessing/MyImage Arguments/modificationParser@19-2::Invoke(CpuImageProcessing/MyImage) + 100663348 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@42-5::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationParser@20-3 + Arguments/modificationGpuParser@43-6 - 100663339 - CpuImageProcessing/MyImage Arguments/modificationParser@20-3::Invoke(CpuImageProcessing/MyImage) + 100663350 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@43-6::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationParser@21-4 + Arguments/modificationGpuParser@44-7 - 100663341 - CpuImageProcessing/MyImage Arguments/modificationParser@21-4::Invoke(CpuImageProcessing/MyImage) + 100663352 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@44-7::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationParser@22-5 + Arguments/modificationGpuParser@45-8 - 100663343 - CpuImageProcessing/MyImage Arguments/modificationParser@22-5::Invoke(CpuImageProcessing/MyImage) + 100663354 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@45-8::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationParser@23-6 + Arguments/modificationGpuParser@46-9 - 100663345 - CpuImageProcessing/MyImage Arguments/modificationParser@23-6::Invoke(CpuImageProcessing/MyImage) + 100663356 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@46-9::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - + Arguments/CliArguments - - - 100663365 + + + 100663380 System.String Arguments/CliArguments::Argu.IArgParserTemplate.get_Usage() - - - - - + + + + + + + - - - - + + + + + + - + - + ImageArrayProcessing - 100663380 + 100663403 System.String[] ImageArrayProcessing::get_extensions() - + - 100663381 + 100663404 Microsoft.FSharp.Collections.FSharpList`1<System.String> ImageArrayProcessing::listAllFiles(System.String) - - - + + + - + - - 100663382 - System.Void ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<CpuImageProcessing/MyImage,CpuImageProcessing/MyImage>,Agents/AgentStatus) + + 100663405 + System.Void ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Types/AgentStatus) - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - + - ImageArrayProcessing/filtered@22 + ImageArrayProcessing/filtered@29 - 100663384 - System.Boolean ImageArrayProcessing/filtered@22::Invoke(System.String) + 100663407 + System.Boolean ImageArrayProcessing/filtered@29::Invoke(System.String) - + - + - 100663385 - System.Void ImageArrayProcessing/filtered@22::.cctor() + 100663408 + System.Void ImageArrayProcessing/filtered@29::.cctor() - + - ImageArrayProcessing/arrayOfImagesProcessing@36 + ImageArrayProcessing/arrayOfImagesProcessing@51 - 100663387 - Agents/Msg ImageArrayProcessing/arrayOfImagesProcessing@36::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) + 100663410 + Types/Msg ImageArrayProcessing/arrayOfImagesProcessing@51::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - 100663388 - System.Void ImageArrayProcessing/arrayOfImagesProcessing@36::.cctor() + 100663411 + System.Void ImageArrayProcessing/arrayOfImagesProcessing@51::.cctor() - + - ImageArrayProcessing/helper@39 + ImageArrayProcessing/helper@54 - 100663390 - Microsoft.FSharp.Core.Unit ImageArrayProcessing/helper@39::Invoke(System.String) + 100663413 + Microsoft.FSharp.Core.Unit ImageArrayProcessing/helper@54::Invoke(System.String) - - + + - + @@ -382,875 +745,1612 @@ - 100663391 + 100663414 System.Void <StartupCode$ImageProcessing>.$ImageArrayProcessing::.cctor() - + - + - + Agents - 100663392 + 100663415 Microsoft.FSharp.Collections.FSharpList`1<System.String> Agents::listAllFiles(System.String) - - + + - + - 100663393 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Agents/Msg> Agents::imgSaver(System.String) + 100663416 + System.String Agents::outFile(System.String,System.String) - + - + - - 100663394 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Agents/Msg> Agents::imgProcessor(Microsoft.FSharp.Core.FSharpFunc`2<CpuImageProcessing/MyImage,CpuImageProcessing/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Agents/Msg>) + + 100663417 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::imgSaver(System.String,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + + + + + + + + + + 100663418 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::imgProcessor(Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + + + + + + + + + + 100663419 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::msgLogger() + + + + + + + + + + 100663420 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::superAgent(System.String,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) - - + - + + + + + 100663421 + System.Void Agents::superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + - Agents/outFile@18 + Agents/imgSaver@30-2 - 100663434 - System.String Agents/outFile@18::Invoke(System.String) + 100663423 + System.Boolean Agents/imgSaver@30-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + + + + + 100663424 + System.Void Agents/imgSaver@30-2::.cctor() + + + - - Agents/loop@25-2 + + Agents/imgSaver@33-4 - - - 100663436 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/loop@25-2::Invoke(Agents/Msg) + + + 100663426 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@33-4::Invoke(Types/Msg) - - - - - - + + + + + + - - + + + - + - Agents/loop@23-3 + Agents/imgSaver@31-5 - 100663438 - Microsoft.FSharp.Control.AsyncReturn Agents/loop@23-3::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + 100663428 + Microsoft.FSharp.Control.AsyncReturn Agents/imgSaver@31-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - Agents/loop@23-1 + Agents/imgSaver@31-3 - 100663440 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/loop@23-1::Invoke(Microsoft.FSharp.Core.Unit) + 100663430 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@31-3::Invoke(Microsoft.FSharp.Core.Unit) - + - + - - Agents/loop@22 + + Agents/imgSaver@30-1 - - 100663442 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/loop@22::Invoke(Microsoft.FSharp.Core.Unit) - - - - + + 100663432 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@30-1::Invoke(Microsoft.FSharp.Core.Unit) + - + - Agents/imgSaver@20 + Agents/imgSaver@28 - 100663444 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@20::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Agents/Msg>) + 100663434 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@28::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + + + + + + + + + + + + Agents/imgProcessor@53-2 + + + + 100663436 + System.Boolean Agents/imgProcessor@53-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + + + + + 100663437 + System.Void Agents/imgProcessor@53-2::.cctor() + + + - Agents/loop@49-7 + Agents/imgProcessor@59-5 - 100663446 - Agents/Msg Agents/loop@49-7::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) + 100663439 + Types/Msg Agents/imgProcessor@59-5::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - 100663447 - System.Void Agents/loop@49-7::.cctor() + 100663440 + System.Void Agents/imgProcessor@59-5::.cctor() - + - - Agents/loop@46-6 + + Agents/imgProcessor@56-4 - - - 100663449 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/loop@46-6::Invoke(Agents/Msg) + + + 100663442 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@56-4::Invoke(Types/Msg) - - - - - - - - - + + + + + + + + + - - + + + - + - Agents/loop@44-8 + Agents/imgProcessor@54-6 - 100663451 - Microsoft.FSharp.Control.AsyncReturn Agents/loop@44-8::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + 100663444 + Microsoft.FSharp.Control.AsyncReturn Agents/imgProcessor@54-6::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - Agents/loop@44-5 + Agents/imgProcessor@54-3 - 100663453 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/loop@44-5::Invoke(Microsoft.FSharp.Core.Unit) + 100663446 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@54-3::Invoke(Microsoft.FSharp.Core.Unit) - + - + + + + + + + Agents/imgProcessor@53-1 + + + + 100663448 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@53-1::Invoke(Microsoft.FSharp.Core.Unit) + + + - Agents/loop@43-4 + Agents/imgProcessor@51 - 100663455 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/loop@43-4::Invoke(Microsoft.FSharp.Core.Unit) + 100663450 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@51::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) - + - + - Agents/imgProcessor@41 + Agents/msgLogger@75-2 - 100663457 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@41::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Agents/Msg>) + 100663452 + System.Boolean Agents/msgLogger@75-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + + + + + 100663453 + System.Void Agents/msgLogger@75-2::.cctor() + + + - - CpuImageProcessing + + Agents/msgLogger@78-4 - - - 100663458 - System.Byte[0...,0...] CpuImageProcessing::loadAs2DArray(System.String) - + + + 100663455 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@78-4::Invoke(Types/Msg) + - - - - - - - - - + + + + + - - - - - - - - + + + - + - - - 100663459 - CpuImageProcessing/MyImage CpuImageProcessing::loadAsImage(System.String) - - - - - - - + + + + + Agents/msgLogger@76-5 + + + + 100663457 + Microsoft.FSharp.Control.AsyncReturn Agents/msgLogger@76-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + - + - - - 100663460 - a[] CpuImageProcessing::flat2dArray(a[0...,0...]) - + + + + + Agents/msgLogger@76-3 + + + + 100663459 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@76-3::Invoke(Microsoft.FSharp.Core.Unit) + - - + - + - - + + + + + Agents/msgLogger@75-1 + + + 100663461 - System.Void CpuImageProcessing::save2DByteArrayAsImage(System.Byte[0...,0...],System.String) - - - - - - - - + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@75-1::Invoke(Microsoft.FSharp.Core.Unit) + - + - - - 100663462 - System.Void CpuImageProcessing::saveImage(CpuImageProcessing/MyImage,System.String) - + + + + + Agents/msgLogger@73 + + + + 100663463 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@73::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + - - + - - - - - 100663463 - System.Single[][] CpuImageProcessing::get_gaussianBlurKernel() - - - + - - + + 100663464 - System.Single[][] CpuImageProcessing::get_edgesKernel() - - - - - - - 100663465 - System.Single[][] CpuImageProcessing::get_gaussianBlur7x7Kernel() + System.Void Agents/msgLogger@73::.cctor() - + - - + + + + + Agents/superAgent@96-2 + + + 100663466 - System.Single[][] CpuImageProcessing::get_sharpenKernel() - + System.Boolean Agents/superAgent@96-2::Invoke(Microsoft.FSharp.Core.Unit) + + + + - + - - + + 100663467 - System.Single[][] CpuImageProcessing::get_embossKernel() + System.Void Agents/superAgent@96-2::.cctor() - - - - - 100663468 - System.Byte[0...,0...] CpuImageProcessing::applyFilter(System.Single[][],System.Byte[0...,0...]) - - - - - - - - - - + - - + + + + + Agents/superAgent@99-4 + + + 100663469 - CpuImageProcessing/MyImage CpuImageProcessing::applyFilterToImage(System.Single[][],CpuImageProcessing/MyImage) - - - - - - - - - - - - 100663470 - System.Byte[0...,0...] CpuImageProcessing::rotate90Degrees(CpuImageProcessing/Side,System.Byte[0...,0...]) - + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@99-4::Invoke(Types/Msg) + - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + - + - - + + + + + Agents/superAgent@97-5 + + + 100663471 - CpuImageProcessing/MyImage CpuImageProcessing::rotate90DegreesImage(CpuImageProcessing/Side,CpuImageProcessing/MyImage) - - - - - - - - - - - - - - - - - - - - - 100663472 - System.Void CpuImageProcessing::.cctor() + Microsoft.FSharp.Control.AsyncReturn Agents/superAgent@97-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - - CpuImageProcessing/MyImage + + Agents/superAgent@97-3 - - - 100663494 - System.Int32 CpuImageProcessing/MyImage::CompareTo(CpuImageProcessing/MyImage) - + + + 100663473 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@97-3::Invoke(Microsoft.FSharp.Core.Unit) + + + + - + + + + + + Agents/superAgent@96-1 + - 100663495 - System.Int32 CpuImageProcessing/MyImage::CompareTo(System.Object) + 100663475 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@96-1::Invoke(Microsoft.FSharp.Core.Unit) - + - - - 100663496 - System.Int32 CpuImageProcessing/MyImage::CompareTo(System.Object,System.Collections.IComparer) - + + + + + Agents/superAgent@94 + + + + 100663477 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@94::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + + + + - + - - - 100663497 - System.Int32 CpuImageProcessing/MyImage::GetHashCode(System.Collections.IEqualityComparer) - + + + + + Agents/superAgents@124 + + + + 100663479 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents/superAgents@124::Invoke(System.Int32) + + + + - + + + + + + Agents/superImageProcessing@130 + - 100663498 - System.Int32 CpuImageProcessing/MyImage::GetHashCode() + 100663481 + Types/Msg Agents/superImageProcessing@130::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - - - 100663499 - System.Boolean CpuImageProcessing/MyImage::Equals(System.Object,System.Collections.IEqualityComparer) + + + 100663482 + System.Void Agents/superImageProcessing@130::.cctor() - - - - - 100663500 - System.Void CpuImageProcessing/MyImage::.ctor(System.Byte[],System.Int32,System.Int32,System.String) - - - - - - + - - - 100663501 - System.Boolean CpuImageProcessing/MyImage::Equals(CpuImageProcessing/MyImage) + + + + + Agents/superImageProcessing@132-1 + + + + 100663484 + Types/Msg Agents/superImageProcessing@132-1::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - - - 100663502 - System.Boolean CpuImageProcessing/MyImage::Equals(System.Object) + + + 100663485 + System.Void Agents/superImageProcessing@132-1::.cctor() - + - - CpuImageProcessing/Pipe #1 input at line 44@45 + + GpuProcessing - - - 100663503 - System.Void CpuImageProcessing/Pipe #1 input at line 44@45::.ctor(a[0...,0...],System.Int32,System.Collections.Generic.IEnumerator`1<System.Int32>,System.Collections.Generic.IEnumerator`1<System.Int32>,System.Int32,a) - + + + 100663486 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::applyFilter(System.Single[][],Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + - + - - - 100663504 - System.Int32 CpuImageProcessing/Pipe #1 input at line 44@45::GenerateNext(System.Collections.Generic.IEnumerable`1<a>&) + + + 100663487 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::rotate(Types/Side,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - - - - - - + - - - - - - - - - - - 100663505 - System.Void CpuImageProcessing/Pipe #1 input at line 44@45::Close() - - + - - - 100663506 - System.Boolean CpuImageProcessing/Pipe #1 input at line 44@45::get_CheckClose() - + + + 100663488 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::mirror(Types/MirrorDirection,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + + + + + + + 100663489 + Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::fishEye(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + + + + - + + + + + + GpuProcessing/kernel@21 + - 100663507 - a CpuImageProcessing/Pipe #1 input at line 44@45::get_LastGenerated() + 100663491 + Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>>> GpuProcessing/kernel@21::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32) - + + + + + + GpuProcessing/kernel@21D + - 100663508 - System.Collections.Generic.IEnumerator`1<a> CpuImageProcessing/Pipe #1 input at line 44@45::GetFreshEnumerator() + 100663493 + Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@21D::Invoke(System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - + - CpuImageProcessing/processPixel@120-1 + GpuProcessing/result@44 - 100663510 - System.Single CpuImageProcessing/processPixel@120-1::Invoke(System.Single,System.Single,System.Single) + 100663495 + Brahma.FSharp.Msg GpuProcessing/result@44::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - + - + - + + + + + GpuProcessing/applyFilter@23-1 + + + + 100663497 + MyImage/MyImage GpuProcessing/applyFilter@23-1::Invoke(MyImage/MyImage) + + + + + + + + + + + + + + + + + + + + + + GpuProcessing/kernel@63-1 + + - 100663511 - System.Void CpuImageProcessing/processPixel@120-1::.cctor() + 100663499 + Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>> GpuProcessing/kernel@63-1::Invoke(Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32) - + - - CpuImageProcessing/processPixel@112 + + GpuProcessing/kernel@63-1D - - - 100663513 - System.Single CpuImageProcessing/processPixel@112::Invoke(System.Int32,System.Int32) + + + 100663501 + Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@63-1D::Invoke(Brahma.FSharp.ClArray`1<System.Byte>) + + + + + + + + + GpuProcessing/result@80-1 + + + + 100663503 + Brahma.FSharp.Msg GpuProcessing/result@80-1::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + + + + + + + + GpuProcessing/rotate@65 + + + + 100663505 + MyImage/MyImage GpuProcessing/rotate@65::Invoke(MyImage/MyImage) + + + + + + + + + + + + + + + + + + GpuProcessing/kernel@98-2 + + + + 100663507 + Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>> GpuProcessing/kernel@98-2::Invoke(Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32) + + + + + + + + + GpuProcessing/kernel@98-2D + + + + 100663509 + Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@98-2D::Invoke(Brahma.FSharp.ClArray`1<System.Byte>) + + + - CpuImageProcessing/applyFilter@122 + GpuProcessing/result@115-2 - 100663515 - System.Byte CpuImageProcessing/applyFilter@122::Invoke(System.Int32,System.Int32,System.Byte) + 100663511 + Brahma.FSharp.Msg GpuProcessing/result@115-2::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) + + + + + + + + + + + + GpuProcessing/mirror@100 + + + + 100663513 + MyImage/MyImage GpuProcessing/mirror@100::Invoke(MyImage/MyImage) - + + + + + + + - + + + + + + + GpuProcessing/kernel@132-3 + + + + 100663515 + Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@132-3::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + + + - CpuImageProcessing/processPixel@140-3 + GpuProcessing/result@149-3 100663517 - System.Single CpuImageProcessing/processPixel@140-3::Invoke(System.Single,System.Single,System.Single) + Brahma.FSharp.Msg GpuProcessing/result@149-3::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - + + + + + + + + + + GpuProcessing/fishEye@134 + + + + 100663519 + MyImage/MyImage GpuProcessing/fishEye@134::Invoke(MyImage/MyImage) + + + + + + + + + + + + + + + + + + GpuKernels + + + + 100663520 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>> GpuKernels::applyFilterKernel(Brahma.FSharp.ClContext) + + + + + + + + + + + 100663521 + Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::applyFilterProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + + + + + + + + + + + + + + 100663522 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>>> GpuKernels::rotateKernel(Brahma.FSharp.ClContext) + + + + + + + + + + + 100663523 + Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::rotateKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + + + + + + + + + + + + + + + + + + + + 100663524 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>>> GpuKernels::mirrorKernel(Brahma.FSharp.ClContext) + + + + + + + + + + + 100663525 + Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::mirrorKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + + + + + + + + + + + + + + + + + + + + 100663526 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>> GpuKernels::fishEyeKernel(Brahma.FSharp.ClContext) + + + + + + + + + + + 100663527 + Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::fishEyeKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + + + + + + + - + + + + + + + GpuKernels/applyFilterProcessor@50 + + + + 100663529 + Microsoft.FSharp.Core.Unit GpuKernels/applyFilterProcessor@50::Invoke(Microsoft.FSharp.Core.Unit) + + + + + + + + + + + + GpuKernels/rotateKernelProcessor@87 + + + + 100663531 + Microsoft.FSharp.Core.Unit GpuKernels/rotateKernelProcessor@87::Invoke(Microsoft.FSharp.Core.Unit) + + + + + + + + + + + + GpuKernels/mirrorKernelProcessor@124 + + + + 100663533 + Microsoft.FSharp.Core.Unit GpuKernels/mirrorKernelProcessor@124::Invoke(Microsoft.FSharp.Core.Unit) + + + + + + + + + + + + GpuKernels/fishEyeKernelProcessor@173 + + + + 100663535 + Microsoft.FSharp.Core.Unit GpuKernels/fishEyeKernelProcessor@173::Invoke(Microsoft.FSharp.Core.Unit) + + + + + + + + + + + + CpuProcessing + + + + 100663536 + MyImage/MyImage CpuProcessing::applyFilter(System.Single[][],MyImage/MyImage) + + + + + + + + + + + + 100663537 + MyImage/MyImage CpuProcessing::rotate(Types/Side,MyImage/MyImage) + + + + + + + + + + + + + + + + + + + + + 100663538 + MyImage/MyImage CpuProcessing::mirror(Types/MirrorDirection,MyImage/MyImage) + + + + + + + + + + + + + + + + + + + + + 100663539 + MyImage/MyImage CpuProcessing::fishEye(MyImage/MyImage) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CpuProcessing/processPixel@31-1 + + + + 100663541 + System.Single CpuProcessing/processPixel@31-1::Invoke(System.Single,System.Single,System.Single) + + + + + + - 100663518 - System.Void CpuImageProcessing/processPixel@140-3::.cctor() + 100663542 + System.Void CpuProcessing/processPixel@31-1::.cctor() - + - CpuImageProcessing/processPixel@129-2 + CpuProcessing/processPixel@20 - 100663520 - System.Single CpuImageProcessing/processPixel@129-2::Invoke(System.Int32) - + 100663544 + System.Single CpuProcessing/processPixel@20::Invoke(System.Int32) + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - + - CpuImageProcessing/applyFilterToImage@142 + CpuProcessing/applyFilter@33 - 100663522 - System.Byte CpuImageProcessing/applyFilterToImage@142::Invoke(System.Int32,System.Byte) - + 100663546 + System.Byte CpuProcessing/applyFilter@33::Invoke(System.Int32,System.Byte) + - + - + + + + + + + CpuProcessing/getFishCoordinates@78 + + + + 100663548 + System.Tuple`2<System.Double,System.Double> CpuProcessing/getFishCoordinates@78::Invoke(System.Double,System.Double,System.Double) + + + + + + + + + + + + + + + + + MyImage + + + + 100663687 + MyImage/MyImage MyImage::loadAsImage(System.String) + + + + + + + + + + + + + 100663688 + System.Void MyImage::saveImage(MyImage/MyImage,System.String) + + + + + + + + + + + + + MyImage/MyImage + + + + 100663693 + System.Int32 MyImage/MyImage::CompareTo(MyImage/MyImage) + + + + + + + 100663694 + System.Int32 MyImage/MyImage::CompareTo(System.Object) + + + + + + + 100663695 + System.Int32 MyImage/MyImage::CompareTo(System.Object,System.Collections.IComparer) + + + + + + + 100663696 + System.Int32 MyImage/MyImage::GetHashCode(System.Collections.IEqualityComparer) + + + + + + + 100663697 + System.Int32 MyImage/MyImage::GetHashCode() + + + + + + + 100663698 + System.Boolean MyImage/MyImage::Equals(System.Object,System.Collections.IEqualityComparer) + + + + + + + 100663699 + System.Void MyImage/MyImage::.ctor(System.Byte[],System.Int32,System.Int32,System.String) + + + + + + + + + + 100663700 + System.Boolean MyImage/MyImage::Equals(MyImage/MyImage) + + + + + + + 100663701 + System.Boolean MyImage/MyImage::Equals(System.Object) + + + + + + + + + Kernels + + + + 100663702 + System.Single[][] Kernels::get_gaussianBlurKernel() + + + + + + + 100663703 + System.Single[][] Kernels::get_edgesKernel() + + + + + + + 100663704 + System.Single[][] Kernels::get_gaussianBlur7x7Kernel() + + + + + + + 100663705 + System.Single[][] Kernels::get_sharpenKernel() + + + + + + + 100663706 + System.Single[][] Kernels::get_embossKernel() + + + + + + + 100663707 + System.Void Kernels::.cctor() + + + - <StartupCode$ImageProcessing>.$CpuImageProcessing + <StartupCode$ImageProcessing>.$Kernels - 100663523 - System.Void <StartupCode$ImageProcessing>.$CpuImageProcessing::.cctor() - + 100663708 + System.Void <StartupCode$ImageProcessing>.$Kernels::.cctor() + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - + C:\Users\Леонид\ImageProcessing\tests\ImageProcessing.Tests\bin\Debug\net7.0\ImageProcessing.Tests.dll - 2023-03-16T17:32:46.563874Z + 2023-12-16T14:36:32.1428499Z ImageProcessing.Tests From cd6a8b053b59e4e68d00de7cee25a009fd79dabd Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Sat, 16 Dec 2023 22:22:56 +0300 Subject: [PATCH 05/27] Fix description --- src/ImageProcessing/ImageProcessing.fsproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessing/ImageProcessing.fsproj b/src/ImageProcessing/ImageProcessing.fsproj index 6273967b..998545a6 100644 --- a/src/ImageProcessing/ImageProcessing.fsproj +++ b/src/ImageProcessing/ImageProcessing.fsproj @@ -7,7 +7,7 @@ ImageProcessing - ImageProcessing does the thing! + Image processing using GPGPU true From afc12aad4fd52287ce517ea030042f25f1e0566f Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Sat, 16 Dec 2023 23:07:11 +0300 Subject: [PATCH 06/27] Fix changelog --- CHANGELOG.md | 2 +- docs/coverage/ImageProcessing_Agents.html | 274 +++ docs/coverage/ImageProcessing_Arguments.html | 186 ++ .../ImageProcessing_CpuProcessing.html | 210 ++ docs/coverage/ImageProcessing_GpuKernels.html | 295 +++ .../ImageProcessing_GpuProcessing.html | 264 ++ .../ImageProcessing_ImageArrayProcessing.html | 161 ++ docs/coverage/ImageProcessing_Kernels.html | 79 + docs/coverage/ImageProcessing_Main.html | 161 ++ docs/coverage/ImageProcessing_MyImage.html | 140 ++ docs/coverage/class.js | 221 ++ docs/coverage/icon_cube.svg | 2 + docs/coverage/icon_cube_dark.svg | 1 + docs/coverage/icon_down-dir_active.svg | 2 + docs/coverage/icon_down-dir_active_dark.svg | 1 + docs/coverage/icon_fork.svg | 2 + docs/coverage/icon_fork_dark.svg | 1 + docs/coverage/icon_info-circled.svg | 2 + docs/coverage/icon_info-circled_dark.svg | 2 + docs/coverage/icon_minus.svg | 2 + docs/coverage/icon_minus_dark.svg | 1 + docs/coverage/icon_plus.svg | 2 + docs/coverage/icon_plus_dark.svg | 1 + docs/coverage/icon_search-minus.svg | 2 + docs/coverage/icon_search-minus_dark.svg | 1 + docs/coverage/icon_search-plus.svg | 2 + docs/coverage/icon_search-plus_dark.svg | 1 + docs/coverage/icon_sponsor.svg | 2 + docs/coverage/icon_star.svg | 2 + docs/coverage/icon_star_dark.svg | 2 + docs/coverage/icon_up-dir.svg | 2 + docs/coverage/icon_up-dir_active.svg | 2 + docs/coverage/icon_wrench.svg | 2 + docs/coverage/icon_wrench_dark.svg | 1 + docs/coverage/index.htm | 203 ++ docs/coverage/index.html | 203 ++ docs/coverage/main.js | 359 +++ docs/coverage/report.css | 564 +++++ src/ImageProcessing/AssemblyInfo.fs | 44 +- src/ImageProcessing/ImageProcessing.fsproj | 2 +- tests/ImageProcessing.Tests/AssemblyInfo.fs | 20 +- tests/ImageProcessing.Tests/CpuTests.fs | 31 +- .../ImageProcessing.Tests/GpuCpuComparison.fs | 4 +- tests/ImageProcessing.Tests/GpuTests.fs | 64 +- tests/ImageProcessing.Tests/coverage.xml | 2192 +++++++++-------- 45 files changed, 4584 insertions(+), 1133 deletions(-) create mode 100644 docs/coverage/ImageProcessing_Agents.html create mode 100644 docs/coverage/ImageProcessing_Arguments.html create mode 100644 docs/coverage/ImageProcessing_CpuProcessing.html create mode 100644 docs/coverage/ImageProcessing_GpuKernels.html create mode 100644 docs/coverage/ImageProcessing_GpuProcessing.html create mode 100644 docs/coverage/ImageProcessing_ImageArrayProcessing.html create mode 100644 docs/coverage/ImageProcessing_Kernels.html create mode 100644 docs/coverage/ImageProcessing_Main.html create mode 100644 docs/coverage/ImageProcessing_MyImage.html create mode 100644 docs/coverage/class.js create mode 100644 docs/coverage/icon_cube.svg create mode 100644 docs/coverage/icon_cube_dark.svg create mode 100644 docs/coverage/icon_down-dir_active.svg create mode 100644 docs/coverage/icon_down-dir_active_dark.svg create mode 100644 docs/coverage/icon_fork.svg create mode 100644 docs/coverage/icon_fork_dark.svg create mode 100644 docs/coverage/icon_info-circled.svg create mode 100644 docs/coverage/icon_info-circled_dark.svg create mode 100644 docs/coverage/icon_minus.svg create mode 100644 docs/coverage/icon_minus_dark.svg create mode 100644 docs/coverage/icon_plus.svg create mode 100644 docs/coverage/icon_plus_dark.svg create mode 100644 docs/coverage/icon_search-minus.svg create mode 100644 docs/coverage/icon_search-minus_dark.svg create mode 100644 docs/coverage/icon_search-plus.svg create mode 100644 docs/coverage/icon_search-plus_dark.svg create mode 100644 docs/coverage/icon_sponsor.svg create mode 100644 docs/coverage/icon_star.svg create mode 100644 docs/coverage/icon_star_dark.svg create mode 100644 docs/coverage/icon_up-dir.svg create mode 100644 docs/coverage/icon_up-dir_active.svg create mode 100644 docs/coverage/icon_wrench.svg create mode 100644 docs/coverage/icon_wrench_dark.svg create mode 100644 docs/coverage/index.htm create mode 100644 docs/coverage/index.html create mode 100644 docs/coverage/main.js create mode 100644 docs/coverage/report.css diff --git a/CHANGELOG.md b/CHANGELOG.md index a8591c55..e040bb3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,4 +15,4 @@ First release - Parallel image processing using agents - Processing using the CPU or any GPU on your device -[0.1.0]: https://github.com/user/MyCoolNewApp.git/releases/tag/v0.1.0 +[0.1.0]: https://github.com/LeonidLodygin/ImageProcessing/releases/tag/v1.0.0 diff --git a/docs/coverage/ImageProcessing_Agents.html b/docs/coverage/ImageProcessing_Agents.html new file mode 100644 index 00000000..0715bc9a --- /dev/null +++ b/docs/coverage/ImageProcessing_Agents.html @@ -0,0 +1,274 @@ + + + + + + +ImageProcessing.Agents - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + + +
Class:ImageProcessing.Agents
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Agents.fs
Covered lines:0
Uncovered lines:71
Coverable lines:71
Total lines:132
Line coverage:0% (0 of 71)
Covered branches:0
Total branches:16
Branch coverage:0% (0 of 16)
Covered methods:0
Total methods:23
Method coverage:0% (0 of 23)
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
listAllFiles(...)0%2100%
outFile(...)0%2100%
imgSaver(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%30530%
imgProcessor(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%30530%
msgLogger()0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%20430%
superAgent(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%2100%
Invoke(...)0%20430%
superImageProcessing(...)0%90940%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Agents.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1/// <summary>
 2/// Module with implementation of agents for image processing
 3/// </summary>
 4module ImageProcessing.Agents
 5
 6open Types
 7open MyImage
 8
 9/// <summary>
 10/// List of all files in directory
 11/// </summary>
 12let listAllFiles dir =
 13    let files = System.IO.Directory.GetFiles dir
 014    List.ofArray files
 15
 16/// <summary>
 17/// Creation of path to save the image
 18/// </summary>
 019let outFile (imgName: string) (outDir: string) = System.IO.Path.Combine(outDir, imgName)
 20
 21/// <summary>
 22/// Agent for saving images
 23/// </summary>
 24/// <param name="outDir">Path to save</param>
 25/// <param name="logger">Logging Agent</param>
 26let imgSaver outDir (logger: MailboxProcessor<_>) =
 27
 028    MailboxProcessor.Start(fun inbox ->
 029        async {
 030            while true do
 031                let! msg = inbox.Receive()
 032
 033                match msg with
 034                | EOS ch ->
 035                    logger.Post(Message "Image saver is finished!")
 036                    ch.Reply()
 037                | Img img ->
 038                    logger.Post(Message $"Save: %A{img.Name}")
 039                    saveImage img (outFile img.Name outDir)
 040                | _ -> failwith "imgSaver received the wrong message"
 041        })
 42
 43/// <summary>
 44/// Agent for image processing
 45/// </summary>
 46/// <param name="filter">Filter for application</param>
 47/// <param name="imgSaver">Saving Agent</param>
 48/// <param name="logger">Logging Agent</param>
 49let imgProcessor filter (imgSaver: MailboxProcessor<_>) (logger: MailboxProcessor<_>) =
 50
 051    MailboxProcessor.Start(fun inbox ->
 052        async {
 053            while true do
 054                let! msg = inbox.Receive()
 055
 056                match msg with
 057                | EOS ch ->
 058                    logger.Post(Message "Image processor is ready to finish!")
 059                    imgSaver.PostAndReply Msg.EOS
 060                    logger.Post(Message "Image processor is finished!")
 061                    ch.Reply()
 062                | Img img ->
 063                    logger.Post(Message $"Filter: %A{img.Name}")
 064                    let filtered = filter img
 065                    imgSaver.Post(Img filtered)
 066                | _ -> failwith "imgProcessor received the wrong message"
 067        })
 68
 69/// <summary>
 70/// Agent for logging
 71/// </summary>
 72let msgLogger () =
 073    MailboxProcessor.Start(fun inbox ->
 074        async {
 075            while true do
 076                let! msg = inbox.Receive()
 077
 078                match msg with
 079                | EOS ch ->
 080                    printfn "msgLogger is finished!"
 081                    ch.Reply()
 082                | Message s -> printfn $"%s{s}"
 083                | _ -> failwith "msgLogger received the wrong message"
 084        })
 85
 86/// <summary>
 87/// Agent with the ability to process and save the image
 88/// </summary>
 89/// <param name="outputDir">Path to save</param>
 90/// <param name="conversion">Image transformation</param>
 91/// <param name="logger">Logging Agent</param>
 92let superAgent outputDir conversion (logger: MailboxProcessor<_>) =
 93
 094    MailboxProcessor.Start(fun inbox ->
 095        async {
 096            while true do
 097                let! msg = inbox.Receive()
 098
 099                match msg with
 0100                | EOS ch ->
 0101                    logger.Post(Message "SuperAgent is finished!")
 0102                    ch.Reply()
 0103                | Path inputPath ->
 0104                    let image = loadAsImage inputPath
 0105                    logger.Post(Message $"Filter: %A{image.Name}")
 0106                    let filtered = conversion image
 0107                    saveImage filtered (outFile image.Name outputDir)
 0108                    logger.Post(Message $"Save: %A{image.Name}")
 0109                | _ -> failwith "superAgent received the wrong message"
 0110        })
 111
 112/// <summary>
 113/// Image processing using superAgents
 114/// </summary>
 115/// <param name="inputDir">Path to image or images</param>
 116/// <param name="outputDir">Path to save</param>
 117/// <param name="conversion">Image transformation</param>
 118/// <param name="countOfAgents">Count of superAgents to processing</param>
 119let superImageProcessing inputDir outputDir conversion countOfAgents =
 0120    let filesToProcess = listAllFiles inputDir
 0121    let logger = msgLogger ()
 122
 0123    let superAgents =
 0124        Array.init countOfAgents (fun _ -> superAgent outputDir conversion logger)
 125
 0126    for file in filesToProcess do
 0127        (superAgents |> Array.minBy (fun p -> p.CurrentQueueLength)).Post(Path file)
 128
 0129    for agent in superAgents do
 0130        agent.PostAndReply EOS
 131
 0132    logger.PostAndReply EOS
+
+
+
+

Methods/Properties

+listAllFiles(System.String)
+outFile(System.String,System.String)
+imgSaver(System.String,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(ImageProcessing.Types/Msg)
+imgProcessor(Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(ImageProcessing.Types/Msg)
+msgLogger()
+Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(ImageProcessing.Types/Msg)
+superAgent(System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(Microsoft.FSharp.Core.Unit)
+Invoke(ImageProcessing.Types/Msg)
+superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,System.Int32)
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Arguments.html b/docs/coverage/ImageProcessing_Arguments.html new file mode 100644 index 00000000..72bbb075 --- /dev/null +++ b/docs/coverage/ImageProcessing_Arguments.html @@ -0,0 +1,186 @@ + + + + + + +ImageProcessing.Arguments - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + + +
Class:ImageProcessing.Arguments
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Arguments.fs
Covered lines:22
Uncovered lines:16
Coverable lines:38
Total lines:74
Line coverage:57.8% (22 of 38)
Covered branches:20
Total branches:30
Branch coverage:66.6% (20 of 30)
Covered methods:2
Total methods:8
Method coverage:25% (2 of 8)
+

Metrics

+ + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
first(...)0%2100%
second(...)0%2100%
third(...)0%2100%
fourth(...)0%2100%
modificationParser(...)100%101010100%
modificationGpuParser(...)100%101010100%
deviceParser(...)0%20440%
Argu.IArgParserTemplate.get_Usage()0%42660%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Arguments.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1/// <summary>
 2/// Module with implementation of work via console commands
 3/// </summary>
 4module ImageProcessing.Arguments
 5
 6open Argu
 7open Kernels
 8open Types
 9open Brahma.FSharp
 10
 011let first (x, _, _, _) = x
 012let second (_, x, _, _) = x
 013let third (_, _, x, _) = x
 014let fourth (_, _, _, x) = x
 15
 16/// <summary>
 17/// Parsing of CPU modification
 18/// </summary>
 19let modificationParser modification =
 14820    match modification with
 921    | Gauss5x5 -> CpuProcessing.applyFilter gaussianBlurKernel
 1022    | Gauss7x7 -> CpuProcessing.applyFilter gaussianBlur7x7Kernel
 923    | Edges -> CpuProcessing.applyFilter edgesKernel
 624    | Sharpen -> CpuProcessing.applyFilter sharpenKernel
 925    | Emboss -> CpuProcessing.applyFilter embossKernel
 3026    | ClockwiseRotation -> CpuProcessing.rotate Right
 2227    | CounterClockwiseRotation -> CpuProcessing.rotate Left
 2228    | MirrorVertical -> CpuProcessing.mirror Vertical
 2129    | MirrorHorizontal -> CpuProcessing.mirror Horizontal
 1030    | FishEye -> CpuProcessing.fishEye
 31
 32/// <summary>
 33/// Parsing of GPU modification
 34/// </summary>
 35let modificationGpuParser modification cortege =
 11136    match modification with
 1037    | Gauss5x5 -> GpuProcessing.applyFilter gaussianBlurKernel (first cortege)
 1038    | Gauss7x7 -> GpuProcessing.applyFilter gaussianBlur7x7Kernel (first cortege)
 1239    | Edges -> GpuProcessing.applyFilter edgesKernel (first cortege)
 940    | Sharpen -> GpuProcessing.applyFilter sharpenKernel (first cortege)
 841    | Emboss -> GpuProcessing.applyFilter embossKernel (first cortege)
 1842    | ClockwiseRotation -> GpuProcessing.rotate Right (second cortege)
 1143    | CounterClockwiseRotation -> GpuProcessing.rotate Left (second cortege)
 944    | MirrorVertical -> GpuProcessing.mirror Vertical (third cortege)
 1045    | MirrorHorizontal -> GpuProcessing.mirror Horizontal (third cortege)
 1446    | FishEye -> GpuProcessing.fishEye (fourth cortege)
 47
 48/// <summary>
 49/// Parsing of device
 50/// </summary>
 51let deviceParser device =
 052    match device with
 053    | AnyGpu -> Platform.Any
 054    | Nvidia -> Platform.Nvidia
 055    | Amd -> Platform.Amd
 056    | Intel -> Platform.Intel
 57
 58type CliArguments =
 59    | [<Mandatory; AltCommandLine("-i")>] InputPath of inputPath: string
 60    | [<Mandatory; AltCommandLine("-o")>] OutputPath of outputPath: string
 61    | [<AltCommandLine("-ag"); Last>] Agents
 62    | [<AltCommandLine("-sag"); Last>] SuperAgents of count: int
 63    | [<AltCommandLine("-mod")>] Modifications of modifications: List<Modifications>
 64    | [<AltCommandLine("-gpu")>] GpGpu of device: Devices
 65
 66    interface IArgParserTemplate with
 67        member s.Usage =
 068            match s with
 069            | Agents -> "Apply modifications to an image using agents"
 070            | SuperAgents _ -> "Apply modifications to an image using super agents"
 071            | Modifications _ -> "Set of modifications to image or image array"
 072            | InputPath _ -> "Input directory or path to the image"
 073            | OutputPath _ -> "Output directory or path to saved image"
 074            | GpGpu _ -> "Processing on Gpu"
+
+
+
+

Methods/Properties

+first(a,b,c,d)
+second(a,b,c,d)
+third(a,b,c,d)
+fourth(a,b,c,d)
+modificationParser(ImageProcessing.Types/Modifications)
+modificationGpuParser(ImageProcessing.Types/Modifications,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>)
+deviceParser(ImageProcessing.Types/Devices)
+Argu.IArgParserTemplate.get_Usage()
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_CpuProcessing.html b/docs/coverage/ImageProcessing_CpuProcessing.html new file mode 100644 index 00000000..0f180295 --- /dev/null +++ b/docs/coverage/ImageProcessing_CpuProcessing.html @@ -0,0 +1,210 @@ + + + + + + +ImageProcessing.CpuProcessing - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + + +
Class:ImageProcessing.CpuProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuProcessing.fs
Covered lines:40
Uncovered lines:0
Coverable lines:40
Total lines:98
Line coverage:100% (40 of 40)
Covered branches:32
Total branches:32
Branch coverage:100% (32 of 32)
Covered methods:8
Total methods:8
Method coverage:100% (8 of 8)
+

Metrics

+ + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
applyFilter(...)0%110100%
processPixel@19(...)100%9964100%
Invoke(...)0%110100%
Invoke(...)0%110100%
rotate(...)100%334100%
mirror(...)100%334100%
fishEye(...)100%6632100%
getFishCoordinates@77(...)100%222100%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuProcessing.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1/// <summary>
 2/// Module with functions for image processing on the CPU
 3/// </summary>
 4module ImageProcessing.CpuProcessing
 5
 6open MyImage
 7open Types
 8
 9/// <summary>
 10/// Filter application
 11/// </summary>
 12/// <param name="filter">A two-dimensional array applied to an image as a filter</param>
 13/// <param name="image">Image with type MyImage</param>
 14/// <returns>Image with type MyImage</returns>
 15let applyFilter (filter: float32[][]) (img: MyImage) =
 4416    let filterD = (Array.length filter) / 2
 4417    let filter = Array.concat filter
 18
 19    let processPixel p =
 12173320        let pw = p % img.Width
 12173321        let ph = p / img.Width
 22
 23        let dataToHandle =
 101081124            [| for i in ph - filterD .. ph + filterD do
 724952025                   for j in pw - filterD .. pw + filterD do
 2451879726                       if i < 0 || i >= img.Height || j < 0 || j >= img.Width then
 14390427                           float32 img.Data[p]
 28                       else
 480358129                           float32 img.Data[i * img.Width + j] |]
 30
 506921831        Array.fold2 (fun s x y -> s + x * y) 0.0f filter dataToHandle
 32
 12177733    MyImage(Array.mapi (fun p _ -> byte (processPixel p)) img.Data, img.Width, img.Height, img.Name)
 34
 35/// <summary>
 36/// Rotate of image
 37/// </summary>
 38/// <param name="side">The side to which the image will be rotated</param>
 39/// <param name="image">Image with type MyImage</param>
 40/// <returns>Image with type MyImage</returns>
 41let rotate (side: Side) (image: MyImage) =
 45742    let res = Array.zeroCreate image.Data.Length
 43
 743750844    for p in 0 .. image.Data.Length - 1 do
 743659445        if side = Right then
 741055546            res[(p % image.Width) * image.Height + image.Height - 1 - p / image.Width] <- image.Data[p]
 47        else
 2603948            res[image.Height * (image.Width - 1 - p % image.Width) + p / image.Width] <- image.Data[p]
 49
 45750    MyImage(res, image.Height, image.Width, image.Name)
 51
 52/// <summary>
 53/// Image Reflection
 54/// </summary>
 55/// <param name="side">The side to which the image will be reflected</param>
 56/// <param name="image">Image with type MyImage</param>
 57/// <returns>Image with type MyImage</returns>
 58let mirror (side: MirrorDirection) (image: MyImage) =
 4359    let res = Array.zeroCreate image.Data.Length
 60
 4197361    for p in 0 .. image.Data.Length - 1 do
 4188762        if side = Vertical then
 2033363            res[p - p % image.Width + image.Width - 1 - p % image.Width] <- image.Data[p]
 64        else
 2155465            res[(image.Height - 1 - p / image.Width) * image.Width + p % image.Width] <- image.Data[p]
 66
 4367    MyImage(res, image.Width, image.Height, image.Name)
 68
 69/// <summary>
 70/// Applying "FishEye" to an image
 71/// </summary>
 72/// <param name="image">Image with type MyImage</param>
 73/// <returns>Image with type MyImage</returns>
 74let fishEye (image: MyImage) =
 1075    let distortion = 0.5
 76
 77    let getFishCoordinates (x: float) (y: float) (r: float) =
 735278        if 1.0 - distortion * r = 0 then
 1079            x, y
 80        else
 734281            x / (1.0 - distortion * r), y / (1.0 - distortion * r)
 82
 1083    let h = float image.Height
 1084    let w = float image.Width
 1085    let res = Array.zeroCreate image.Data.Length
 86
 737287    for p in 0 .. image.Data.Length - 1 do
 735288        let xnd = (2.0 * float (p / image.Width) - h) / h
 735289        let ynd = (2.0 * float (p % image.Width) - w) / w
 735290        let radius = xnd * xnd + ynd * ynd
 735291        let xdu, ydu = getFishCoordinates xnd ynd radius
 735292        let xu = int ((xdu + 1.0) * h) / 2
 735293        let yu = int ((ydu + 1.0) * w) / 2
 94
 2954795        if 0 <= xu && xu < int h && 0 <= yu && yu < int w then
 361996            res[p] <- image.Data[xu * image.Width + yu]
 97
 1098    MyImage(res, image.Width, image.Height, image.Name)
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_GpuKernels.html b/docs/coverage/ImageProcessing_GpuKernels.html new file mode 100644 index 00000000..7696ccb4 --- /dev/null +++ b/docs/coverage/ImageProcessing_GpuKernels.html @@ -0,0 +1,295 @@ + + + + + + +ImageProcessing.GpuKernels - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + + +
Class:ImageProcessing.GpuKernels
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuKernels.fs
Covered lines:95
Uncovered lines:0
Coverable lines:95
Total lines:175
Line coverage:100% (95 of 95)
Covered branches:4
Total branches:4
Branch coverage:100% (4 of 4)
Covered methods:12
Total methods:12
Method coverage:100% (12 of 12)
+

Metrics

+ + + + + + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
applyFilterKernel(...)0%110100%
applyFilterProcessor(...)0%110100%
Invoke(...)0%110100%
rotateKernel(...)0%110100%
rotateKernelProcessor(...)100%222100%
Invoke(...)0%110100%
mirrorKernel(...)0%110100%
mirrorKernelProcessor(...)100%222100%
Invoke(...)0%110100%
fishEyeKernel(...)0%110100%
fishEyeKernelProcessor(...)0%110100%
Invoke(...)0%110100%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuKernels.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1/// <summary>
 2/// Module with kernels for image processing on the GPU
 3/// </summary>
 4module ImageProcessing.GpuKernels
 5
 6open Types
 7open Brahma.FSharp
 8
 9/// <summary>
 10/// Compilation of kernel to apply filter to the image
 11/// </summary>
 12let applyFilterKernel (clContext: ClContext) =
 13
 114    let kernel =
 115        <@
 116            fun (r: Range1D) (img: ClArray<_>) imgW imgH (filter: ClArray<_>) filterD (result: ClArray<_>) ->
 117                let p = r.GlobalID0
 118                let pw = p % imgW
 119                let ph = p / imgW
 120                let mutable res = 0.0f
 121
 122                for i in ph - filterD .. ph + filterD do
 123                    for j in pw - filterD .. pw + filterD do
 124                        let mutable d = 0uy
 125
 126                        if i < 0 || i >= imgH || j < 0 || j >= imgW then
 127                            d <- img[p]
 128                        else
 129                            d <- img[i * imgW + j]
 130
 131                        let f = filter[(i - ph + filterD) * (2 * filterD + 1) + (j - pw + filterD)]
 132                        res <- res + (float32 d) * f
 133
 134                result[p] <- byte (int res)
 135        @>
 36
 137    clContext.Compile kernel
 38
 39/// <summary>
 40/// Asynchronous application of the filter kernel to the image
 41/// </summary>
 42let applyFilterProcessor
 43    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit>)
 44    localWorkSize
 45    =
 46
 47    fun (commandQueue: MailboxProcessor<_>) (filter: ClArray<float32>) filterD (img: ClArray<byte>) imgH imgW (result: C
 5048        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 5049        let kernel = kernel.GetKernel()
 10050        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH filter filterD result))
 5051        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 5052        result
 53
 54/// <summary>
 55/// Compilation of kernel to rotate the image
 56/// </summary>
 57let rotateKernel (clContext: ClContext) =
 58
 159    let kernel =
 160        <@
 161            fun (r: Range1D) (img: ClArray<_>) imgW imgH (i: int) (result: ClArray<_>) ->
 162                let p = r.GlobalID0
 163
 164                if p / imgW < imgH then
 165                    if i = 1 then
 166                        result[(p % imgW) * imgH + imgH - 1 - p / imgW] <- img[p]
 167                    else
 168                        result[imgH * (imgW - 1 - p % imgW) + p / imgW] <- img[p]
 169        @>
 70
 71
 172    clContext.Compile kernel
 73
 74/// <summary>
 75/// Asynchronous application of the rotation kernel to the image
 76/// </summary>
 77let rotateKernelProcessor
 78    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit>)
 79    localWorkSize
 80    side
 81    =
 82
 83    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
 43484        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 43485        let kernel = kernel.GetKernel()
 86886        let i = if side = Right then 1 else 0
 86887        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH i result))
 43488        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 43489        result
 90
 91/// <summary>
 92/// Compilation of kernel to reflect the image
 93/// </summary>
 94let mirrorKernel (clContext: ClContext) =
 95
 196    let kernel =
 197        <@
 198            fun (r: Range1D) (img: ClArray<_>) imgW imgH i (result: ClArray<_>) ->
 199                let p = r.GlobalID0
 1100
 1101                if p / imgW < imgH then
 1102                    if i = 1 then
 1103                        result[p - p % imgW + imgW - 1 - p % imgW] <- img[p]
 1104                    else
 1105                        result[(imgH - 1 - p / imgW) * imgW + p % imgW] <- img[p]
 1106        @>
 107
 108
 1109    clContext.Compile kernel
 110
 111/// <summary>
 112/// Asynchronous application of the reflection kernel to the image
 113/// </summary>
 114let mirrorKernelProcessor
 115    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit>)
 116    localWorkSize
 117    side
 118    =
 119
 120    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
 19121        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 19122        let kernel = kernel.GetKernel()
 38123        let i = if side = Vertical then 1 else 0
 38124        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH i result))
 19125        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 19126        result
 127
 128/// <summary>
 129/// Compilation of kernel to apply FishEye to the image
 130/// </summary>
 131let fishEyeKernel (clContext: ClContext) =
 132
 1133    let kernel =
 1134        <@
 1135            fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
 1136                let distortion = 0.5f
 1137                let p = r.GlobalID0
 1138
 1139                if p / imgW < imgH then
 1140                    let h = float32 imgH
 1141                    let w = float32 imgW
 1142                    let xnd = (2.0f * float32 (p / imgW) - h) / h
 1143                    let ynd = (2.0f * float32 (p % imgW) - w) / w
 1144                    let radius = xnd * xnd + ynd * ynd
 1145
 1146                    let xdu, ydu =
 1147                        if 1.0f - distortion * radius = 0.0f then
 1148                            xnd, ynd
 1149                        else
 1150                            xnd / (1.0f - distortion * radius), ynd / (1.0f - distortion * radius)
 1151
 1152                    let xu = int ((xdu + 1.0f) * h) / 2
 1153                    let yu = int ((ydu + 1.0f) * w) / 2
 1154
 1155                    if 0 <= xu && xu < int h && 0 <= yu && yu < int w then
 1156                        result[p] <- img[xu * imgW + yu]
 1157        @>
 158
 159
 1160    clContext.Compile kernel
 161
 162/// <summary>
 163/// Asynchronous application of the fisheye kernel to the image
 164/// </summary>
 165let fishEyeKernelProcessor
 166    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> ClArray<byte> -> unit>)
 167    localWorkSize
 168    =
 169
 170    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
 14171        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
 14172        let kernel = kernel.GetKernel()
 28173        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH result))
 14174        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
 14175        result
+
+
+
+

Methods/Properties

+applyFilterKernel(Brahma.FSharp.ClContext)
+applyFilterProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
+Invoke(Microsoft.FSharp.Core.Unit)
+rotateKernel(Brahma.FSharp.ClContext)
+rotateKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,ImageProcessing.Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
+Invoke(Microsoft.FSharp.Core.Unit)
+mirrorKernel(Brahma.FSharp.ClContext)
+mirrorKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,ImageProcessing.Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
+Invoke(Microsoft.FSharp.Core.Unit)
+fishEyeKernel(Brahma.FSharp.ClContext)
+fishEyeKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
+Invoke(Microsoft.FSharp.Core.Unit)
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_GpuProcessing.html b/docs/coverage/ImageProcessing_GpuProcessing.html new file mode 100644 index 00000000..9d9a4550 --- /dev/null +++ b/docs/coverage/ImageProcessing_GpuProcessing.html @@ -0,0 +1,264 @@ + + + + + + +ImageProcessing.GpuProcessing - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + +
Class:ImageProcessing.GpuProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuProcessing.fs
Covered lines:64
Uncovered lines:0
Coverable lines:64
Total lines:153
Line coverage:100% (64 of 64)
Covered branches:0
Total branches:0
Covered methods:8
Total methods:8
Method coverage:100% (8 of 8)
+

Metrics

+ + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Invoke(...)0%110100%
Invoke(...)0%110100%
Invoke(...)0%110100%
Invoke(...)0%110100%
Invoke(...)0%110100%
Invoke(...)0%110100%
Invoke(...)0%110100%
Invoke(...)0%110100%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuProcessing.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1/// <summary>
 2/// Module with functions for image processing on the GPU
 3/// </summary>
 4module ImageProcessing.GpuProcessing
 5
 6open Brahma.FSharp
 7open MyImage
 8open GpuKernels
 9
 10/// <summary>
 11/// Filter application
 12/// </summary>
 13/// <param name="filter">A two-dimensional array applied to an image as a filter</param>
 14/// <param name="kernel">Compiled kernel for filter application</param>
 15/// <param name="clContext">Abstraction over OpenCL context</param>
 16/// <param name="localWorkSize">Local workgroup size</param>
 17/// <param name="queue">Command queue capable of handling messages of type Msg</param>
 18/// <param name="image">Image with type MyImage</param>
 19/// <returns>Image with type MyImage</returns>
 20let applyFilter (filter: float32[][]) kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
 21    let kernel = applyFilterProcessor kernel localWorkSize
 22
 23    fun (img: MyImage) ->
 24
 5025        let mutable input =
 5026            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 27
 5028        let mutable output =
 5029            clContext.CreateClArray(
 5030                img.Data.Length,
 5031                HostAccessMode.NotAccessible,
 5032                allocationMode = AllocationMode.Default
 5033            )
 34
 5035        let filterD = (Array.length filter) / 2
 5036        let filter = Array.concat filter
 37
 5038        let clFilter =
 5039            clContext.CreateClArray<_>(filter, HostAccessMode.NotAccessible, DeviceAccessMode.ReadOnly)
 40
 5041        let result = Array.zeroCreate (img.Height * img.Width)
 42
 5043        let result =
 5044            queue.PostAndReply(fun ch ->
 10045                Msg.CreateToHostMsg(kernel queue clFilter filterD input img.Height img.Width output, result, ch))
 46
 5047        queue.Post(Msg.CreateFreeMsg clFilter)
 5048        queue.Post(Msg.CreateFreeMsg input)
 5049        queue.Post(Msg.CreateFreeMsg output)
 5050        MyImage(result, img.Width, img.Height, img.Name)
 51
 52/// <summary>
 53/// Rotate of image
 54/// </summary>
 55/// <param name="side">The side to which the image will be rotated</param>
 56/// <param name="kernel">Compiled kernel for rotation application</param>
 57/// <param name="clContext">Abstraction over OpenCL context</param>
 58/// <param name="localWorkSize">Local workgroup size</param>
 59/// <param name="queue">Command queue capable of handling messages of type Msg</param>
 60/// <param name="image">Image with type MyImage</param>
 61/// <returns>Image with type MyImage</returns>
 62let rotate side kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
 63    let kernel = rotateKernelProcessor kernel localWorkSize
 64
 65    fun (img: MyImage) ->
 66
 43467        let mutable input =
 43468            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 69
 43470        let mutable output =
 43471            clContext.CreateClArray(
 43472                img.Data.Length,
 43473                HostAccessMode.NotAccessible,
 43474                allocationMode = AllocationMode.Default
 43475            )
 76
 43477        let result = Array.zeroCreate img.Data.Length
 78
 43479        let result =
 43480            queue.PostAndReply(fun ch ->
 86881                Msg.CreateToHostMsg(kernel side queue input img.Height img.Width output, result, ch))
 82
 43483        queue.Post(Msg.CreateFreeMsg input)
 43484        queue.Post(Msg.CreateFreeMsg output)
 43485        MyImage(result, img.Height, img.Width, img.Name)
 86
 87/// <summary>
 88/// Reflection of image
 89/// </summary>
 90/// <param name="side">The side to which the image will be reflected</param>
 91/// <param name="kernel">Compiled kernel for reflection application</param>
 92/// <param name="clContext">Abstraction over OpenCL context</param>
 93/// <param name="localWorkSize">Local workgroup size</param>
 94/// <param name="queue">Command queue capable of handling messages of type Msg</param>
 95/// <param name="image">Image with type MyImage</param>
 96/// <returns>Image with type MyImage</returns>
 97let mirror side kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
 98    let kernel = mirrorKernelProcessor kernel localWorkSize
 99
 100    fun (img: MyImage) ->
 101
 19102        let mutable input =
 19103            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 104
 19105        let mutable output =
 19106            clContext.CreateClArray(
 19107                img.Data.Length,
 19108                HostAccessMode.NotAccessible,
 19109                allocationMode = AllocationMode.Default
 19110            )
 111
 19112        let result = Array.zeroCreate img.Data.Length
 113
 19114        let result =
 19115            queue.PostAndReply(fun ch ->
 38116                Msg.CreateToHostMsg(kernel side queue input img.Height img.Width output, result, ch))
 117
 19118        queue.Post(Msg.CreateFreeMsg input)
 19119        queue.Post(Msg.CreateFreeMsg output)
 19120        MyImage(result, img.Width, img.Height, img.Name)
 121
 122/// <summary>
 123/// Applying fisheye filter to the image
 124/// </summary>
 125/// <param name="kernel">Compiled kernel for fisheye filter application</param>
 126/// <param name="clContext">Abstraction over OpenCL context</param>
 127/// <param name="localWorkSize">Local workgroup size</param>
 128/// <param name="queue">Command queue capable of handling messages of type Msg</param>
 129/// <param name="image">Image with type MyImage</param>
 130/// <returns>Image with type MyImage</returns>
 131let fishEye kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
 132    let kernel = fishEyeKernelProcessor kernel localWorkSize
 133
 134    fun (img: MyImage) ->
 135
 14136        let mutable input =
 14137            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
 138
 14139        let mutable output =
 14140            clContext.CreateClArray(
 14141                img.Data.Length,
 14142                HostAccessMode.NotAccessible,
 14143                allocationMode = AllocationMode.Default
 14144            )
 145
 14146        let result = Array.zeroCreate img.Data.Length
 147
 14148        let result =
 28149            queue.PostAndReply(fun ch -> Msg.CreateToHostMsg(kernel queue input img.Height img.Width output, result, ch)
 150
 14151        queue.Post(Msg.CreateFreeMsg input)
 14152        queue.Post(Msg.CreateFreeMsg output)
 14153        MyImage(result, img.Width, img.Height, img.Name)
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_ImageArrayProcessing.html b/docs/coverage/ImageProcessing_ImageArrayProcessing.html new file mode 100644 index 00000000..4defcff5 --- /dev/null +++ b/docs/coverage/ImageProcessing_ImageArrayProcessing.html @@ -0,0 +1,161 @@ + + + + + + +ImageProcessing.ImageArrayProcessing - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + + +
Class:ImageProcessing.ImageArrayProcessing
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageArrayProcessing.fs
Covered lines:0
Uncovered lines:13
Coverable lines:13
Total lines:57
Line coverage:0% (0 of 13)
Covered branches:0
Total branches:6
Branch coverage:0% (0 of 6)
Covered methods:0
Total methods:4
Method coverage:0% (0 of 4)
+

Metrics

+ + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
listAllFiles(...)0%2100%
Invoke(...)0%20400%
arrayOfImagesProcessing(...)0%20480%
helper@53(...)0%2100%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageArrayProcessing.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1/// <summary>
 2/// Module with implementation of processing array of images
 3/// </summary>
 4module ImageProcessing.ImageArrayProcessing
 5
 6open MyImage
 7open Agents
 8open Types
 9
 10let extensions =
 11    [| ".png"
 12       ".jpeg"
 13       ".jpg"
 14       ".gif"
 15       ".jfif"
 16       ".webp"
 17       ".pbm"
 18       ".bmp"
 19       ".tga"
 20       ".tiff" |]
 21
 22/// <summary>
 23/// List of all files in directory with correct extensions
 24/// </summary>
 25let listAllFiles dir =
 026    let files = System.IO.Directory.GetFiles dir
 27
 28    let filtered =
 029        Array.filter (fun (x: string) -> Array.contains (System.IO.Path.GetExtension x) extensions) files
 30
 031    List.ofArray filtered
 32
 33/// <summary>
 34/// Processing array of images
 35/// </summary>
 36/// <param name="inputDir">Path to the folder with images</param>
 37/// <param name="outputDir">Path to save</param>
 38/// <param name="conversion">Image transformation</param>
 39/// <param name="agentMod">Processing with or without agent assistance</param>
 40let arrayOfImagesProcessing inputDir outputDir conversion agentMod =
 041    let list = listAllFiles inputDir
 42
 043    if agentMod = On then
 044        let logger = msgLogger ()
 045        let agentSaver = imgSaver outputDir logger
 046        let procAgent = imgProcessor conversion agentSaver logger
 47
 048        for file in list do
 049            procAgent.Post(Img(loadAsImage file))
 50
 051        procAgent.PostAndReply EOS
 52    else
 53        let helper filePath =
 54            let filtered = conversion (loadAsImage filePath)
 055            saveImage filtered (System.IO.Path.Combine(outputDir, System.IO.Path.GetFileName filePath))
 56
 057        List.iter helper list
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Kernels.html b/docs/coverage/ImageProcessing_Kernels.html new file mode 100644 index 00000000..b0a4aa1e --- /dev/null +++ b/docs/coverage/ImageProcessing_Kernels.html @@ -0,0 +1,79 @@ + + + + + + +ImageProcessing.Kernels - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + +
Class:ImageProcessing.Kernels
Assembly:ImageProcessing
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:100% (0 of 0)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:0
Method coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Main.html b/docs/coverage/ImageProcessing_Main.html new file mode 100644 index 00000000..9eeb1962 --- /dev/null +++ b/docs/coverage/ImageProcessing_Main.html @@ -0,0 +1,161 @@ + + + + + + +ImageProcessing.Main - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + + +
Class:ImageProcessing.Main
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Main.fs
Covered lines:0
Uncovered lines:30
Coverable lines:30
Total lines:59
Line coverage:0% (0 of 30)
Covered branches:0
Total branches:12
Branch coverage:0% (0 of 12)
Covered methods:0
Total methods:3
Method coverage:0% (0 of 3)
+

Metrics

+ + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
main(...)0%6220%
main$cont@20(...)0%426320%
Invoke(...)0%2100%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Main.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1namespace ImageProcessing
 2
 3open Argu
 4open Arguments
 5open MyImage
 6open Types
 7open ImageArrayProcessing
 8open Agents
 9open Brahma.FSharp
 10
 11module Main =
 12
 13    [<EntryPoint>]
 14    let main (argv: string array) =
 015        let parser = ArgumentParser.Create<CliArguments>().ParseCommandLine argv
 016        let inputPath = parser.GetResult(InputPath)
 017        let outputPath = parser.GetResult(OutputPath)
 18
 019        if parser.Contains(Modifications) then
 020            let listOfFunc = parser.GetResult(Modifications)
 21
 22            let filters =
 023                if parser.Contains(GpGpu) then
 024                    let device = parser.GetResult(GpGpu) |> deviceParser
 25
 026                    if ClDevice.GetAvailableDevices(device) |> Seq.isEmpty then
 027                        printfn "GPU was not found, image processing will continue on the CPU"
 028                        listOfFunc |> List.map modificationParser
 29                    else
 030                        let clContext = ClContext(ClDevice.GetFirstAppropriateDevice(device))
 031                        let queue = clContext.QueueProvider.CreateQueue()
 032                        let filterKernel = GpuKernels.applyFilterKernel clContext
 033                        let rotateKernel = GpuKernels.rotateKernel clContext
 034                        let mirrorKernel = GpuKernels.mirrorKernel clContext
 035                        let fishKernel = GpuKernels.fishEyeKernel clContext
 036                        let kernelsCortege = (filterKernel, rotateKernel, mirrorKernel, fishKernel)
 037                        List.map (fun n -> modificationGpuParser n kernelsCortege clContext 64 queue) listOfFunc
 38                else
 039                    listOfFunc |> List.map modificationParser
 40
 041            let composition = List.reduce (>>) filters
 42
 043            match System.IO.Path.GetExtension inputPath with
 44            | "" ->
 045                if parser.Contains(Agents) then
 046                    arrayOfImagesProcessing inputPath outputPath composition On
 047                elif parser.Contains(SuperAgents) then
 48                    let countOfAgents = parser.GetResult(SuperAgents)
 049                    superImageProcessing inputPath outputPath composition countOfAgents
 50                else
 051                    arrayOfImagesProcessing inputPath outputPath composition Off
 52            | _ ->
 053                let image = loadAsImage inputPath
 54                let filtered = composition image
 055                saveImage filtered outputPath
 56        else
 057            printfn $"No modifications for image processing"
 58
 059        0
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_MyImage.html b/docs/coverage/ImageProcessing_MyImage.html new file mode 100644 index 00000000..eeb52982 --- /dev/null +++ b/docs/coverage/ImageProcessing_MyImage.html @@ -0,0 +1,140 @@ + + + + + + +ImageProcessing.MyImage - Coverage Report + +
+

< Summary

+ ++++ + + + + + + + + + + + + + + + +
Class:ImageProcessing.MyImage
Assembly:ImageProcessing
File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\MyImage.fs
Covered lines:8
Uncovered lines:1
Coverable lines:9
Total lines:39
Line coverage:88.8% (8 of 9)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:3
Method coverage:66.6% (2 of 3)
+

Metrics

+ + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)0%110100%
loadAsImage(...)0%110100%
saveImage(...)0%2100%
+

File(s)

+

C:\Users\Леонид\ImageProcessing\src\ImageProcessing\MyImage.fs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1module ImageProcessing.MyImage
 2
 3open System
 4open SixLabors.ImageSharp
 5open SixLabors.ImageSharp.PixelFormats
 6
 7/// <summary>
 8/// Type to represent images
 9/// </summary>
 10[<Struct>]
 11type MyImage =
 12    val Data: array<byte>
 13    val Width: int
 14    val Height: int
 15    val Name: string
 16
 17    new(data, width, height, name) =
 148818        { Data = data
 148819          Width = width
 148820          Height = height
 148821          Name = name }
 22
 23/// <summary>
 24/// Load image as MyImage type
 25/// </summary>
 26let loadAsImage (file: string) =
 427    let img = Image.Load<L8> file
 28
 429    let buf = Array.zeroCreate<byte> (img.Width * img.Height)
 30
 431    img.CopyPixelDataTo(Span<byte> buf)
 432    MyImage(buf, img.Width, img.Height, System.IO.Path.GetFileName file)
 33
 34/// <summary>
 35/// Save MyImage in a specific directory
 36/// </summary>
 37let saveImage (image: MyImage) file =
 38    let img = Image.LoadPixelData<L8>(image.Data, image.Width, image.Height)
 039    img.Save file
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/class.js b/docs/coverage/class.js new file mode 100644 index 00000000..dafc9a5c --- /dev/null +++ b/docs/coverage/class.js @@ -0,0 +1,221 @@ +/* Chartist.js 0.11.0 + * Copyright © 2017 Gion Kunz + * Free to use under either the WTFPL license or the MIT license. + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT + */ + +!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { + var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { + "use strict"; function d(a) { + var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { + var i = c.serialMap(b.normalized.series, function () { + return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) + }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") + } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) + } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) + }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a +}); + +var i, l, selectedLine = null; + +/* Navigate to hash without browser history entry */ +var navigateToHash = function () { + if (window.history !== undefined && window.history.replaceState !== undefined) { + window.history.replaceState(undefined, undefined, this.getAttribute("href")); + } +}; + +var hashLinks = document.getElementsByClassName('navigatetohash'); +for (i = 0, l = hashLinks.length; i < l; i++) { + hashLinks[i].addEventListener('click', navigateToHash); +} + +/* Switch test method */ +var switchTestMethod = function () { + var method = this.getAttribute("value"); + console.log("Selected test method: " + method); + + var lines, i, l, coverageData, lineAnalysis, cells; + + lines = document.querySelectorAll('.lineAnalysis tr'); + + for (i = 1, l = lines.length; i < l; i++) { + coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); + lineAnalysis = coverageData[method]; + cells = lines[i].querySelectorAll('td'); + if (lineAnalysis === undefined) { + lineAnalysis = coverageData.AllTestMethods; + if (lineAnalysis.LVS !== 'gray') { + cells[0].setAttribute('class', 'red'); + cells[1].innerText = cells[1].textContent = '0'; + cells[4].setAttribute('class', 'lightred'); + } + } else { + cells[0].setAttribute('class', lineAnalysis.LVS); + cells[1].innerText = cells[1].textContent = lineAnalysis.VC; + cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); + } + } +}; + +var testMethods = document.getElementsByClassName('switchtestmethod'); +for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].addEventListener('change', switchTestMethod); +} + +/* Highlight test method by line */ +var toggleLine = function () { + if (selectedLine === this) { + selectedLine = null; + } else { + selectedLine = null; + unhighlightTestMethods(); + highlightTestMethods.call(this); + selectedLine = this; + } + +}; +var highlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var lineAnalysis; + var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); + var testMethods = document.getElementsByClassName('testmethod'); + + for (i = 0, l = testMethods.length; i < l; i++) { + lineAnalysis = coverageData[testMethods[i].id]; + if (lineAnalysis === undefined) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } else { + testMethods[i].className += ' light' + lineAnalysis.LVS; + } + } +}; +var unhighlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var testMethods = document.getElementsByClassName('testmethod'); + for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } +}; +var coverableLines = document.getElementsByClassName('coverableline'); +for (i = 0, l = coverableLines.length; i < l; i++) { + coverableLines[i].addEventListener('click', toggleLine); + coverableLines[i].addEventListener('mouseenter', highlightTestMethods); + coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); +} + +/* History charts */ +var renderChart = function (chart) { + // Remove current children (e.g. PNG placeholder) + while (chart.firstChild) { + chart.firstChild.remove(); + } + + var chartData = window[chart.getAttribute('data-data')]; + var options = { + axisY: { + type: undefined, + onlyInteger: true + }, + lineSmooth: false, + low: 0, + high: 100, + scaleMinSpace: 20, + onlyInteger: true, + fullWidth: true + }; + var lineChart = new Chartist.Line(chart, { + labels: [], + series: chartData.series + }, options); + + /* Zoom */ + var zoomButtonDiv = document.createElement("div"); + zoomButtonDiv.className = "toggleZoom"; + var zoomButtonLink = document.createElement("a"); + zoomButtonLink.setAttribute("href", ""); + var zoomButtonText = document.createElement("i"); + zoomButtonText.className = "icon-search-plus"; + + zoomButtonLink.appendChild(zoomButtonText); + zoomButtonDiv.appendChild(zoomButtonLink); + + chart.appendChild(zoomButtonDiv); + + zoomButtonDiv.addEventListener('click', function (event) { + event.preventDefault(); + + if (options.axisY.type === undefined) { + options.axisY.type = Chartist.AutoScaleAxis; + zoomButtonText.className = "icon-search-minus"; + } else { + options.axisY.type = undefined; + zoomButtonText.className = "icon-search-plus"; + } + + lineChart.update(null, options); + }); + + var tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + + chart.appendChild(tooltip); + + /* Tooltips */ + var showToolTip = function () { + var point = this; + var index = [].slice.call(chart.getElementsByClassName('ct-point')).indexOf(point); + + tooltip.innerHTML = chartData.tooltips[index % chartData.tooltips.length]; + tooltip.style.display = 'block'; + }; + + var moveToolTip = function (event) { + var box = chart.getBoundingClientRect(); + var left = event.pageX - box.left - window.pageXOffset; + var top = event.pageY - box.top - window.pageYOffset; + + left = left + 20; + top = top - tooltip.offsetHeight / 2; + + if (left + tooltip.offsetWidth > box.width) { + left -= tooltip.offsetWidth + 40; + } + + if (top < 0) { + top = 0; + } + + if (top + tooltip.offsetHeight > box.height) { + top = box.height - tooltip.offsetHeight; + } + + tooltip.style.left = left + 'px'; + tooltip.style.top = top + 'px'; + }; + + var hideToolTip = function () { + tooltip.style.display = 'none'; + }; + chart.addEventListener('mousemove', moveToolTip); + + lineChart.on('created', function () { + var chartPoints = chart.getElementsByClassName('ct-point'); + for (i = 0, l = chartPoints.length; i < l; i++) { + chartPoints[i].addEventListener('mousemove', showToolTip); + chartPoints[i].addEventListener('mouseout', hideToolTip); + } + }); +}; + +var charts = document.getElementsByClassName('historychart'); +for (i = 0, l = charts.length; i < l; i++) { + renderChart(charts[i]); +} \ No newline at end of file diff --git a/docs/coverage/icon_cube.svg b/docs/coverage/icon_cube.svg new file mode 100644 index 00000000..3302443c --- /dev/null +++ b/docs/coverage/icon_cube.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_cube_dark.svg b/docs/coverage/icon_cube_dark.svg new file mode 100644 index 00000000..3e7f0fa8 --- /dev/null +++ b/docs/coverage/icon_cube_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_down-dir_active.svg b/docs/coverage/icon_down-dir_active.svg new file mode 100644 index 00000000..d11cf041 --- /dev/null +++ b/docs/coverage/icon_down-dir_active.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_down-dir_active_dark.svg b/docs/coverage/icon_down-dir_active_dark.svg new file mode 100644 index 00000000..fa34aeb3 --- /dev/null +++ b/docs/coverage/icon_down-dir_active_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_fork.svg b/docs/coverage/icon_fork.svg new file mode 100644 index 00000000..f0148b3a --- /dev/null +++ b/docs/coverage/icon_fork.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_fork_dark.svg b/docs/coverage/icon_fork_dark.svg new file mode 100644 index 00000000..11930c9b --- /dev/null +++ b/docs/coverage/icon_fork_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_info-circled.svg b/docs/coverage/icon_info-circled.svg new file mode 100644 index 00000000..252166bb --- /dev/null +++ b/docs/coverage/icon_info-circled.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_info-circled_dark.svg b/docs/coverage/icon_info-circled_dark.svg new file mode 100644 index 00000000..252166bb --- /dev/null +++ b/docs/coverage/icon_info-circled_dark.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_minus.svg b/docs/coverage/icon_minus.svg new file mode 100644 index 00000000..3c30c365 --- /dev/null +++ b/docs/coverage/icon_minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_minus_dark.svg b/docs/coverage/icon_minus_dark.svg new file mode 100644 index 00000000..2516b6fc --- /dev/null +++ b/docs/coverage/icon_minus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_plus.svg b/docs/coverage/icon_plus.svg new file mode 100644 index 00000000..79327232 --- /dev/null +++ b/docs/coverage/icon_plus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_plus_dark.svg b/docs/coverage/icon_plus_dark.svg new file mode 100644 index 00000000..6ed4edd0 --- /dev/null +++ b/docs/coverage/icon_plus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_search-minus.svg b/docs/coverage/icon_search-minus.svg new file mode 100644 index 00000000..c174eb5e --- /dev/null +++ b/docs/coverage/icon_search-minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_search-minus_dark.svg b/docs/coverage/icon_search-minus_dark.svg new file mode 100644 index 00000000..9caaffbc --- /dev/null +++ b/docs/coverage/icon_search-minus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_search-plus.svg b/docs/coverage/icon_search-plus.svg new file mode 100644 index 00000000..04b24ecc --- /dev/null +++ b/docs/coverage/icon_search-plus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_search-plus_dark.svg b/docs/coverage/icon_search-plus_dark.svg new file mode 100644 index 00000000..53241945 --- /dev/null +++ b/docs/coverage/icon_search-plus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/icon_sponsor.svg b/docs/coverage/icon_sponsor.svg new file mode 100644 index 00000000..bf6d9591 --- /dev/null +++ b/docs/coverage/icon_sponsor.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_star.svg b/docs/coverage/icon_star.svg new file mode 100644 index 00000000..b23c54ea --- /dev/null +++ b/docs/coverage/icon_star.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_star_dark.svg b/docs/coverage/icon_star_dark.svg new file mode 100644 index 00000000..49c0d034 --- /dev/null +++ b/docs/coverage/icon_star_dark.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_up-dir.svg b/docs/coverage/icon_up-dir.svg new file mode 100644 index 00000000..567c11f3 --- /dev/null +++ b/docs/coverage/icon_up-dir.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_up-dir_active.svg b/docs/coverage/icon_up-dir_active.svg new file mode 100644 index 00000000..bb225544 --- /dev/null +++ b/docs/coverage/icon_up-dir_active.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_wrench.svg b/docs/coverage/icon_wrench.svg new file mode 100644 index 00000000..b6aa318c --- /dev/null +++ b/docs/coverage/icon_wrench.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/docs/coverage/icon_wrench_dark.svg b/docs/coverage/icon_wrench_dark.svg new file mode 100644 index 00000000..5c77a9c8 --- /dev/null +++ b/docs/coverage/icon_wrench_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/coverage/index.htm b/docs/coverage/index.htm new file mode 100644 index 00000000..0cbe969f --- /dev/null +++ b/docs/coverage/index.htm @@ -0,0 +1,203 @@ + + + + + + +Summary - Coverage Report + +
+

SummaryStarSponsor

+ ++++ + + + + + + + + + + + + + + + + + + +
Generated on:16.12.2023 - 23:04:21
Parser:OpenCoverParser
Assemblies:1
Classes:9
Files:8
Covered lines:229
Uncovered lines:131
Coverable lines:360
Total lines:787
Line coverage:63.6% (229 of 360)
Covered branches:56
Total branches:100
Branch coverage:56% (56 of 100)
Covered methods:32
Total methods:69
Method coverage:46.3% (32 of 69)
+

Risk Hotspots

+ + ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssemblyClassMethodCyclomatic complexity NPath complexity Crap Score
ImageProcessingImageProcessing.AgentssuperImageProcessing(...)9490
ImageProcessingImageProcessing.ArgumentsArgu.IArgParserTemplate.get_Usage()6642
ImageProcessingImageProcessing.Mainmain$cont@20(...)63242
ImageProcessingImageProcessing.AgentsInvoke(...)5330
ImageProcessingImageProcessing.AgentsInvoke(...)5330
ImageProcessingImageProcessing.AgentsInvoke(...)4320
ImageProcessingImageProcessing.AgentsInvoke(...)4320
ImageProcessingImageProcessing.ArgumentsdeviceParser(...)4420
ImageProcessingImageProcessing.ImageArrayProcessingarrayOfImagesProcessing(...)4820
ImageProcessingImageProcessing.ImageArrayProcessingInvoke(...)4020
+
+

Coverage

+ + +++++++++++++ + + + + + + + + + + + + + +
NameCoveredUncoveredCoverableTotalLine coverageCoveredTotalBranch coverage
ImageProcessing22913136078763.6%
  
5610056%
  
ImageProcessing.Agents071711320%
 
0160%
 
ImageProcessing.Arguments2216387457.8%
  
203066.6%
  
ImageProcessing.CpuProcessing4004098100%
 
3232100%
 
ImageProcessing.GpuKernels95095175100%
 
44100%
 
ImageProcessing.GpuProcessing64064153100%
 
00
 
ImageProcessing.ImageArrayProcessing01313570%
 
060%
 
ImageProcessing.Kernels0000100%
 
00
 
ImageProcessing.Main03030590%
 
0120%
 
ImageProcessing.MyImage8193988.8%
  
00
 
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/index.html b/docs/coverage/index.html new file mode 100644 index 00000000..0cbe969f --- /dev/null +++ b/docs/coverage/index.html @@ -0,0 +1,203 @@ + + + + + + +Summary - Coverage Report + +
+

SummaryStarSponsor

+ ++++ + + + + + + + + + + + + + + + + + + +
Generated on:16.12.2023 - 23:04:21
Parser:OpenCoverParser
Assemblies:1
Classes:9
Files:8
Covered lines:229
Uncovered lines:131
Coverable lines:360
Total lines:787
Line coverage:63.6% (229 of 360)
Covered branches:56
Total branches:100
Branch coverage:56% (56 of 100)
Covered methods:32
Total methods:69
Method coverage:46.3% (32 of 69)
+

Risk Hotspots

+ + ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssemblyClassMethodCyclomatic complexity NPath complexity Crap Score
ImageProcessingImageProcessing.AgentssuperImageProcessing(...)9490
ImageProcessingImageProcessing.ArgumentsArgu.IArgParserTemplate.get_Usage()6642
ImageProcessingImageProcessing.Mainmain$cont@20(...)63242
ImageProcessingImageProcessing.AgentsInvoke(...)5330
ImageProcessingImageProcessing.AgentsInvoke(...)5330
ImageProcessingImageProcessing.AgentsInvoke(...)4320
ImageProcessingImageProcessing.AgentsInvoke(...)4320
ImageProcessingImageProcessing.ArgumentsdeviceParser(...)4420
ImageProcessingImageProcessing.ImageArrayProcessingarrayOfImagesProcessing(...)4820
ImageProcessingImageProcessing.ImageArrayProcessingInvoke(...)4020
+
+

Coverage

+ + +++++++++++++ + + + + + + + + + + + + + +
NameCoveredUncoveredCoverableTotalLine coverageCoveredTotalBranch coverage
ImageProcessing22913136078763.6%
  
5610056%
  
ImageProcessing.Agents071711320%
 
0160%
 
ImageProcessing.Arguments2216387457.8%
  
203066.6%
  
ImageProcessing.CpuProcessing4004098100%
 
3232100%
 
ImageProcessing.GpuKernels95095175100%
 
44100%
 
ImageProcessing.GpuProcessing64064153100%
 
00
 
ImageProcessing.ImageArrayProcessing01313570%
 
060%
 
ImageProcessing.Kernels0000100%
 
00
 
ImageProcessing.Main03030590%
 
0120%
 
ImageProcessing.MyImage8193988.8%
  
00
 
+
+
+ + \ No newline at end of file diff --git a/docs/coverage/main.js b/docs/coverage/main.js new file mode 100644 index 00000000..1c492a20 --- /dev/null +++ b/docs/coverage/main.js @@ -0,0 +1,359 @@ +/* Chartist.js 0.11.0 + * Copyright © 2017 Gion Kunz + * Free to use under either the WTFPL license or the MIT license. + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT + */ + +!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { + var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { + "use strict"; function d(a) { + var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { + var i = c.serialMap(b.normalized.series, function () { + return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) + }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") + } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) + } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) + }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a +}); + +var i, l, selectedLine = null; + +/* Navigate to hash without browser history entry */ +var navigateToHash = function () { + if (window.history !== undefined && window.history.replaceState !== undefined) { + window.history.replaceState(undefined, undefined, this.getAttribute("href")); + } +}; + +var hashLinks = document.getElementsByClassName('navigatetohash'); +for (i = 0, l = hashLinks.length; i < l; i++) { + hashLinks[i].addEventListener('click', navigateToHash); +} + +/* Switch test method */ +var switchTestMethod = function () { + var method = this.getAttribute("value"); + console.log("Selected test method: " + method); + + var lines, i, l, coverageData, lineAnalysis, cells; + + lines = document.querySelectorAll('.lineAnalysis tr'); + + for (i = 1, l = lines.length; i < l; i++) { + coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); + lineAnalysis = coverageData[method]; + cells = lines[i].querySelectorAll('td'); + if (lineAnalysis === undefined) { + lineAnalysis = coverageData.AllTestMethods; + if (lineAnalysis.LVS !== 'gray') { + cells[0].setAttribute('class', 'red'); + cells[1].innerText = cells[1].textContent = '0'; + cells[4].setAttribute('class', 'lightred'); + } + } else { + cells[0].setAttribute('class', lineAnalysis.LVS); + cells[1].innerText = cells[1].textContent = lineAnalysis.VC; + cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); + } + } +}; + +var testMethods = document.getElementsByClassName('switchtestmethod'); +for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].addEventListener('change', switchTestMethod); +} + +/* Highlight test method by line */ +var toggleLine = function () { + if (selectedLine === this) { + selectedLine = null; + } else { + selectedLine = null; + unhighlightTestMethods(); + highlightTestMethods.call(this); + selectedLine = this; + } + +}; +var highlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var lineAnalysis; + var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); + var testMethods = document.getElementsByClassName('testmethod'); + + for (i = 0, l = testMethods.length; i < l; i++) { + lineAnalysis = coverageData[testMethods[i].id]; + if (lineAnalysis === undefined) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } else { + testMethods[i].className += ' light' + lineAnalysis.LVS; + } + } +}; +var unhighlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var testMethods = document.getElementsByClassName('testmethod'); + for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } +}; +var coverableLines = document.getElementsByClassName('coverableline'); +for (i = 0, l = coverableLines.length; i < l; i++) { + coverableLines[i].addEventListener('click', toggleLine); + coverableLines[i].addEventListener('mouseenter', highlightTestMethods); + coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); +} + +/* History charts */ +var renderChart = function (chart) { + // Remove current children (e.g. PNG placeholder) + while (chart.firstChild) { + chart.firstChild.remove(); + } + + var chartData = window[chart.getAttribute('data-data')]; + var options = { + axisY: { + type: undefined, + onlyInteger: true + }, + lineSmooth: false, + low: 0, + high: 100, + scaleMinSpace: 20, + onlyInteger: true, + fullWidth: true + }; + var lineChart = new Chartist.Line(chart, { + labels: [], + series: chartData.series + }, options); + + /* Zoom */ + var zoomButtonDiv = document.createElement("div"); + zoomButtonDiv.className = "toggleZoom"; + var zoomButtonLink = document.createElement("a"); + zoomButtonLink.setAttribute("href", ""); + var zoomButtonText = document.createElement("i"); + zoomButtonText.className = "icon-search-plus"; + + zoomButtonLink.appendChild(zoomButtonText); + zoomButtonDiv.appendChild(zoomButtonLink); + + chart.appendChild(zoomButtonDiv); + + zoomButtonDiv.addEventListener('click', function (event) { + event.preventDefault(); + + if (options.axisY.type === undefined) { + options.axisY.type = Chartist.AutoScaleAxis; + zoomButtonText.className = "icon-search-minus"; + } else { + options.axisY.type = undefined; + zoomButtonText.className = "icon-search-plus"; + } + + lineChart.update(null, options); + }); + + var tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + + chart.appendChild(tooltip); + + /* Tooltips */ + var showToolTip = function () { + var point = this; + var index = [].slice.call(chart.getElementsByClassName('ct-point')).indexOf(point); + + tooltip.innerHTML = chartData.tooltips[index % chartData.tooltips.length]; + tooltip.style.display = 'block'; + }; + + var moveToolTip = function (event) { + var box = chart.getBoundingClientRect(); + var left = event.pageX - box.left - window.pageXOffset; + var top = event.pageY - box.top - window.pageYOffset; + + left = left + 20; + top = top - tooltip.offsetHeight / 2; + + if (left + tooltip.offsetWidth > box.width) { + left -= tooltip.offsetWidth + 40; + } + + if (top < 0) { + top = 0; + } + + if (top + tooltip.offsetHeight > box.height) { + top = box.height - tooltip.offsetHeight; + } + + tooltip.style.left = left + 'px'; + tooltip.style.top = top + 'px'; + }; + + var hideToolTip = function () { + tooltip.style.display = 'none'; + }; + chart.addEventListener('mousemove', moveToolTip); + + lineChart.on('created', function () { + var chartPoints = chart.getElementsByClassName('ct-point'); + for (i = 0, l = chartPoints.length; i < l; i++) { + chartPoints[i].addEventListener('mousemove', showToolTip); + chartPoints[i].addEventListener('mouseout', hideToolTip); + } + }); +}; + +var charts = document.getElementsByClassName('historychart'); +for (i = 0, l = charts.length; i < l; i++) { + renderChart(charts[i]); +} + +var assemblies = [ + { + "name": "ImageProcessing", + "classes": [ + { "name": "ImageProcessing.Agents", "rp": "ImageProcessing_Agents.html", "cl": 0, "ucl": 71, "cal": 71, "tl": 132, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 16, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.Arguments", "rp": "ImageProcessing_Arguments.html", "cl": 22, "ucl": 16, "cal": 38, "tl": 74, "ct": "LineCoverage", "mc": "-", "cb": 20, "tb": 30, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.CpuProcessing", "rp": "ImageProcessing_CpuProcessing.html", "cl": 40, "ucl": 0, "cal": 40, "tl": 98, "ct": "LineCoverage", "mc": "-", "cb": 32, "tb": 32, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.GpuKernels", "rp": "ImageProcessing_GpuKernels.html", "cl": 95, "ucl": 0, "cal": 95, "tl": 175, "ct": "LineCoverage", "mc": "-", "cb": 4, "tb": 4, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.GpuProcessing", "rp": "ImageProcessing_GpuProcessing.html", "cl": 64, "ucl": 0, "cal": 64, "tl": 153, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 0, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.ImageArrayProcessing", "rp": "ImageProcessing_ImageArrayProcessing.html", "cl": 0, "ucl": 13, "cal": 13, "tl": 57, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 6, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.Kernels", "rp": "ImageProcessing_Kernels.html", "cl": 0, "ucl": 0, "cal": 0, "tl": 0, "ct": "MethodCoverage", "mc": 100, "cb": 0, "tb": 0, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.Main", "rp": "ImageProcessing_Main.html", "cl": 0, "ucl": 30, "cal": 30, "tl": 59, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 12, "lch": [], "bch": [], "hc": [] }, + { "name": "ImageProcessing.MyImage", "rp": "ImageProcessing_MyImage.html", "cl": 8, "ucl": 1, "cal": 9, "tl": 39, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 0, "lch": [], "bch": [], "hc": [] }, + ]}, +]; + +var historicCoverageExecutionTimes = []; + +var riskHotspotMetrics = [ + { "name": "Cyclomatic complexity", "explanationUrl": "https://en.wikipedia.org/wiki/Cyclomatic_complexity" }, + { "name": "NPath complexity", "explanationUrl": "https://modess.io/npath-complexity-cyclomatic-complexity-explained" }, + { "name": "Crap Score", "explanationUrl": "https://googletesting.blogspot.de/2011/02/this-code-is-crap.html" }, +]; + +var riskHotspots = [ + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "System.Void ImageProcessing.Agents::superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2,System.Int32)", "methodShortName": "superImageProcessing(...)", "fileIndex": 0, "line": 120, + "metrics": [ + { "value": 9, "exceeded": false }, + { "value": 4, "exceeded": false }, + { "value": 90, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Arguments", "reportPath": "ImageProcessing_Arguments.html", "methodName": "System.String ImageProcessing.Arguments/CliArguments::Argu.IArgParserTemplate.get_Usage()", "methodShortName": "Argu.IArgParserTemplate.get_Usage()", "fileIndex": 0, "line": 68, + "metrics": [ + { "value": 6, "exceeded": false }, + { "value": 6, "exceeded": false }, + { "value": 42, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Main", "reportPath": "ImageProcessing_Main.html", "methodName": "System.Void ImageProcessing.Main::main$cont@20(Argu.ParseResults`1,System.String,System.String,Microsoft.FSharp.Core.Unit)", "methodShortName": "main$cont@20(...)", "fileIndex": 0, "line": 20, + "metrics": [ + { "value": 6, "exceeded": false }, + { "value": 32, "exceeded": false }, + { "value": 42, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/imgSaver@33-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 33, + "metrics": [ + { "value": 5, "exceeded": false }, + { "value": 3, "exceeded": false }, + { "value": 30, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/imgProcessor@56-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 56, + "metrics": [ + { "value": 5, "exceeded": false }, + { "value": 3, "exceeded": false }, + { "value": 30, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/msgLogger@78-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 78, + "metrics": [ + { "value": 4, "exceeded": false }, + { "value": 3, "exceeded": false }, + { "value": 20, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/superAgent@99-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 99, + "metrics": [ + { "value": 4, "exceeded": false }, + { "value": 3, "exceeded": false }, + { "value": 20, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.Arguments", "reportPath": "ImageProcessing_Arguments.html", "methodName": "Brahma.FSharp.Platform ImageProcessing.Arguments::deviceParser(ImageProcessing.Types/Devices)", "methodShortName": "deviceParser(...)", "fileIndex": 0, "line": 52, + "metrics": [ + { "value": 4, "exceeded": false }, + { "value": 4, "exceeded": false }, + { "value": 20, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.ImageArrayProcessing", "reportPath": "ImageProcessing_ImageArrayProcessing.html", "methodName": "System.Void ImageProcessing.ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2,ImageProcessing.Types/AgentStatus)", "methodShortName": "arrayOfImagesProcessing(...)", "fileIndex": 0, "line": 41, + "metrics": [ + { "value": 4, "exceeded": false }, + { "value": 8, "exceeded": false }, + { "value": 20, "exceeded": true }, + ]}, + { + "assembly": "ImageProcessing", "class": "ImageProcessing.ImageArrayProcessing", "reportPath": "ImageProcessing_ImageArrayProcessing.html", "methodName": "System.Boolean ImageProcessing.ImageArrayProcessing/listAllFiles@29::Invoke(System.String)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 29, + "metrics": [ + { "value": 4, "exceeded": false }, + { "value": 0, "exceeded": false }, + { "value": 20, "exceeded": true }, + ]}, +]; + +var branchCoverageAvailable = true; + + +var translations = { +'top': 'Top:', +'all': 'All', +'assembly': 'Assembly', +'class': 'Class', +'method': 'Method', +'lineCoverage': 'LineCoverage', +'noGrouping': 'No grouping', +'byAssembly': 'By assembly', +'byNamespace': 'By namespace, Level:', +'all': 'All', +'collapseAll': 'Collapse all', +'expandAll': 'Expand all', +'grouping': 'Grouping:', +'filter': 'Filter:', +'name': 'Name', +'covered': 'Covered', +'uncovered': 'Uncovered', +'coverable': 'Coverable', +'total': 'Total', +'coverage': 'Line coverage', +'branchCoverage': 'Branch coverage', +'history': 'Coverage History', +'compareHistory': 'Compare with:', +'date': 'Date', +'allChanges': 'All changes', +'lineCoverageIncreaseOnly': 'Line coverage: Increase only', +'lineCoverageDecreaseOnly': 'Line coverage: Decrease only', +'branchCoverageIncreaseOnly': 'Branch coverage: Increase only', +'branchCoverageDecreaseOnly': 'Branch coverage: Decrease only' +}; + + +(()=>{"use strict";var e,_={},p={};function n(e){var a=p[e];if(void 0!==a)return a.exports;var r=p[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,u,l)=>{if(!r){var c=1/0;for(f=0;f=l)&&Object.keys(n.O).every(d=>n.O[d](r[t]))?r.splice(t--,1):(v=!1,l0&&e[f-1][2]>l;f--)e[f]=e[f-1];e[f]=[r,u,l]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={666:0};n.O.j=u=>0===e[u];var a=(u,l)=>{var t,o,[f,c,v]=l,s=0;for(t in c)n.o(c,t)&&(n.m[t]=c[t]);if(v)var b=v(n);for(u&&u(l);s{!function(e){const n=e.performance;function i(I){n&&n.mark&&n.mark(I)}function r(I,p){n&&n.measure&&n.measure(I,p)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function u(I){return c+I}const f=!0===e[u("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let _=(()=>{class I{constructor(t,o){this._parent=t,this._name=o?o.name||"unnamed":"",this._properties=o&&o.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,o)}static assertZonePatched(){if(e.Promise!==J.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=I.current;for(;t.parent;)t=t.parent;return t}static get current(){return G.zone}static get currentTask(){return te}static __load_patch(t,o,g=!1){if(J.hasOwnProperty(t)){if(!g&&f)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const P="Zone:"+t;i(P),J[t]=o(e,I,le),r(P,P)}}get parent(){return this._parent}get name(){return this._name}get(t){const o=this.getZoneWith(t);if(o)return o._properties[t]}getZoneWith(t){let o=this;for(;o;){if(o._properties.hasOwnProperty(t))return o;o=o._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,o){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const g=this._zoneDelegate.intercept(this,t,o),P=this;return function(){return P.runGuarded(g,this,arguments,o)}}run(t,o,g,P){G={parent:G,zone:this};try{return this._zoneDelegate.invoke(this,t,o,g,P)}finally{G=G.parent}}runGuarded(t,o=null,g,P){G={parent:G,zone:this};try{try{return this._zoneDelegate.invoke(this,t,o,g,P)}catch(K){if(this._zoneDelegate.handleError(this,K))throw K}}finally{G=G.parent}}runTask(t,o,g){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");if(t.state===j&&(t.type===R||t.type===M))return;const P=t.state!=X;P&&t._transitionTo(X,O),t.runCount++;const K=te;te=t,G={parent:G,zone:this};try{t.type==M&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,o,g)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==j&&t.state!==Y&&(t.type==R||t.data&&t.data.isPeriodic?P&&t._transitionTo(O,X):(t.runCount=0,this._updateTaskCount(t,-1),P&&t._transitionTo(j,X,j))),G=G.parent,te=K}}scheduleTask(t){if(t.zone&&t.zone!==this){let g=this;for(;g;){if(g===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);g=g.parent}}t._transitionTo(q,j);const o=[];t._zoneDelegates=o,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(g){throw t._transitionTo(Y,q,j),this._zoneDelegate.handleError(this,g),g}return t._zoneDelegates===o&&this._updateTaskCount(t,1),t.state==q&&t._transitionTo(O,q),t}scheduleMicroTask(t,o,g,P){return this.scheduleTask(new m(v,t,o,g,P,void 0))}scheduleMacroTask(t,o,g,P,K){return this.scheduleTask(new m(M,t,o,g,P,K))}scheduleEventTask(t,o,g,P,K){return this.scheduleTask(new m(R,t,o,g,P,K))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");t._transitionTo(A,O,X);try{this._zoneDelegate.cancelTask(this,t)}catch(o){throw t._transitionTo(Y,A),this._zoneDelegate.handleError(this,o),o}return this._updateTaskCount(t,-1),t._transitionTo(j,A),t.runCount=0,t}_updateTaskCount(t,o){const g=t._zoneDelegates;-1==o&&(t._zoneDelegates=null);for(let P=0;PI.hasTask(t,o),onScheduleTask:(I,p,t,o)=>I.scheduleTask(t,o),onInvokeTask:(I,p,t,o,g,P)=>I.invokeTask(t,o,g,P),onCancelTask:(I,p,t,o)=>I.cancelTask(t,o)};class T{constructor(p,t,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=p,this._parentDelegate=t,this._forkZS=o&&(o&&o.onFork?o:t._forkZS),this._forkDlgt=o&&(o.onFork?t:t._forkDlgt),this._forkCurrZone=o&&(o.onFork?this.zone:t._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:t._interceptZS),this._interceptDlgt=o&&(o.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:t._invokeZS),this._invokeDlgt=o&&(o.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:t._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:t._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:t._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:t._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const g=o&&o.onHasTask;(g||t&&t._hasTaskZS)&&(this._hasTaskZS=g?o:y,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=p,o.onScheduleTask||(this._scheduleTaskZS=y,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),o.onInvokeTask||(this._invokeTaskZS=y,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),o.onCancelTask||(this._cancelTaskZS=y,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(p,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,p,t):new _(p,t)}intercept(p,t,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,p,t,o):t}invoke(p,t,o,g,P){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,p,t,o,g,P):t.apply(o,g)}handleError(p,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,p,t)}scheduleTask(p,t){let o=t;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,p,t),o||(o=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=v)throw new Error("Task is missing scheduleFn.");d(t)}return o}invokeTask(p,t,o,g){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,p,t,o,g):t.callback.apply(o,g)}cancelTask(p,t){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,p,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");o=t.cancelFn(t)}return o}hasTask(p,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,p,t)}catch(o){this.handleError(p,o)}}_updateTaskCount(p,t){const o=this._taskCounts,g=o[p],P=o[p]=g+t;if(P<0)throw new Error("More tasks executed then were scheduled.");0!=g&&0!=P||this.hasTask(this.zone,{microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:p})}}class m{constructor(p,t,o,g,P,K){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=p,this.source=t,this.data=g,this.scheduleFn=P,this.cancelFn=K,!o)throw new Error("callback is not defined");this.callback=o;const l=this;this.invoke=p===R&&g&&g.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(p,t,o){p||(p=this),re++;try{return p.runCount++,p.zone.runTask(p,t,o)}finally{1==re&&L(),re--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(j,q)}_transitionTo(p,t,o){if(this._state!==t&&this._state!==o)throw new Error(`${this.type} '${this.source}': can not transition to '${p}', expecting state '${t}'${o?" or '"+o+"'":""}, was '${this._state}'.`);this._state=p,p==j&&(this._zoneDelegates=null)}toString(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const S=u("setTimeout"),D=u("Promise"),Z=u("then");let E,B=[],V=!1;function d(I){if(0===re&&0===B.length)if(E||e[D]&&(E=e[D].resolve(0)),E){let p=E[Z];p||(p=E.then),p.call(E,L)}else e[S](L,0);I&&B.push(I)}function L(){if(!V){for(V=!0;B.length;){const I=B;B=[];for(let p=0;pG,onUnhandledError:F,microtaskDrainDone:F,scheduleMicroTask:d,showUncaughtError:()=>!_[u("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:F,patchMethod:()=>F,bindArguments:()=>[],patchThen:()=>F,patchMacroTask:()=>F,patchEventPrototype:()=>F,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>F,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>F,wrapWithCurrentZone:()=>F,filterProperties:()=>[],attachOriginToPatched:()=>F,_redefineProperty:()=>F,patchCallbacks:()=>F};let G={parent:null,zone:new _(null,null)},te=null,re=0;function F(){}r("Zone","Zone"),e.Zone=_}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global);const ue=Object.getOwnPropertyDescriptor,he=Object.defineProperty,de=Object.getPrototypeOf,Be=Object.create,ut=Array.prototype.slice,Se="addEventListener",Oe="removeEventListener",Ze=Zone.__symbol__(Se),Ie=Zone.__symbol__(Oe),se="true",ie="false",ke=Zone.__symbol__("");function Le(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,r,c){return Zone.current.scheduleMacroTask(e,n,i,r,c)}const x=Zone.__symbol__,Pe="undefined"!=typeof window,pe=Pe?window:void 0,$=Pe&&pe||"object"==typeof self&&self||global,ht=[null];function Ae(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Le(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}const Ue="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,Re=!("nw"in $)&&void 0!==$.process&&"[object process]"==={}.toString.call($.process),je=!Re&&!Ue&&!(!Pe||!pe.HTMLElement),We=void 0!==$.process&&"[object process]"==={}.toString.call($.process)&&!Ue&&!(!Pe||!pe.HTMLElement),Ce={},qe=function(e){if(!(e=e||$.event))return;let n=Ce[e.type];n||(n=Ce[e.type]=x("ON_PROPERTY"+e.type));const i=this||e.target||$,r=i[n];let c;if(je&&i===pe&&"error"===e.type){const u=e;c=r&&r.call(this,u.message,u.filename,u.lineno,u.colno,u.error),!0===c&&e.preventDefault()}else c=r&&r.apply(this,arguments),null!=c&&!c&&e.preventDefault();return c};function Xe(e,n,i){let r=ue(e,n);if(!r&&i&&ue(i,n)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;const c=x("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete r.writable,delete r.value;const u=r.get,f=r.set,_=n.substr(2);let y=Ce[_];y||(y=Ce[_]=x("ON_PROPERTY"+_)),r.set=function(T){let m=this;!m&&e===$&&(m=$),m&&(m[y]&&m.removeEventListener(_,qe),f&&f.apply(m,ht),"function"==typeof T?(m[y]=T,m.addEventListener(_,qe,!1)):m[y]=null)},r.get=function(){let T=this;if(!T&&e===$&&(T=$),!T)return null;const m=T[y];if(m)return m;if(u){let S=u&&u.call(this);if(S)return r.set.call(this,S),"function"==typeof T.removeAttribute&&T.removeAttribute(n),S}return null},he(e,n,r),e[c]=!0}function Ye(e,n,i){if(n)for(let r=0;rfunction(f,_){const y=i(f,_);return y.cbIdx>=0&&"function"==typeof _[y.cbIdx]?Me(y.name,_[y.cbIdx],y,c):u.apply(f,_)})}function ae(e,n){e[x("OriginalDelegate")]=n}let $e=!1,He=!1;function mt(){if($e)return He;$e=!0;try{const e=pe.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(He=!0)}catch(e){}return He}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const r=Object.getOwnPropertyDescriptor,c=Object.defineProperty,f=i.symbol,_=[],y=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),m=f("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const s=l&&l.rejection;s?console.error("Unhandled Promise rejection:",s instanceof Error?s.message:s,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",s,s instanceof Error?s.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;_.length;){const l=_.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(s){Z(s)}}};const D=f("unhandledPromiseRejectionHandler");function Z(l){i.onUnhandledError(l);try{const s=n[D];"function"==typeof s&&s.call(this,l)}catch(s){}}function B(l){return l&&l.then}function V(l){return l}function E(l){return t.reject(l)}const d=f("state"),L=f("value"),z=f("finally"),j=f("parentPromiseValue"),q=f("parentPromiseState"),X=null,A=!0,Y=!1;function M(l,s){return a=>{try{G(l,s,a)}catch(h){G(l,!1,h)}}}const le=f("currentTaskTrace");function G(l,s,a){const h=function(){let l=!1;return function(a){return function(){l||(l=!0,a.apply(null,arguments))}}}();if(l===a)throw new TypeError("Promise resolved with itself");if(l[d]===X){let w=null;try{("object"==typeof a||"function"==typeof a)&&(w=a&&a.then)}catch(C){return h(()=>{G(l,!1,C)})(),l}if(s!==Y&&a instanceof t&&a.hasOwnProperty(d)&&a.hasOwnProperty(L)&&a[d]!==X)re(a),G(l,a[d],a[L]);else if(s!==Y&&"function"==typeof w)try{w.call(a,h(M(l,s)),h(M(l,!1)))}catch(C){h(()=>{G(l,!1,C)})()}else{l[d]=s;const C=l[L];if(l[L]=a,l[z]===z&&s===A&&(l[d]=l[q],l[L]=l[j]),s===Y&&a instanceof Error){const k=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;k&&c(a,le,{configurable:!0,enumerable:!1,writable:!0,value:k})}for(let k=0;k{try{const b=l[L],N=!!a&&z===a[z];N&&(a[j]=b,a[q]=C);const H=s.run(k,void 0,N&&k!==E&&k!==V?[]:[b]);G(a,!0,H)}catch(b){G(a,!1,b)}},a)}const p=function(){};class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(s){return G(new this(null),A,s)}static reject(s){return G(new this(null),Y,s)}static race(s){let a,h,w=new this((b,N)=>{a=b,h=N});function C(b){a(b)}function k(b){h(b)}for(let b of s)B(b)||(b=this.resolve(b)),b.then(C,k);return w}static all(s){return t.allWithCallback(s)}static allSettled(s){return(this&&this.prototype instanceof t?this:t).allWithCallback(s,{thenCallback:h=>({status:"fulfilled",value:h}),errorCallback:h=>({status:"rejected",reason:h})})}static allWithCallback(s,a){let h,w,C=new this((H,U)=>{h=H,w=U}),k=2,b=0;const N=[];for(let H of s){B(H)||(H=this.resolve(H));const U=b;try{H.then(Q=>{N[U]=a?a.thenCallback(Q):Q,k--,0===k&&h(N)},Q=>{a?(N[U]=a.errorCallback(Q),k--,0===k&&h(N)):w(Q)})}catch(Q){w(Q)}k++,b++}return k-=2,0===k&&h(N),C}constructor(s){const a=this;if(!(a instanceof t))throw new Error("Must be an instanceof Promise.");a[d]=X,a[L]=[];try{s&&s(M(a,A),M(a,Y))}catch(h){G(a,!1,h)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(s,a){let h=this.constructor[Symbol.species];(!h||"function"!=typeof h)&&(h=this.constructor||t);const w=new h(p),C=n.current;return this[d]==X?this[L].push(C,w,s,a):F(this,C,w,s,a),w}catch(s){return this.then(null,s)}finally(s){let a=this.constructor[Symbol.species];(!a||"function"!=typeof a)&&(a=t);const h=new a(p);h[z]=z;const w=n.current;return this[d]==X?this[L].push(w,h,s,s):F(this,w,h,s,s),h}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const o=e[T]=e.Promise;e.Promise=t;const g=f("thenPatched");function P(l){const s=l.prototype,a=r(s,"then");if(a&&(!1===a.writable||!a.configurable))return;const h=s.then;s[m]=h,l.prototype.then=function(w,C){return new t((b,N)=>{h.call(this,b,N)}).then(w,C)},l[g]=!0}return i.patchThen=P,o&&(P(o),ce(e,"fetch",l=>function(l){return function(s,a){let h=l.apply(s,a);if(h instanceof t)return h;let w=h.constructor;return w[g]||P(w),h}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=_,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=x("OriginalDelegate"),r=x("Promise"),c=x("Error"),u=function(){if("function"==typeof this){const T=this[i];if(T)return"function"==typeof T?n.call(T):Object.prototype.toString.call(T);if(this===Promise){const m=e[r];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};u[i]=n,Function.prototype.toString=u;const f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});let me=!1;if("undefined"!=typeof window)try{const e=Object.defineProperty({},"passive",{get:function(){me=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(e){me=!1}const Et={useG:!0},ee={},Ke={},Je=new RegExp("^"+ke+"(\\w+)(true|false)$"),xe=x("propagationStopped");function Qe(e,n){const i=(n?n(e):e)+ie,r=(n?n(e):e)+se,c=ke+i,u=ke+r;ee[e]={},ee[e][ie]=c,ee[e][se]=u}function Tt(e,n,i){const r=i&&i.add||Se,c=i&&i.rm||Oe,u=i&&i.listeners||"eventListeners",f=i&&i.rmAll||"removeAllListeners",_=x(r),y="."+r+":",S=function(E,d,L){if(E.isRemoved)return;const z=E.callback;"object"==typeof z&&z.handleEvent&&(E.callback=q=>z.handleEvent(q),E.originalDelegate=z),E.invoke(E,d,[L]);const j=E.options;j&&"object"==typeof j&&j.once&&d[c].call(d,L.type,E.originalDelegate?E.originalDelegate:E.callback,j)},D=function(E){if(!(E=E||e.event))return;const d=this||E.target||e,L=d[ee[E.type][ie]];if(L)if(1===L.length)S(L[0],d,E);else{const z=L.slice();for(let j=0;jfunction(c,u){c[xe]=!0,r&&r.apply(c,u)})}function yt(e,n,i,r,c){const u=Zone.__symbol__(r);if(n[u])return;const f=n[u]=n[r];n[r]=function(_,y,T){return y&&y.prototype&&c.forEach(function(m){const S=`${i}.${r}::`+m,D=y.prototype;if(D.hasOwnProperty(m)){const Z=e.ObjectGetOwnPropertyDescriptor(D,m);Z&&Z.value?(Z.value=e.wrapWithCurrentZone(Z.value,S),e._redefineProperty(y.prototype,m,Z)):D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}else D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}),f.call(n,_,y,T)},e.attachOriginToPatched(n[r],f)}const Ve=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],wt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],tt=["load"],nt=["blur","error","focus","load","resize","scroll","messageerror"],Dt=["bounce","finish","start"],rt=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],Ee=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],St=["close","error","open","message"],Ot=["error","message"],Te=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Ve,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function ot(e,n,i){if(!i||0===i.length)return n;const r=i.filter(u=>u.target===e);if(!r||0===r.length)return n;const c=r[0].ignoreProperties;return n.filter(u=>-1===c.indexOf(u))}function W(e,n,i,r){e&&Ye(e,ot(e,n,i),r)}Zone.__load_patch("util",(e,n,i)=>{i.patchOnProperties=Ye,i.patchMethod=ce,i.bindArguments=Ae,i.patchMacroTask=_t;const r=n.__symbol__("BLACK_LISTED_EVENTS"),c=n.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[r]=e[c]),e[r]&&(n[r]=n[c]=e[r]),i.patchEventPrototype=gt,i.patchEventTarget=Tt,i.isIEOrEdge=mt,i.ObjectDefineProperty=he,i.ObjectGetOwnPropertyDescriptor=ue,i.ObjectCreate=Be,i.ArraySlice=ut,i.patchClass=ve,i.wrapWithCurrentZone=Le,i.filterProperties=ot,i.attachOriginToPatched=ae,i._redefineProperty=Object.defineProperty,i.patchCallbacks=yt,i.getGlobalObjects=()=>({globalSources:Ke,zoneSymbolEventNames:ee,eventNames:Te,isBrowser:je,isMix:We,isNode:Re,TRUE_STR:se,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ke,ADD_EVENT_LISTENER_STR:Se,REMOVE_EVENT_LISTENER_STR:Oe})});const Ne=x("zoneTask");function ge(e,n,i,r){let c=null,u=null;i+=r;const f={};function _(T){const m=T.data;return m.args[0]=function(){return T.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),T}function y(T){return u.call(e,T.data.handleId)}c=ce(e,n+=r,T=>function(m,S){if("function"==typeof S[0]){const D={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?S[1]||0:void 0,args:S},Z=S[0];S[0]=function(){try{return Z.apply(this,arguments)}finally{D.isPeriodic||("number"==typeof D.handleId?delete f[D.handleId]:D.handleId&&(D.handleId[Ne]=null))}};const B=Me(n,S[0],D,_,y);if(!B)return B;const V=B.data.handleId;return"number"==typeof V?f[V]=B:V&&(V[Ne]=B),V&&V.ref&&V.unref&&"function"==typeof V.ref&&"function"==typeof V.unref&&(B.ref=V.ref.bind(V),B.unref=V.unref.bind(V)),"number"==typeof V||V?V:B}return T.apply(e,S)}),u=ce(e,i,T=>function(m,S){const D=S[0];let Z;"number"==typeof D?Z=f[D]:(Z=D&&D[Ne],Z||(Z=D)),Z&&"string"==typeof Z.type?"notScheduled"!==Z.state&&(Z.cancelFn&&Z.data.isPeriodic||0===Z.runCount)&&("number"==typeof D?delete f[D]:D&&(D[Ne]=null),Z.zone.cancelTask(Z)):T.apply(e,S)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",r=>function(c,u){n.current.scheduleMicroTask("queueMicrotask",u[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";ge(e,n,i,"Timeout"),ge(e,n,i,"Interval"),ge(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{ge(e,"request","cancel","AnimationFrame"),ge(e,"mozRequest","mozCancel","AnimationFrame"),ge(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let r=0;rfunction(y,T){return n.current.run(u,e,T,_)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function(e,n){n.patchEventPrototype(e,n)})(e,i),function(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:r,TRUE_STR:c,FALSE_STR:u,ZONE_SYMBOL_PREFIX:f}=n.getGlobalObjects();for(let y=0;y{ve("MutationObserver"),ve("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ve("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ve("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function(e,n){if(Re&&!We||Zone[e.symbol("patchEvents")])return;const i="undefined"!=typeof WebSocket,r=n.__Zone_ignore_on_properties;if(je){const f=window,_=function(){try{const e=pe.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch(e){}return!1}()?[{target:f,ignoreProperties:["error"]}]:[];W(f,Te.concat(["messageerror"]),r&&r.concat(_),de(f)),W(Document.prototype,Te,r),void 0!==f.SVGElement&&W(f.SVGElement.prototype,Te,r),W(Element.prototype,Te,r),W(HTMLElement.prototype,Te,r),W(HTMLMediaElement.prototype,wt,r),W(HTMLFrameSetElement.prototype,Ve.concat(nt),r),W(HTMLBodyElement.prototype,Ve.concat(nt),r),W(HTMLFrameElement.prototype,tt,r),W(HTMLIFrameElement.prototype,tt,r);const y=f.HTMLMarqueeElement;y&&W(y.prototype,Dt,r);const T=f.Worker;T&&W(T.prototype,Ot,r)}const c=n.XMLHttpRequest;c&&W(c.prototype,rt,r);const u=n.XMLHttpRequestEventTarget;u&&W(u&&u.prototype,rt,r),"undefined"!=typeof IDBIndex&&(W(IDBIndex.prototype,Ee,r),W(IDBRequest.prototype,Ee,r),W(IDBOpenDBRequest.prototype,Ee,r),W(IDBDatabase.prototype,Ee,r),W(IDBTransaction.prototype,Ee,r),W(IDBCursor.prototype,Ee,r)),i&&W(WebSocket.prototype,St,r)}(i,e)}),Zone.__load_patch("customElements",(e,n,i)=>{!function(e,n){const{isBrowser:i,isMix:r}=n.getGlobalObjects();(i||r)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function(T){const m=T.XMLHttpRequest;if(!m)return;const S=m.prototype;let Z=S[Ze],B=S[Ie];if(!Z){const v=T.XMLHttpRequestEventTarget;if(v){const M=v.prototype;Z=M[Ze],B=M[Ie]}}const V="readystatechange",E="scheduled";function d(v){const M=v.data,R=M.target;R[u]=!1,R[_]=!1;const J=R[c];Z||(Z=R[Ze],B=R[Ie]),J&&B.call(R,V,J);const le=R[c]=()=>{if(R.readyState===R.DONE)if(!M.aborted&&R[u]&&v.state===E){const te=R[n.__symbol__("loadfalse")];if(0!==R.status&&te&&te.length>0){const re=v.invoke;v.invoke=function(){const F=R[n.__symbol__("loadfalse")];for(let I=0;Ifunction(v,M){return v[r]=0==M[2],v[f]=M[1],j.apply(v,M)}),O=x("fetchTaskAborting"),X=x("fetchTaskScheduling"),A=ce(S,"send",()=>function(v,M){if(!0===n.current[X]||v[r])return A.apply(v,M);{const R={target:v,url:v[f],isPeriodic:!1,args:M,aborted:!1},J=Me("XMLHttpRequest.send",L,R,d,z);v&&!0===v[_]&&!R.aborted&&J.state===E&&J.invoke()}}),Y=ce(S,"abort",()=>function(v,M){const R=function(v){return v[i]}(v);if(R&&"string"==typeof R.type){if(null==R.cancelFn||R.data&&R.data.aborted)return;R.zone.cancelTask(R)}else if(!0===n.current[O])return Y.apply(v,M)})}(e);const i=x("xhrTask"),r=x("xhrSync"),c=x("xhrListener"),u=x("xhrScheduled"),f=x("xhrURL"),_=x("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function(e,n){const i=e.constructor.name;for(let r=0;r{const y=function(){return _.apply(this,Ae(arguments,i+"."+c))};return ae(y,_),y})(u)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(r){return function(c){et(e,r).forEach(f=>{const _=e.PromiseRejectionEvent;if(_){const y=new _(r,{promise:c.promise,reason:c.rejection});f.invoke(y)}})}}e.PromiseRejectionEvent&&(n[x("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[x("rejectionHandledHandler")]=i("rejectionhandled"))})},443:(we,ue,he)=>{he(273)}},we=>{we(we.s=443)}]); + +(self.webpackChunkcoverage_app=self.webpackChunkcoverage_app||[]).push([[179],{255:wo=>{function Mn(Io){return Promise.resolve().then(()=>{var Tn=new Error("Cannot find module '"+Io+"'");throw Tn.code="MODULE_NOT_FOUND",Tn})}Mn.keys=()=>[],Mn.resolve=Mn,Mn.id=255,wo.exports=Mn},15:(wo,Mn,Io)=>{"use strict";function Tn(e){return"function"==typeof e}let ja=!1;const Rt={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){if(e){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else ja&&console.log("RxJS: Back to a better error behavior. Thank you. <3");ja=e},get useDeprecatedSynchronousErrorHandling(){return ja}};function _r(e){setTimeout(()=>{throw e},0)}const $i={closed:!0,next(e){},error(e){if(Rt.useDeprecatedSynchronousErrorHandling)throw e;_r(e)},complete(){}},$a=Array.isArray||(e=>e&&"number"==typeof e.length);function Ua(e){return null!==e&&"object"==typeof e}const Ui=(()=>{function e(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((n,r)=>`${r+1}) ${n.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return e.prototype=Object.create(Error.prototype),e})();class Ee{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}unsubscribe(){let t;if(this.closed)return;let{_parentOrParents:n,_ctorUnsubscribe:r,_unsubscribe:o,_subscriptions:i}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof Ee)n.remove(this);else if(null!==n)for(let s=0;st.concat(n instanceof Ui?n.errors:n),[])}Ee.EMPTY=((e=new Ee).closed=!0,e);const Gi="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();class lt extends Ee{constructor(t,n,r){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=$i;break;case 1:if(!t){this.destination=$i;break}if("object"==typeof t){t instanceof lt?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new Gd(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new Gd(this,t,n,r)}}[Gi](){return this}static create(t,n,r){const o=new lt(t,n,r);return o.syncErrorThrowable=!1,o}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class Gd extends lt{constructor(t,n,r,o){super(),this._parentSubscriber=t;let i,s=this;Tn(n)?i=n:n&&(i=n.next,r=n.error,o=n.complete,n!==$i&&(s=Object.create(n),Tn(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=i,this._error=r,this._complete=o}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:n}=this;Rt.useDeprecatedSynchronousErrorHandling&&n.syncErrorThrowable?this.__tryOrSetError(n,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:n}=this,{useDeprecatedSynchronousErrorHandling:r}=Rt;if(this._error)r&&n.syncErrorThrowable?(this.__tryOrSetError(n,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(n.syncErrorThrowable)r?(n.syncErrorValue=t,n.syncErrorThrown=!0):_r(t),this.unsubscribe();else{if(this.unsubscribe(),r)throw t;_r(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const n=()=>this._complete.call(this._context);Rt.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,n){try{t.call(this._context,n)}catch(r){if(this.unsubscribe(),Rt.useDeprecatedSynchronousErrorHandling)throw r;_r(r)}}__tryOrSetError(t,n,r){if(!Rt.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{n.call(this._context,r)}catch(o){return Rt.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=o,t.syncErrorThrown=!0,!0):(_r(o),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}const Mo="function"==typeof Symbol&&Symbol.observable||"@@observable";function zd(e){return e}let qe=(()=>{class e{constructor(n){this._isScalar=!1,n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const{operator:i}=this,s=function(e,t,n){if(e){if(e instanceof lt)return e;if(e[Gi])return e[Gi]()}return e||t||n?new lt(e,t,n):new lt($i)}(n,r,o);if(s.add(i?i.call(s,this.source):this.source||Rt.useDeprecatedSynchronousErrorHandling&&!s.syncErrorThrowable?this._subscribe(s):this._trySubscribe(s)),Rt.useDeprecatedSynchronousErrorHandling&&s.syncErrorThrowable&&(s.syncErrorThrowable=!1,s.syncErrorThrown))throw s.syncErrorValue;return s}_trySubscribe(n){try{return this._subscribe(n)}catch(r){Rt.useDeprecatedSynchronousErrorHandling&&(n.syncErrorThrown=!0,n.syncErrorValue=r),function(e){for(;e;){const{closed:t,destination:n,isStopped:r}=e;if(t||r)return!1;e=n&&n instanceof lt?n:null}return!0}(n)?n.error(r):console.warn(r)}}forEach(n,r){return new(r=qd(r))((o,i)=>{let s;s=this.subscribe(a=>{try{n(a)}catch(l){i(l),s&&s.unsubscribe()}},i,o)})}_subscribe(n){const{source:r}=this;return r&&r.subscribe(n)}[Mo](){return this}pipe(...n){return 0===n.length?this:function(e){return 0===e.length?zd:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}(n)(this)}toPromise(n){return new(n=qd(n))((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function qd(e){if(e||(e=Rt.Promise||Promise),!e)throw new Error("no Promise impl found");return e}const To=(()=>{function e(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return e.prototype=Object.create(Error.prototype),e})();class pv extends Ee{constructor(t,n){super(),this.subject=t,this.subscriber=n,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,n=t.observers;if(this.subject=null,!n||0===n.length||t.isStopped||t.closed)return;const r=n.indexOf(this.subscriber);-1!==r&&n.splice(r,1)}}class Qd extends lt{constructor(t){super(t),this.destination=t}}let Ga=(()=>{class e extends qe{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[Gi](){return new Qd(this)}lift(n){const r=new Kd(this,this);return r.operator=n,r}next(n){if(this.closed)throw new To;if(!this.isStopped){const{observers:r}=this,o=r.length,i=r.slice();for(let s=0;snew Kd(t,n),e})();class Kd extends Ga{constructor(t,n){super(),this.destination=t,this.source=n}next(t){const{destination:n}=this;n&&n.next&&n.next(t)}error(t){const{destination:n}=this;n&&n.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:n}=this;return n?this.source.subscribe(t):Ee.EMPTY}}function za(e,t){return function(r){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return r.lift(new mv(e,t))}}class mv{constructor(t,n){this.project=t,this.thisArg=n}call(t,n){return n.subscribe(new _v(t,this.project,this.thisArg))}}class _v extends lt{constructor(t,n,r){super(t),this.project=n,this.count=0,this.thisArg=r||this}_next(t){let n;try{n=this.project.call(this.thisArg,t,this.count++)}catch(r){return void this.destination.error(r)}this.destination.next(n)}}const Yd=e=>t=>{for(let n=0,r=e.length;ne&&"number"==typeof e.length&&"function"!=typeof e;function Jd(e){return!!e&&"function"!=typeof e.subscribe&&"function"==typeof e.then}const Xd=e=>{if(e&&"function"==typeof e[Mo])return(e=>t=>{const n=e[Mo]();if("function"!=typeof n.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return n.subscribe(t)})(e);if(Zd(e))return Yd(e);if(Jd(e))return(e=>t=>(e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,_r),t))(e);if(e&&"function"==typeof e[zi])return(e=>t=>{const n=e[zi]();for(;;){let r;try{r=n.next()}catch(o){return t.error(o),t}if(r.done){t.complete();break}if(t.next(r.value),t.closed)break}return"function"==typeof n.return&&t.add(()=>{n.return&&n.return()}),t})(e);{const n=`You provided ${Ua(e)?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(n)}};function ef(e,t){return new qe(n=>{const r=new Ee;let o=0;return r.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||r.add(this.schedule())):n.complete()})),r})}function Wa(e,t){return t?function(e,t){if(null!=e){if(function(e){return e&&"function"==typeof e[Mo]}(e))return function(e,t){return new qe(n=>{const r=new Ee;return r.add(t.schedule(()=>{const o=e[Mo]();r.add(o.subscribe({next(i){r.add(t.schedule(()=>n.next(i)))},error(i){r.add(t.schedule(()=>n.error(i)))},complete(){r.add(t.schedule(()=>n.complete()))}}))})),r})}(e,t);if(Jd(e))return function(e,t){return new qe(n=>{const r=new Ee;return r.add(t.schedule(()=>e.then(o=>{r.add(t.schedule(()=>{n.next(o),r.add(t.schedule(()=>n.complete()))}))},o=>{r.add(t.schedule(()=>n.error(o)))}))),r})}(e,t);if(Zd(e))return ef(e,t);if(function(e){return e&&"function"==typeof e[zi]}(e)||"string"==typeof e)return function(e,t){if(!e)throw new Error("Iterable cannot be null");return new qe(n=>{const r=new Ee;let o;return r.add(()=>{o&&"function"==typeof o.return&&o.return()}),r.add(t.schedule(()=>{o=e[zi](),r.add(t.schedule(function(){if(n.closed)return;let i,s;try{const a=o.next();i=a.value,s=a.done}catch(a){return void n.error(a)}s?n.complete():(n.next(i),this.schedule())}))})),r})}(e,t)}throw new TypeError((null!==e&&typeof e||e)+" is not observable")}(e,t):e instanceof qe?e:new qe(Xd(e))}class Av extends lt{constructor(t){super(),this.parent=t}_next(t){this.parent.notifyNext(t)}_error(t){this.parent.notifyError(t),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class Sv extends lt{notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.destination.complete()}}function tf(e,t,n=Number.POSITIVE_INFINITY){return"function"==typeof t?r=>r.pipe(tf((o,i)=>Wa(e(o,i)).pipe(za((s,a)=>t(o,s,i,a))),n)):("number"==typeof t&&(n=t),r=>r.lift(new Nv(e,n)))}class Nv{constructor(t,n=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=n}call(t,n){return n.subscribe(new Rv(t,this.project,this.concurrent))}}class Rv extends Sv{constructor(t,n,r=Number.POSITIVE_INFINITY){super(t),this.project=n,this.concurrent=r,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}function Fv(e=Number.POSITIVE_INFINITY){return tf(zd,e)}function nf(){return function(t){return t.lift(new Vv(t))}}class Vv{constructor(t){this.connectable=t}call(t,n){const{connectable:r}=this;r._refCount++;const o=new kv(t,r),i=n.subscribe(o);return o.closed||(o.connection=r.connect()),i}}class kv extends lt{constructor(t,n){super(t),this.connectable=n}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const n=t._refCount;if(n<=0)return void(this.connection=null);if(t._refCount=n-1,n>1)return void(this.connection=null);const{connection:r}=this,o=t._connection;this.connection=null,o&&(!r||o===r)&&o.unsubscribe()}}class Lv extends qe{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new Ee,t.add(this.source.subscribe(new Hv(this.getSubject(),this))),t.closed&&(this._connection=null,t=Ee.EMPTY)),t}refCount(){return nf()(this)}}const Bv=(()=>{const e=Lv.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:e._subscribe},_isComplete:{value:e._isComplete,writable:!0},getSubject:{value:e.getSubject},connect:{value:e.connect},refCount:{value:e.refCount}}})();class Hv extends Qd{constructor(t,n){super(t),this.connectable=n}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const n=t._connection;t._refCount=0,t._subject=null,t._connection=null,n&&n.unsubscribe()}}}function Gv(){return new Ga}function ee(e){for(let t in e)if(e[t]===ee)return t;throw Error("Could not find renamed property on target object.")}function qa(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function W(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(W).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Qa(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const Wv=ee({__forward_ref__:ee});function ue(e){return e.__forward_ref__=ue,e.toString=function(){return W(this())},e}function N(e){return rf(e)?e():e}function rf(e){return"function"==typeof e&&e.hasOwnProperty(Wv)&&e.__forward_ref__===ue}class Qn extends Error{constructor(t,n){super(function(e,t){return`${e?`NG0${e}: `:""}${t}`}(t,n)),this.code=t}}function U(e){return"string"==typeof e?e:null==e?"":String(e)}function Qe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():U(e)}function Wi(e,t){const n=t?` in ${t}`:"";throw new Qn("201",`No provider for ${Qe(e)} found${n}`)}function ut(e,t){null==e&&function(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function te(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ft(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return of(e,qi)||of(e,af)}function of(e,t){return e.hasOwnProperty(t)?e[t]:null}function sf(e){return e&&(e.hasOwnProperty(Ya)||e.hasOwnProperty(Xv))?e[Ya]:null}const qi=ee({\u0275prov:ee}),Ya=ee({\u0275inj:ee}),af=ee({ngInjectableDef:ee}),Xv=ee({ngInjectorDef:ee});var O=(()=>((O=O||{})[O.Default=0]="Default",O[O.Host=1]="Host",O[O.Self=2]="Self",O[O.SkipSelf=4]="SkipSelf",O[O.Optional=8]="Optional",O))();let Za;function An(e){const t=Za;return Za=e,t}function lf(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&O.Optional?null:void 0!==t?t:void Wi(W(e),"Injector")}function Sn(e){return{toString:e}.toString()}var yt=(()=>((yt=yt||{})[yt.OnPush=0]="OnPush",yt[yt.Default=1]="Default",yt))(),Se=(()=>((Se=Se||{})[Se.Emulated=0]="Emulated",Se[Se.None=2]="None",Se[Se.ShadowDom=3]="ShadowDom",Se))();const tD="undefined"!=typeof globalThis&&globalThis,nD="undefined"!=typeof window&&window,rD="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,oD="undefined"!=typeof global&&global,ne=tD||oD||nD||rD,yr={},ie=[],Qi=ee({\u0275cmp:ee}),Ja=ee({\u0275dir:ee}),Xa=ee({\u0275pipe:ee}),cf=ee({\u0275mod:ee}),iD=ee({\u0275loc:ee}),gn=ee({\u0275fac:ee}),Ao=ee({__NG_ELEMENT_ID__:ee});let sD=0;function xn(e){return Sn(()=>{const n={},r={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===yt.OnPush,directiveDefs:null,pipeDefs:null,selectors:e.selectors||ie,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||Se.Emulated,id:"c",styles:e.styles||ie,_:null,setInput:null,schemas:e.schemas||null,tView:null},o=e.directives,i=e.features,s=e.pipes;return r.id+=sD++,r.inputs=hf(e.inputs,n),r.outputs=hf(e.outputs),i&&i.forEach(a=>a(r)),r.directiveDefs=o?()=>("function"==typeof o?o():o).map(uf):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(df):null,r})}function uf(e){return Ke(e)||function(e){return e[Ja]||null}(e)}function df(e){return function(e){return e[Xa]||null}(e)}const ff={};function mn(e){return Sn(()=>{const t={type:e.type,bootstrap:e.bootstrap||ie,declarations:e.declarations||ie,imports:e.imports||ie,exports:e.exports||ie,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null};return null!=e.id&&(ff[e.id]=e.type),t})}function hf(e,t){if(null==e)return yr;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}const L=xn;function ot(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,onDestroy:e.type.prototype.ngOnDestroy||null}}function Ke(e){return e[Qi]||null}function Ct(e,t){const n=e[cf]||null;if(!n&&!0===t)throw new Error(`Type ${W(e)} does not have '\u0275mod' property.`);return n}const G=11;function Yt(e){return Array.isArray(e)&&"object"==typeof e[1]}function Pt(e){return Array.isArray(e)&&!0===e[1]}function nl(e){return 0!=(8&e.flags)}function Ji(e){return 2==(2&e.flags)}function Xi(e){return 1==(1&e.flags)}function Vt(e){return null!==e.template}function hD(e){return 0!=(512&e[2])}function Xn(e,t){return e.hasOwnProperty(gn)?e[gn]:null}class gf{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function ft(){return mf}function mf(e){return e.type.prototype.ngOnChanges&&(e.setInput=_D),mD}function mD(){const e=yf(this),t=null==e?void 0:e.current;if(t){const n=e.previous;if(n===yr)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function _D(e,t,n,r){const o=yf(e)||function(e,t){return e[_f]=t}(e,{previous:yr,current:null}),i=o.current||(o.current={}),s=o.previous,a=this.declaredInputs[n],l=s[a];i[a]=new gf(l&&l.currentValue,t,s===yr),e[r]=t}ft.ngInherit=!0;const _f="__ngSimpleChanges__";function yf(e){return e[_f]||null}const Cf="http://www.w3.org/2000/svg";let il;function ve(e){return!!e.listen}const Df={createRenderer:(e,t)=>void 0!==il?il:"undefined"!=typeof document?document:void 0};function Me(e){for(;Array.isArray(e);)e=e[0];return e}function es(e,t){return Me(t[e])}function bt(e,t){return Me(t[e.index])}function al(e,t){return e.data[t]}function ht(e,t){const n=t[e];return Yt(n)?n:n[0]}function ll(e){return 128==(128&e[2])}function Rn(e,t){return null==t?null:e[t]}function Ef(e){e[18]=0}function cl(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const B={lFrame:Nf(null),bindingsEnabled:!0,isInCheckNoChangesMode:!1};function wf(){return B.bindingsEnabled}function b(){return B.lFrame.lView}function J(){return B.lFrame.tView}function le(e){return B.lFrame.contextLView=e,e[8]}function xe(){let e=If();for(;null!==e&&64===e.type;)e=e.parent;return e}function If(){return B.lFrame.currentTNode}function Zt(e,t){const n=B.lFrame;n.currentTNode=e,n.isParent=t}function ul(){return B.lFrame.isParent}function dl(){B.lFrame.isParent=!1}function ts(){return B.isInCheckNoChangesMode}function ns(e){B.isInCheckNoChangesMode=e}function Ye(){const e=B.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function wr(){return B.lFrame.bindingIndex++}function _n(e){const t=B.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function RD(e,t){const n=B.lFrame;n.bindingIndex=n.bindingRootIndex=e,fl(t)}function fl(e){B.lFrame.currentDirectiveIndex=e}function pl(e){B.lFrame.currentQueryIndex=e}function OD(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Sf(e,t,n){if(n&O.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&O.Host||(o=OD(i),null===o||(i=i[15],10&o.type))););if(null===o)return!1;t=o,e=i}const r=B.lFrame=xf();return r.currentTNode=t,r.lView=e,!0}function rs(e){const t=xf(),n=e[1];B.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function xf(){const e=B.lFrame,t=null===e?null:e.child;return null===t?Nf(e):t}function Nf(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function Rf(){const e=B.lFrame;return B.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Ff=Rf;function os(){const e=Rf();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Ze(){return B.lFrame.selectedIndex}function Fn(e){B.lFrame.selectedIndex=e}function De(){const e=B.lFrame;return al(e.tView,e.selectedIndex)}function is(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[l]<0&&(e[18]+=65536),(a>11>16&&(3&e[2])===t){e[2]+=2048;try{i.call(a)}finally{}}}else try{i.call(a)}finally{}}class Fo{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function ls(e,t,n){const r=ve(e);let o=0;for(;ot){s=i-1;break}}}for(;i>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let yl=!0;function us(e){const t=yl;return yl=e,t}let QD=0;function Po(e,t){const n=vl(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,Cl(r.data,e),Cl(t,null),Cl(r.blueprint,null));const o=ds(e,t),i=e.injectorIndex;if(Lf(o)){const s=Ir(o),a=Mr(o,t),l=a[1].data;for(let c=0;c<8;c++)t[i+c]=a[s+c]|l[s+c]}return t[i+8]=o,i}function Cl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function vl(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function ds(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){const i=o[1],s=i.type;if(r=2===s?i.declTNode:1===s?o[6]:null,null===r)return-1;if(n++,o=o[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function fs(e,t,n){!function(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(Ao)&&(r=n[Ao]),null==r&&(r=n[Ao]=QD++);const o=255&r;t.data[e+(o>>5)]|=1<=0?255&t:ZD:t}(n);if("function"==typeof i){if(!Sf(t,e,r))return r&O.Host?jf(o,n,r):$f(t,n,r,o);try{const s=i(r);if(null!=s||r&O.Optional)return s;Wi(n)}finally{Ff()}}else if("number"==typeof i){let s=null,a=vl(e,t),l=-1,c=r&O.Host?t[16][6]:null;for((-1===a||r&O.SkipSelf)&&(l=-1===a?ds(e,t):t[a+8],-1!==l&&Wf(r,!1)?(s=t[1],a=Ir(l),t=Mr(l,t)):a=-1);-1!==a;){const u=t[1];if(zf(i,a,u.data)){const d=JD(a,t,n,s,r,c);if(d!==Gf)return d}l=t[a+8],-1!==l&&Wf(r,t[1].data[a+8]===c)&&zf(i,a,t)?(s=u,a=Ir(l),t=Mr(l,t)):a=-1}}}return $f(t,n,r,o)}const Gf={};function ZD(){return new Tr(xe(),b())}function JD(e,t,n,r,o,i){const s=t[1],a=s.data[e+8],u=function(e,t,n,r,o){const i=e.providerIndexes,s=t.data,a=1048575&i,l=e.directiveStart,u=i>>20,f=o?a+u:e.directiveEnd;for(let h=r?a:a+u;h=l&&p.type===n)return h}if(o){const h=s[l];if(h&&Vt(h)&&h.type===n)return l}return null}(a,s,n,null==r?Ji(a)&&yl:r!=s&&0!=(3&a.type),o&O.Host&&i===a);return null!==u?Vo(t,s,u,a):Gf}function Vo(e,t,n,r){let o=e[n];const i=t.data;if(function(e){return e instanceof Fo}(o)){const s=o;s.resolving&&function(e,t){throw new Qn("200",`Circular dependency in DI detected for ${e}`)}(Qe(i[n]));const a=us(s.canSeeViewProviders);s.resolving=!0;const l=s.injectImpl?An(s.injectImpl):null;Sf(e,r,O.Default);try{o=e[n]=s.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const s=mf(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,s)}o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,o),i&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,i),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,i))}(n,i[n],t)}finally{null!==l&&An(l),us(a),s.resolving=!1,Ff()}}return o}function zf(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[gn]||Dl(t),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[gn]||Dl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Dl(e){return rf(e)?()=>{const t=Dl(N(e));return t&&t()}:Xn(e)}const Sr="__parameters__";function er(e,t,n){return Sn(()=>{const r=function(e){return function(...n){if(e){const r=e(...n);for(const o in r)this[o]=r[o]}}}(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;const s=new o(...i);return a.annotation=s,a;function a(l,c,u){const d=l.hasOwnProperty(Sr)?l[Sr]:Object.defineProperty(l,Sr,{value:[]})[Sr];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),l}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}class X{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=te({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}toString(){return`InjectionToken ${this._desc}`}}function Xt(e,t){e.forEach(n=>Array.isArray(n)?Xt(n,t):t(n))}function gs(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function tr(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function pt(e,t,n){let r=Nr(e,t);return r>=0?e[1|r]=n:(r=~r,function(e,t,n,r){let o=e.length;if(o==t)e.push(n,r);else if(1===o)e.push(r,e[0]),e[0]=n;else{for(o--,e.push(e[o-1],e[o]);o>t;)e[o]=e[o-2],o--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Il(e,t){const n=Nr(e,t);if(n>=0)return e[1|n]}function Nr(e,t){return function(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){const i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o< ");else if("object"==typeof t){let i=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];i.push(s+":"+("string"==typeof a?JSON.stringify(a):W(a)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(db,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[Rr]=null,e}const Uo=$o(er("Inject",e=>({token:e})),-1),en=$o(er("Optional"),8),rr=$o(er("SkipSelf"),4);class or{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see https://g.co/ng/security#xss)`}}function gt(e){return e instanceof or?e.changingThisBreaksApplicationSecurity:e}function tn(e,t){const n=function(e){return e instanceof or&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see https://g.co/ng/security#xss)`)}return n===t}const Lb=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi,Bb=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;var ce=(()=>((ce=ce||{})[ce.NONE=0]="NONE",ce[ce.HTML=1]="HTML",ce[ce.STYLE=2]="STYLE",ce[ce.SCRIPT=3]="SCRIPT",ce[ce.URL=4]="URL",ce[ce.RESOURCE_URL=5]="RESOURCE_URL",ce))();function Vr(e){const t=function(){const e=b();return e&&e[12]}();return t?t.sanitize(ce.URL,e)||"":tn(e,"URL")?gt(e):function(e){return(e=String(e)).match(Lb)||e.match(Bb)?e:"unsafe:"+e}(U(e))}const _h="__ngContext__";function He(e,t){e[_h]=t}function Ll(e){const t=function(e){return e[_h]||null}(e);return t?Array.isArray(t)?t:t.lView:null}function bs(e){return e.ngOriginalError}function aE(e,...t){e.error(...t)}class ir{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t),r=this._findContext(t),o=function(e){return e&&e.ngErrorLogger||aE}(t);o(this._console,"ERROR",t),n&&o(this._console,"ORIGINAL ERROR",n),r&&o(this._console,"ERROR CONTEXT",r)}_findContext(t){return t?function(e){return e.ngDebugContext}(t)||this._findContext(bs(t)):null}_findOriginalError(t){let n=t&&bs(t);for(;n&&bs(n);)n=bs(n);return n||null}}const Mh=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(ne))();function Hl(e){return e.ownerDocument.defaultView}function rn(e){return e instanceof Function?e():e}var mt=(()=>((mt=mt||{})[mt.Important=1]="Important",mt[mt.DashCase=2]="DashCase",mt))();function $l(e,t){return undefined(e,t)}function Ko(e){const t=e[3];return Pt(t)?t[3]:t}function Ul(e){return Nh(e[13])}function Gl(e){return Nh(e[4])}function Nh(e){for(;null!==e&&!Pt(e);)e=e[4];return e}function Lr(e,t,n,r,o){if(null!=r){let i,s=!1;Pt(r)?i=r:Yt(r)&&(s=!0,r=r[0]);const a=Me(r);0===e&&null!==n?null==o?kh(t,n,a):sr(t,n,a,o||null,!0):1===e&&null!==n?sr(t,n,a,o||null,!0):2===e?function(e,t,n){const r=ws(e,t);r&&function(e,t,n,r){ve(e)?e.removeChild(t,n,r):t.removeChild(n)}(e,r,t,n)}(t,a,s):3===e&&t.destroyNode(a),null!=i&&function(e,t,n,r,o){const i=n[7];i!==Me(n)&&Lr(t,e,r,i,o);for(let a=10;a0&&(e[n-1][4]=r[4]);const i=tr(e,10+t);!function(e,t){Yo(e,t,t[G],2,null,null),t[0]=null,t[6]=null}(r[1],r);const s=i[19];null!==s&&s.detachView(i[1]),r[3]=null,r[4]=null,r[2]&=-129}return r}function Oh(e,t){if(!(256&t[2])){const n=t[G];ve(n)&&n.destroyNode&&Yo(e,t,n,3,null,null),function(e){let t=e[13];if(!t)return Ql(e[1],e);for(;t;){let n=null;if(Yt(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Yt(t)&&Ql(t[1],t),t=t[3];null===t&&(t=e),Yt(t)&&Ql(t[1],t),n=t&&t[4]}t=n}}(t)}}function Ql(e,t){if(!(256&t[2])){t[2]&=-129,t[2]|=256,function(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[o=c]():r[o=-c].unsubscribe(),i+=2}else{const s=r[o=n[i+1]];n[i].call(s)}if(null!==r){for(let i=o+1;ii?"":o[d+1].toLowerCase();const h=8&r?f:null;if(h&&-1!==qh(h,c,0)||2&r&&c!==f){if(kt(r))return!1;s=!0}}}}else{if(!s&&!kt(r)&&!kt(l))return!1;if(s&&kt(l))continue;s=!1,r=l|1&r}}return kt(r)||s}function kt(e){return 0==(1&e)}function PE(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&r?o+="."+s:4&r&&(o+=" "+s);else""!==o&&!kt(s)&&(t+=Zh(i,o),o=""),r=s,i=i||!kt(r);n++}return""!==o&&(t+=Zh(i,o)),t}const j={};function g(e){Jh(J(),b(),Ze()+e,ts())}function Jh(e,t,n,r){if(!r)if(3==(3&t[2])){const i=e.preOrderCheckHooks;null!==i&&ss(t,i,n)}else{const i=e.preOrderHooks;null!==i&&as(t,i,0,n)}Fn(n)}function Ts(e,t){return e<<17|t<<2}function Lt(e){return e>>17&32767}function Xl(e){return 2|e}function yn(e){return(131068&e)>>2}function ec(e,t){return-131069&e|t<<2}function tc(e){return 1|e}function lp(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r20&&Jh(e,t,20,ts()),n(r,o)}finally{Fn(i)}}function up(e,t,n){if(nl(t)){const o=t.directiveEnd;for(let i=t.directiveStart;i0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(a)!=l&&a.push(l),a.push(r,o,s)}}function yp(e,t){null!==e.hostBindings&&e.hostBindings(1,t)}function Cp(e,t){t.flags|=2,(e.components||(e.components=[])).push(t.index)}function fw(e,t,n){if(n){if(t.exportAs)for(let r=0;r0&&hc(n)}}function hc(e){for(let r=Ul(e);null!==r;r=Gl(r))for(let o=10;o0&&hc(i)}const n=e[1].components;if(null!==n)for(let r=0;r0&&hc(o)}}function Cw(e,t){const n=ht(t,e),r=n[1];(function(e,t){for(let n=t.length;nPromise.resolve(null))();function wp(e){return e[7]||(e[7]=[])}function Ip(e){return e.cleanup||(e.cleanup=[])}function Tp(e,t){const n=e[9],r=n?n.get(ir,null):null;r&&r.handleError(t)}function Ap(e,t,n,r,o){for(let i=0;ithis.processProvider(a,t,n)),Xt([t],a=>this.processInjectorType(a,[],i)),this.records.set($r,Ur(void 0,this));const s=this.records.get(Xo);this.scope=null!=s?s.value:null,this.source=o||("object"==typeof t?null:W(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,n=Ho,r=O.Default){this.assertNotDestroyed();const o=Fr(this),i=An(void 0);try{if(!(r&O.SkipSelf)){let a=this.records.get(t);if(void 0===a){const l=function(e){return"function"==typeof e||"object"==typeof e&&e instanceof X}(t)&&pn(t);a=l&&this.injectableDefInScope(l)?Ur(Cc(t),ei):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(r&O.Self?xp():this.parent).get(t,n=r&O.Optional&&n===Ho?null:n)}catch(s){if("NullInjectorError"===s.name){if((s[Rr]=s[Rr]||[]).unshift(W(t)),o)throw s;return Jf(s,t,"R3InjectorError",this.source)}throw s}finally{An(i),Fr(o)}}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(t=>this.get(t))}toString(){const t=[];return this.records.forEach((r,o)=>t.push(W(o))),`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error("Injector has already been destroyed.")}processInjectorType(t,n,r){if(!(t=N(t)))return!1;let o=sf(t);const i=null==o&&t.ngModule||void 0,s=void 0===i?t:i,a=-1!==r.indexOf(s);if(void 0!==i&&(o=sf(i)),null==o)return!1;if(null!=o.imports&&!a){let u;r.push(s);try{Xt(o.imports,d=>{this.processInjectorType(d,n,r)&&(void 0===u&&(u=[]),u.push(d))})}finally{}if(void 0!==u)for(let d=0;dthis.processProvider(p,f,h||ie))}}this.injectorDefTypes.add(s);const l=Xn(s)||(()=>new s);this.records.set(s,Ur(l,ei));const c=o.providers;if(null!=c&&!a){const u=t;Xt(c,d=>this.processProvider(d,u,c))}return void 0!==i&&void 0!==t.providers}processProvider(t,n,r){let o=Gr(t=N(t))?t:N(t&&t.provide);const i=function(e,t,n){return Fp(e)?Ur(void 0,e.useValue):Ur(Rp(e),ei)}(t);if(Gr(t)||!0!==t.multi)this.records.get(o);else{let s=this.records.get(o);s||(s=Ur(void 0,ei,!0),s.factory=()=>nr(s.multi),this.records.set(o,s)),o=t,s.multi.push(t)}this.records.set(o,i)}hydrate(t,n){return n.value===ei&&(n.value=Tw,n.value=n.factory()),"object"==typeof n.value&&n.value&&function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this.onDestroy.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=N(t.providedIn);return"string"==typeof n?"any"===n||n===this.scope:this.injectorDefTypes.has(n)}}function Cc(e){const t=pn(e),n=null!==t?t.factory:Xn(e);if(null!==n)return n;if(e instanceof X)throw new Error(`Token ${W(e)} is missing a \u0275prov definition.`);if(e instanceof Function)return function(e){const t=e.length;if(t>0){const r=function(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new Error("unreachable")}function Rp(e,t,n){let r;if(Gr(e)){const o=N(e);return Xn(o)||Cc(o)}if(Fp(e))r=()=>N(e.useValue);else if(function(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...nr(e.deps||[]));else if(function(e){return!(!e||!e.useExisting)}(e))r=()=>Y(N(e.useExisting));else{const o=N(e&&(e.useClass||e.provide));if(!function(e){return!!e.deps}(e))return Xn(o)||Cc(o);r=()=>new o(...nr(e.deps))}return r}function Ur(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Fp(e){return null!==e&&"object"==typeof e&&Sl in e}function Gr(e){return"function"==typeof e}const Op=function(e,t,n){return function(e,t=null,n=null,r){const o=Np(e,t,n,r);return o._resolveInjectorDefTypes(),o}({name:n},t,e,n)};let pe=(()=>{class e{static create(n,r){return Array.isArray(n)?Op(n,r,""):Op(n.providers,n.parent,n.name||"")}}return e.THROW_IF_NOT_FOUND=Ho,e.NULL=new Sp,e.\u0275prov=te({token:e,providedIn:"any",factory:()=>Y($r)}),e.__NG_ELEMENT_ID__=-1,e})();function Yw(e,t){is(Ll(e)[1],xe())}function ge(e){let t=function(e){return Object.getPrototypeOf(e.prototype).constructor}(e.type),n=!0;const r=[e];for(;t;){let o;if(Vt(e))o=t.\u0275cmp||t.\u0275dir;else{if(t.\u0275cmp)throw new Error("Directives cannot inherit Components");o=t.\u0275dir}if(o){if(n){r.push(o);const s=e;s.inputs=Ic(e.inputs),s.declaredInputs=Ic(e.declaredInputs),s.outputs=Ic(e.outputs);const a=o.hostBindings;a&&e0(e,a);const l=o.viewQuery,c=o.contentQueries;if(l&&Jw(e,l),c&&Xw(e,c),qa(e.inputs,o.inputs),qa(e.declaredInputs,o.declaredInputs),qa(e.outputs,o.outputs),Vt(o)&&o.data.animation){const u=e.data;u.animation=(u.animation||[]).concat(o.data.animation)}}const i=o.features;if(i)for(let s=0;s=0;r--){const o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=cs(o.hostAttrs,n=cs(n,o.hostAttrs))}}(r)}function Ic(e){return e===yr?{}:e===ie?[]:e}function Jw(e,t){const n=e.viewQuery;e.viewQuery=n?(r,o)=>{t(r,o),n(r,o)}:t}function Xw(e,t){const n=e.contentQueries;e.contentQueries=n?(r,o,i)=>{t(r,o,i),n(r,o,i)}:t}function e0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,o)=>{t(r,o),n(r,o)}:t}let Fs=null;function zr(){if(!Fs){const e=ne.Symbol;if(e&&e.iterator)Fs=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;na(Me(R[r.index])):r.index;if(ve(n)){let R=null;if(!a&&l&&(R=function(e,t,n,r){const o=e.cleanup;if(null!=o)for(let i=0;il?a[l]:null}"string"==typeof s&&(i+=2)}return null}(e,t,o,r.index)),null!==R)(R.__ngLastListenerFn__||R).__ngNextListenerFn__=i,R.__ngLastListenerFn__=i,h=!1;else{i=Fc(r,t,d,i,!1);const q=n.listen(E,o,i);f.push(i,q),u&&u.push(o,x,v,v+1)}}else i=Fc(r,t,d,i,!0),E.addEventListener(o,i,s),f.push(i),u&&u.push(o,x,v,s)}else i=Fc(r,t,d,i,!1);const p=r.outputs;let _;if(h&&null!==p&&(_=p[o])){const m=_.length;if(m)for(let E=0;E0;)t=t[15],e--;return t}(e,B.lFrame.contextLView))[8]}(e)}function oi(e,t,n){return Oc(e,"",t,"",n),oi}function Oc(e,t,n,r,o){const i=b(),s=qr(i,t,n,r);return s!==j&&_t(J(),De(),i,e,s,i[G],o,!1),Oc}function xg(e,t,n,r,o){const i=e[n+1],s=null===t;let a=r?Lt(i):yn(i),l=!1;for(;0!==a&&(!1===l||s);){const u=e[a+1];j0(e[a],t)&&(l=!0,e[a+1]=r?tc(u):Xl(u)),a=r?Lt(u):yn(u)}l&&(e[n+1]=r?Xl(i):tc(i))}function j0(e,t){return null===e||null==t||(Array.isArray(e)?e[1]:e)===t||!(!Array.isArray(e)||"string"!=typeof t)&&Nr(e,t)>=0}const Re={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Ng(e){return e.substring(Re.key,Re.keyEnd)}function Rg(e,t){const n=Re.textEnd;return n===t?-1:(t=Re.keyEnd=function(e,t,n){for(;t32;)t++;return t}(e,Re.key=t,n),no(e,t,n))}function no(e,t,n){for(;t=0;n=Rg(t,n))pt(e,Ng(t),!0)}function Lg(e,t){return t>=e.expandoStartIndex}function Bg(e,t,n,r){const o=e.data;if(null===o[n+1]){const i=o[Ze()],s=Lg(e,n);Ug(i,r)&&null===t&&!s&&(t=!1),t=function(e,t,n,r){const o=function(e){const t=B.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let i=r?t.residualClasses:t.residualStyles;if(null===o)0===(r?t.classBindings:t.styleBindings)&&(n=ii(n=Pc(null,e,t,n,r),t.attrs,r),i=null);else{const s=t.directiveStylingLast;if(-1===s||e[s]!==o)if(n=Pc(o,e,t,n,r),null===i){let l=function(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==yn(r))return e[Lt(r)]}(e,t,r);void 0!==l&&Array.isArray(l)&&(l=Pc(null,e,t,l[1],r),l=ii(l,t.attrs,r),function(e,t,n,r){e[Lt(n?t.classBindings:t.styleBindings)]=r}(e,t,r,l))}else i=function(e,t,n){let r;const o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0)&&(c=!0)}else u=n;if(o)if(0!==l){const f=Lt(e[a+1]);e[r+1]=Ts(f,a),0!==f&&(e[f+1]=ec(e[f+1],r)),e[a+1]=function(e,t){return 131071&e|t<<17}(e[a+1],r)}else e[r+1]=Ts(a,0),0!==a&&(e[a+1]=ec(e[a+1],r)),a=r;else e[r+1]=Ts(l,0),0===a?a=r:e[l+1]=ec(e[l+1],r),l=r;c&&(e[r+1]=Xl(e[r+1])),xg(e,u,r,!0),xg(e,u,r,!1),function(e,t,n,r,o){const i=o?e.residualClasses:e.residualStyles;null!=i&&"string"==typeof t&&Nr(i,t)>=0&&(n[r+1]=tc(n[r+1]))}(t,u,e,r,i),s=Ts(a,l),i?t.classBindings=s:t.styleBindings=s}(o,i,t,n,s,r)}}function Pc(e,t,n,r,o){let i=null;const s=n.directiveEnd;let a=n.directiveStylingLast;for(-1===a?a=n.directiveStart:a++;a0;){const l=e[o],c=Array.isArray(l),u=c?l[1]:l,d=null===u;let f=n[o+1];f===j&&(f=d?ie:void 0);let h=d?Il(f,r):u===r?f:void 0;if(c&&!Ls(h)&&(h=Il(l,r)),Ls(h)&&(a=h,s))return a;const p=e[o+1];o=s?Lt(p):yn(p)}if(null!==t){let l=i?t.residualClasses:t.residualStyles;null!=l&&(a=Il(l,r))}return a}function Ls(e){return void 0!==e}function Ug(e,t){return 0!=(e.flags&(t?16:32))}function M(e,t=""){const n=b(),r=J(),o=e+20,i=r.firstCreatePass?Br(r,o,1,t,null):r.data[o],s=n[o]=function(e,t){return ve(e)?e.createText(t):e.createTextNode(t)}(n[G],t);Is(r,n,s,i),Zt(i,!1)}function P(e){return oe("",e,""),P}function oe(e,t,n){const r=b(),o=qr(r,e,t,n);return o!==j&&vn(r,Ze(),o),oe}function Ln(e,t,n){!function(e,t,n,r){const o=J(),i=_n(2);o.firstUpdatePass&&Bg(o,null,i,r);const s=b();if(n!==j&&je(s,i,n)){const a=o.data[Ze()];if(Ug(a,r)&&!Lg(o,i)){let l=r?a.classesWithoutHost:a.stylesWithoutHost;null!==l&&(n=Qa(l,n||"")),Nc(o,a,s,n,r)}else!function(e,t,n,r,o,i,s,a){o===j&&(o=ie);let l=0,c=0,u=0((A=A||{})[A.LocaleId=0]="LocaleId",A[A.DayPeriodsFormat=1]="DayPeriodsFormat",A[A.DayPeriodsStandalone=2]="DayPeriodsStandalone",A[A.DaysFormat=3]="DaysFormat",A[A.DaysStandalone=4]="DaysStandalone",A[A.MonthsFormat=5]="MonthsFormat",A[A.MonthsStandalone=6]="MonthsStandalone",A[A.Eras=7]="Eras",A[A.FirstDayOfWeek=8]="FirstDayOfWeek",A[A.WeekendRange=9]="WeekendRange",A[A.DateFormat=10]="DateFormat",A[A.TimeFormat=11]="TimeFormat",A[A.DateTimeFormat=12]="DateTimeFormat",A[A.NumberSymbols=13]="NumberSymbols",A[A.NumberFormats=14]="NumberFormats",A[A.CurrencyCode=15]="CurrencyCode",A[A.CurrencySymbol=16]="CurrencySymbol",A[A.CurrencyName=17]="CurrencyName",A[A.Currencies=18]="Currencies",A[A.Directionality=19]="Directionality",A[A.PluralCase=20]="PluralCase",A[A.ExtraData=21]="ExtraData",A))();const Bs="en-US";let dm=Bs;function Vc(e){ut(e,"Expected localeId to be defined"),"string"==typeof e&&(dm=e.toLowerCase().replace(/_/g,"-"))}function Bc(e,t,n,r,o){if(e=N(e),Array.isArray(e))for(let i=0;i>20;if(Gr(e)||!e.multi){const h=new Fo(l,o,I),p=jc(a,t,o?u:u+f,d);-1===p?(fs(Po(c,s),i,a),Hc(i,e,t.length),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(h),s.push(h)):(n[p]=h,s[p]=h)}else{const h=jc(a,t,u+f,d),p=jc(a,t,u,u+f),_=h>=0&&n[h],m=p>=0&&n[p];if(o&&!m||!o&&!_){fs(Po(c,s),i,a);const E=function(e,t,n,r,o){const i=new Fo(e,n,I);return i.multi=[],i.index=t,i.componentProviders=0,Pm(i,o,r&&!n),i}(o?y1:_1,n.length,o,r,l);!o&&m&&(n[p].providerFactory=E),Hc(i,e,t.length,0),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(E),s.push(E)}else Hc(i,e,h>-1?h:p,Pm(n[o?p:h],l,!o&&r));!o&&r&&m&&n[p].componentProviders++}}}function Hc(e,t,n,r){const o=Gr(t);if(o||function(e){return!!e.useClass}(t)){const s=(t.useClass||t).prototype.ngOnDestroy;if(s){const a=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){const l=a.indexOf(n);-1===l?a.push(n,[r,s]):a[l+1].push(r,s)}else a.push(n,s)}}}function Pm(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function jc(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>function(e,t,n){const r=J();if(r.firstCreatePass){const o=Vt(e);Bc(n,r.data,r.blueprint,o,!0),Bc(t,r.data,r.blueprint,o,!1)}}(r,o?o(e):e,t)}}class Vm{}const Lm="ngComponent";class D1{resolveComponentFactory(t){throw function(e){const t=Error(`No component factory found for ${W(e)}. Did you add it to @NgModule.entryComponents?`);return t[Lm]=e,t}(t)}}let io=(()=>{class e{}return e.NULL=new D1,e})();function Gs(...e){}function so(e,t){return new $e(bt(e,t))}const w1=function(){return so(xe(),b())};let $e=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=w1,e})();class zs{}let cr=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>M1(),e})();const M1=function(){const e=b(),n=ht(xe().index,e);return function(e){return e[G]}(Yt(n)?n:e)};let Gc=(()=>{class e{}return e.\u0275prov=te({token:e,providedIn:"root",factory:()=>null}),e})();class Ws{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const Hm=new Ws("12.2.6");class jm{constructor(){}supports(t){return ni(t)}create(t){return new x1(t)}}const S1=(e,t)=>t;class x1{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||S1}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){const s=!r||n&&n.currentIndex{s=this._trackByFn(o,a),null!==n&&Object.is(n.trackById,s)?(r&&(n=this._verifyReinsertion(n,a,s,o)),Object.is(n.item,a)||this._addIdentityChange(n,a)):(n=this._mismatch(n,a,s,o),r=!0),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return null===t?i=this._itTail:(i=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,o))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new N1(n,r),i,o),t}_verifyReinsertion(t,n,r,o){let i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==i?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const o=t._prevRemoved,i=t._nextRemoved;return null===o?this._removalsHead=i:o._nextRemoved=i,null===i?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const o=null===n?this._itHead:n._next;return t._next=o,t._prev=n,null===o?this._itTail=t:o._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new $m),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new $m),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class N1{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class R1{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class $m{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new R1,this.map.set(n,r)),r.add(t)}get(t,n){const o=this.map.get(t);return o?o.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Um(e,t,n){const r=e.previousIndex;if(null===r)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const o=this._records.get(t);this._maybeAddToChanges(o,n);const i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}const r=new O1(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class O1{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function zm(){return new ui([new jm])}let ui=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||zm()),deps:[[e,new rr,new en]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(null!=r)return r;throw new Error(`Cannot find a differ supporting object '${n}' of type '${function(e){return e.name||typeof e}(n)}'`)}}return e.\u0275prov=te({token:e,providedIn:"root",factory:zm}),e})();function Wm(){return new ao([new Gm])}let ao=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Wm()),deps:[[e,new rr,new en]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(r)return r;throw new Error(`Cannot find a differ supporting object '${n}'`)}}return e.\u0275prov=te({token:e,providedIn:"root",factory:Wm}),e})();function qs(e,t,n,r,o=!1){for(;null!==n;){const i=t[n.index];if(null!==i&&r.push(Me(i)),Pt(i))for(let a=10;a-1&&(ql(t,r),tr(n,r))}this._attachedToViewContainer=!1}Oh(this._lView[1],this._lView)}onDestroy(t){!function(e,t,n,r){const o=wp(t);null===n?o.push(r):(o.push(n),e.firstCreatePass&&Ip(e).push(r,o.length-1))}(this._lView[1],this._lView,null,t)}markForCheck(){pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){mc(this._lView[1],this._lView,this.context)}checkNoChanges(){!function(e,t,n){ns(!0);try{mc(e,t,n)}finally{ns(!1)}}(this._lView[1],this._lView,this.context)}attachToViewContainerRef(){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function(e,t){Yo(e,t,t[G],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}}class V1 extends di{constructor(t){super(t),this._view=t}detectChanges(){Ep(this._view)}checkNoChanges(){!function(e){ns(!0);try{Ep(e)}finally{ns(!1)}}(this._view)}get context(){return null}}const $1=[new Gm],G1=new ui([new jm]),z1=new ao($1),q1=function(){return function(e,t){return 4&e.type?new K1(t,e,so(e,t)):null}(xe(),b())};let bn=(()=>{class e{}return e.__NG_ELEMENT_ID__=q1,e})();const Q1=bn,K1=class extends Q1{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t){const n=this._declarationTContainer.tViews,r=Zo(this._declarationLView,n,t,16,null,n.declTNode,null,null,null,null);r[17]=this._declarationLView[this._declarationTContainer.index];const i=this._declarationLView[19];return null!==i&&(r[19]=i.createEmbeddedView(n)),Jo(n,r,t),new di(r)}};class ur{}const X1=function(){return function(e,t){let n;const r=t[e.index];if(Pt(r))n=r;else{let o;if(8&e.type)o=Me(r);else{const i=t[G];o=i.createComment("");const s=bt(e,t);sr(i,ws(i,s),o,function(e,t){return ve(e)?e.nextSibling(t):t.nextSibling}(i,s),!1)}t[e.index]=n=bp(r,t,o,e),Ns(t,n)}return new qm(n,e,t)}(xe(),b())};let dn=(()=>{class e{}return e.__NG_ELEMENT_ID__=X1,e})();const tM=dn,qm=class extends tM{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return so(this._hostTNode,this._hostLView)}get injector(){return new Tr(this._hostTNode,this._hostLView)}get parentInjector(){const t=ds(this._hostTNode,this._hostLView);if(Lf(t)){const n=Mr(t,this._hostLView),r=Ir(t);return new Tr(n[1].data[r+8],n)}return new Tr(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=Qm(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){const o=t.createEmbeddedView(n||{});return this.insert(o,r),o}createComponent(t,n,r,o,i){const s=r||this.parentInjector;if(!i&&null==t.ngModule&&s){const l=s.get(ur,null);l&&(i=l)}const a=t.create(s,o,void 0,i);return this.insert(a.hostView,n),a}insert(t,n){const r=t._lView,o=r[1];if(function(e){return Pt(e[3])}(r)){const u=this.indexOf(t);if(-1!==u)this.detach(u);else{const d=r[3],f=new qm(d,d[6],d[3]);f.detach(f.indexOf(t))}}const i=this._adjustIndex(n),s=this._lContainer;!function(e,t,n,r){const o=10+r,i=n.length;r>0&&(n[o-1][4]=t),rMh});class __ extends Vm{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function(e){return e.map(HE).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return m_(this.componentDef.inputs)}get outputs(){return m_(this.componentDef.outputs)}create(t,n,r,o){const i=(o=o||this.ngModule)?function(e,t){return{get:(n,r,o)=>{const i=e.get(n,fo,o);return i!==fo||r===fo?i:t.get(n,r,o)}}}(t,o.injector):t,s=i.get(zs,Df),a=i.get(Gc,null),l=s.createRenderer(null,this.componentDef),c=this.componentDef.selectors[0][0]||"div",u=r?function(e,t,n){if(ve(e))return e.selectRootElement(t,n===Se.ShadowDom);let r="string"==typeof t?e.querySelector(t):t;return r.textContent="",r}(l,r,this.componentDef.encapsulation):Wl(s.createRenderer(null,this.componentDef),c,function(e){const t=e.toLowerCase();return"svg"===t?Cf:"math"===t?"http://www.w3.org/1998/MathML/":null}(c)),d=this.componentDef.onPush?576:528,f=function(e,t){return{components:[],scheduler:e||Mh,clean:ww,playerHandler:t||null,flags:0}}(),h=xs(0,null,null,1,0,null,null,null,null,null),p=Zo(null,h,f,d,null,null,s,l,a,i);let _,m;rs(p);try{const E=function(e,t,n,r,o,i){const s=n[1];n[20]=e;const l=Br(s,20,2,"#host",null),c=l.mergedAttrs=t.hostAttrs;null!==c&&(Rs(l,c,!0),null!==e&&(ls(o,e,c),null!==l.classes&&Jl(o,e,l.classes),null!==l.styles&&Wh(o,e,l.styles)));const u=r.createRenderer(e,t),d=Zo(n,dp(t),null,t.onPush?64:16,n[20],l,r,u,i||null,null);return s.firstCreatePass&&(fs(Po(l,n),s,t.type),Cp(s,l),vp(l,n.length,1)),Ns(n,d),n[20]=d}(u,this.componentDef,p,s,l);if(u)if(r)ls(l,u,["ng-version",Hm.full]);else{const{attrs:v,classes:x}=function(e){const t=[],n=[];let r=1,o=2;for(;r0&&Jl(l,u,x.join(" "))}if(m=al(h,20),void 0!==n){const v=m.projection=[];for(let x=0;xl(s,t)),t.contentQueries){const l=xe();t.contentQueries(1,s,l.directiveStart)}const a=xe();return!i.firstCreatePass||null===t.hostBindings&&null===t.hostAttrs||(Fn(a.index),_p(n[1],a,0,a.directiveStart,a.directiveEnd,t),yp(t,s)),s}(E,this.componentDef,p,f,[Yw]),Jo(h,p,null)}finally{os()}return new eT(this.componentType,_,so(m,p),p,m)}}class eT extends class{}{constructor(t,n,r,o,i){super(),this.location=r,this._rootLView=o,this._tNode=i,this.instance=n,this.hostView=this.changeDetectorRef=new V1(o),this.componentType=t}get injector(){return new Tr(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}}const ho=new Map;class rT extends ur{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new g_(this);const r=Ct(t),o=function(e){return e[iD]||null}(t);o&&Vc(o),this._bootstrapComponents=rn(r.bootstrap),this._r3Injector=Np(t,n,[{provide:ur,useValue:this},{provide:io,useValue:this.componentFactoryResolver}],W(t)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(t)}get(t,n=pe.THROW_IF_NOT_FOUND,r=O.Default){return t===pe||t===ur||t===$r?this:this._r3Injector.get(t,n,r)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class ou extends class{}{constructor(t){super(),this.moduleType=t,null!==Ct(t)&&function(e){const t=new Set;!function n(r){const o=Ct(r,!0),i=o.id;null!==i&&(function(e,t,n){if(t&&t!==n)throw new Error(`Duplicate module registered for ${e} - ${W(t)} vs ${W(t.name)}`)}(i,ho.get(i),r),ho.set(i,r));const s=rn(o.imports);for(const a of s)t.has(a)||(t.add(a),n(a))}(e)}(t)}create(t){return new rT(this.moduleType,t)}}function iu(e,t,n,r){return function(e,t,n,r,o,i){const s=t+n;return je(e,s,o)?sn(e,s+1,i?r.call(i,o):r(o)):Ci(e,s+1)}(b(),Ye(),e,t,n,r)}function su(e,t,n,r,o){return function(e,t,n,r,o,i,s){const a=t+n;return ar(e,a,o,i)?sn(e,a+2,s?r.call(s,o,i):r(o,i)):Ci(e,a+2)}(b(),Ye(),e,t,n,r,o)}function st(e,t,n,r,o,i){return b_(b(),Ye(),e,t,n,r,o,i)}function Ci(e,t){const n=e[t];return n===j?void 0:n}function b_(e,t,n,r,o,i,s,a){const l=t+n;return function(e,t,n,r,o){const i=ar(e,t,n,r);return je(e,t+2,o)||i}(e,l,o,i,s)?sn(e,l+3,a?r.call(a,o,i,s):r(o,i,s)):Ci(e,l+3)}function M_(e,t,n,r,o){const i=e+20,s=b(),a=function(e,t){return e[t]}(s,i);return function(e,t){Ht.isWrapped(t)&&(t=Ht.unwrap(t),e[B.lFrame.bindingIndex]=j);return t}(s,function(e,t){return e[1].data[t].pure}(s,i)?b_(s,Ye(),t,a.transform,n,r,o,a):a.transform(n,r,o))}function au(e){return t=>{setTimeout(e,void 0,t)}}const ze=class extends Ga{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){var o,i,s;let a=t,l=n||(()=>null),c=r;if(t&&"object"==typeof t){const d=t;a=null===(o=d.next)||void 0===o?void 0:o.bind(d),l=null===(i=d.error)||void 0===i?void 0:i.bind(d),c=null===(s=d.complete)||void 0===s?void 0:s.bind(d)}this.__isAsync&&(l=au(l),a&&(a=au(a)),c&&(c=au(c)));const u=super.subscribe({next:a,error:l,complete:c});return t instanceof Ee&&t.add(u),u}};Symbol;const na=new X("Application Initializer");let go=(()=>{class e{constructor(n){this.appInits=n,this.resolve=Gs,this.reject=Gs,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,o)=>{this.resolve=r,this.reject=o})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let o=0;o{i.subscribe({complete:a,error:l})});n.push(s)}}Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(Y(na,8))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Ei=new X("AppId"),rA={provide:Ei,useFactory:function(){return`${yu()}${yu()}${yu()}`},deps:[]};function yu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const K_=new X("Platform Initializer"),Cu=new X("Platform ID"),oA=new X("appBootstrapListener");let vu=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Hn=new X("LocaleId"),Y_=new X("DefaultCurrencyCode");class sA{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}const Du=function(e){return new ou(e)},aA=Du,lA=function(e){return Promise.resolve(Du(e))},Z_=function(e){const t=Du(e),r=rn(Ct(e).declarations).reduce((o,i)=>{const s=Ke(i);return s&&o.push(new __(s)),o},[]);return new sA(t,r)},cA=Z_,uA=function(e){return Promise.resolve(Z_(e))};let oa=(()=>{class e{constructor(){this.compileModuleSync=aA,this.compileModuleAsync=lA,this.compileModuleAndAllComponentsSync=cA,this.compileModuleAndAllComponentsAsync=uA}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const hA=(()=>Promise.resolve(0))();function bu(e){"undefined"==typeof Zone?hA.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class Le{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new ze(!1),this.onMicrotaskEmpty=new ze(!1),this.onStable=new ze(!1),this.onError=new ze(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function(){let e=ne.requestAnimationFrame,t=ne.cancelAnimationFrame;if("undefined"!=typeof Zone&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function(e){const t=()=>{!function(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(ne,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,wu(e),e.isCheckStableRunning=!0,Eu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),wu(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,s,a)=>{try{return J_(e),n.invokeTask(o,i,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),X_(e)}},onInvoke:(n,r,o,i,s,a,l)=>{try{return J_(e),n.invoke(o,i,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&t(),X_(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,wu(e),Eu(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Le.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(Le.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,gA,Gs,Gs);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const gA={};function Eu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function wu(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function J_(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function X_(e){e._nesting--,Eu(e)}class yA{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new ze,this.onMicrotaskEmpty=new ze,this.onStable=new ze,this.onError=new ze}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}let Iu=(()=>{class e{constructor(n){this._ngZone=n,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Le.assertNotInAngularZone(),bu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())bu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(n,r,o){return[]}}return e.\u0275fac=function(n){return new(n||e)(Y(Le))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),ey=(()=>{class e{constructor(){this._applications=new Map,Mu.addToWindow(this)}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Mu.findTestabilityInTree(this,n,r)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();class CA{addToWindow(t){}findTestabilityInTree(t,n,r){return null}}let Mu=new CA,ny=!1;let zt;const oy=new X("AllowMultipleToken");function iy(e,t,n=[]){const r=`Platform: ${t}`,o=new X(r);return(i=[])=>{let s=sy();if(!s||s.injector.get(oy,!1))if(e)e(n.concat(i).concat({provide:o,useValue:!0}));else{const a=n.concat(i).concat({provide:o,useValue:!0},{provide:Xo,useValue:"platform"});!function(e){if(zt&&!zt.destroyed&&!zt.injector.get(oy,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");zt=e.get(ay);const t=e.get(K_,null);t&&t.forEach(n=>n())}(pe.create({providers:a,name:r}))}return function(e){const t=sy();if(!t)throw new Error("No platform exists!");if(!t.injector.get(e,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return t}(o)}}function sy(){return zt&&!zt.destroyed?zt:null}let ay=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const a=function(e,t){let n;return n="noop"===e?new yA:("zone.js"===e?void 0:e)||new Le({enableLongStackTrace:(ny=!0,!0),shouldCoalesceEventChangeDetection:!!(null==t?void 0:t.ngZoneEventCoalescing),shouldCoalesceRunChangeDetection:!!(null==t?void 0:t.ngZoneRunCoalescing)}),n}(r?r.ngZone:void 0,{ngZoneEventCoalescing:r&&r.ngZoneEventCoalescing||!1,ngZoneRunCoalescing:r&&r.ngZoneRunCoalescing||!1}),l=[{provide:Le,useValue:a}];return a.run(()=>{const c=pe.create({providers:l,parent:this.injector,name:n.moduleType.name}),u=n.create(c),d=u.injector.get(ir,null);if(!d)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return a.runOutsideAngular(()=>{const f=a.onError.subscribe({next:h=>{d.handleError(h)}});u.onDestroy(()=>{Tu(this._modules,u),f.unsubscribe()})}),function(e,t,n){try{const r=n();return Vs(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(d,a,()=>{const f=u.injector.get(go);return f.runInitializers(),f.donePromise.then(()=>(Vc(u.injector.get(Hn,Bs)||Bs),this._moduleDoBootstrap(u),u))})})}bootstrapModule(n,r=[]){const o=ly({},r);return function(e,t,n){const r=new ou(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(wi);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new Error(`The module ${W(n.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(n=>n.destroy()),this._destroyListeners.forEach(n=>n()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(Y(pe))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function ly(e,t){return Array.isArray(t)?t.reduce(ly,e):Object.assign(Object.assign({},e),t)}let wi=(()=>{class e{constructor(n,r,o,i,s){this._zone=n,this._injector=r,this._exceptionHandler=o,this._componentFactoryResolver=i,this._initStatus=s,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const a=new qe(c=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{c.next(this._stable),c.complete()})}),l=new qe(c=>{let u;this._zone.runOutsideAngular(()=>{u=this._zone.onStable.subscribe(()=>{Le.assertNotInAngularZone(),bu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,c.next(!0))})})});const d=this._zone.onUnstable.subscribe(()=>{Le.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{c.next(!1)}))});return()=>{u.unsubscribe(),d.unsubscribe()}});this.isStable=function(...e){let t=Number.POSITIVE_INFINITY,n=null,r=e[e.length-1];return function(e){return e&&"function"==typeof e.schedule}(r)?(n=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(t=e.pop())):"number"==typeof r&&(t=e.pop()),null===n&&1===e.length&&e[0]instanceof qe?e[0]:Fv(t)(function(e,t){return t?ef(e,t):new qe(Yd(e))}(e,n))}(a,l.pipe(e=>nf()(function(e,t){return function(r){let o;o="function"==typeof e?e:function(){return e};const i=Object.create(r,Bv);return i.source=r,i.subjectFactory=o,i}}(Gv)(e))))}bootstrap(n,r){if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");let o;o=n instanceof Vm?n:this._componentFactoryResolver.resolveComponentFactory(n),this.componentTypes.push(o.componentType);const i=function(e){return e.isBoundToModule}(o)?void 0:this._injector.get(ur),a=o.create(pe.NULL,[],r||o.selector,i),l=a.location.nativeElement,c=a.injector.get(Iu,null),u=c&&a.injector.get(ey);return c&&u&&u.registerApplication(l,c),a.onDestroy(()=>{this.detachView(a.hostView),Tu(this.components,a),u&&u.unregisterApplication(l)}),this._loadComponent(a),a}tick(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Tu(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(oA,[]).concat(this._bootstrapListeners).forEach(o=>o(n))}ngOnDestroy(){this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return e.\u0275fac=function(n){return new(n||e)(Y(Le),Y(pe),Y(ir),Y(io),Y(go))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function Tu(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const WA=iy(null,"core",[{provide:Cu,useValue:"unknown"},{provide:ay,deps:[pe]},{provide:ey,deps:[]},{provide:vu,deps:[]}]),ZA=[{provide:wi,useClass:wi,deps:[Le,pe,ir,io,go]},{provide:ZM,deps:[Le],useFactory:function(e){let t=[];return e.onStable.subscribe(()=>{for(;t.length;)t.pop()()}),function(n){t.push(n)}}},{provide:go,useClass:go,deps:[[new en,na]]},{provide:oa,useClass:oa,deps:[]},rA,{provide:ui,useFactory:function(){return G1},deps:[]},{provide:ao,useFactory:function(){return z1},deps:[]},{provide:Hn,useFactory:function(e){return Vc(e=e||"undefined"!=typeof $localize&&$localize.locale||Bs),e},deps:[[new Uo(Hn),new en,new rr]]},{provide:Y_,useValue:"USD"}];let XA=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(Y(wi))},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:ZA}),e})(),pa=null;function gr(){return pa}const nt=new X("DocumentToken");var Te=(()=>((Te=Te||{})[Te.Zero=0]="Zero",Te[Te.One=1]="One",Te[Te.Two=2]="Two",Te[Te.Few=3]="Few",Te[Te.Many=4]="Many",Te[Te.Other=5]="Other",Te))();const ax=function(e){return function(e){const t=function(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=um(t);if(n)return n;const r=t.split("-")[0];if(n=um(r),n)return n;if("en"===r)return DI;throw new Error(`Missing locale data for the locale "${e}".`)}(e)[A.PluralCase]};class wa{}let Vx=(()=>{class e extends wa{constructor(n){super(),this.locale=n}getPluralCategory(n,r){switch(ax(r||this.locale)(n)){case Te.Zero:return"zero";case Te.One:return"one";case Te.Two:return"two";case Te.Few:return"few";case Te.Many:return"many";default:return"other"}}}return e.\u0275fac=function(n){return new(n||e)(Y(Hn))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),Ni=(()=>{class e{constructor(n,r,o,i){this._iterableDiffers=n,this._keyValueDiffers=r,this._ngEl=o,this._renderer=i,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(n){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof n?n.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(n){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof n?n.split(/\s+/):n,this._rawClass&&(ni(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const n=this._iterableDiffer.diff(this._rawClass);n&&this._applyIterableChanges(n)}else if(this._keyValueDiffer){const n=this._keyValueDiffer.diff(this._rawClass);n&&this._applyKeyValueChanges(n)}}_applyKeyValueChanges(n){n.forEachAddedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachChangedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachRemovedItem(r=>{r.previousValue&&this._toggleClass(r.key,!1)})}_applyIterableChanges(n){n.forEachAddedItem(r=>{if("string"!=typeof r.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${W(r.item)}`);this._toggleClass(r.item,!0)}),n.forEachRemovedItem(r=>this._toggleClass(r.item,!1))}_applyClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!0)):Object.keys(n).forEach(r=>this._toggleClass(r,!!n[r])))}_removeClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!1)):Object.keys(n).forEach(r=>this._toggleClass(r,!1)))}_toggleClass(n,r){(n=n.trim())&&n.split(/\s+/g).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}}return e.\u0275fac=function(n){return new(n||e)(I(ui),I(ao),I($e),I(cr))},e.\u0275dir=L({type:e,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"}}),e})();class Bx{constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Yu=(()=>{class e{constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;if(!this._differ&&n)try{this._differ=this._differs.find(n).create(this.ngForTrackBy)}catch(r){throw new Error(`Cannot find a differ supporting object '${n}' of type '${function(e){return e.name||typeof e}(n)}'. NgFor only supports binding to Iterables such as Arrays.`)}}if(this._differ){const n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){const r=[];n.forEachOperation((o,i,s)=>{if(null==o.previousIndex){const a=this._viewContainer.createEmbeddedView(this._template,new Bx(null,this._ngForOf,-1,-1),null===s?void 0:s),l=new Wy(o,a);r.push(l)}else if(null==s)this._viewContainer.remove(null===i?void 0:i);else if(null!==i){const a=this._viewContainer.get(i);this._viewContainer.move(a,s);const l=new Wy(o,a);r.push(l)}});for(let o=0;o{this._viewContainer.get(o.currentIndex).context.$implicit=o.item})}_perViewChange(n,r){n.context.$implicit=r.item}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(I(dn),I(bn),I(ui))},e.\u0275dir=L({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}}),e})();class Wy{constructor(t,n){this.record=t,this.view=n}}let yo=(()=>{class e{constructor(n,r){this._viewContainer=n,this._context=new jx,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){qy("ngIfThen",n),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){qy("ngIfElse",n),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(I(dn),I(bn))},e.\u0275dir=L({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}}),e})();class jx{constructor(){this.$implicit=null,this.ngIf=null}}function qy(e,t){if(t&&!t.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${W(t)}'.`)}let Yy=(()=>{class e{transform(n,r,o){if(null==n)return null;if(!this.supports(n))throw function(e,t){return Error(`InvalidPipeArgument: '${t}' for pipe '${W(e)}'`)}(e,n);return n.slice(r,o)}supports(n){return"string"==typeof n||Array.isArray(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275pipe=ot({name:"slice",type:e,pure:!1}),e})(),fN=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:[{provide:wa,useClass:Vx}]}),e})();class td extends class extends class{}{constructor(){super(...arguments),this.supportsDOMEvents=!0}}{static makeCurrent(){!function(e){pa||(pa=e)}(new td)}onAndCancel(t,n,r){return t.addEventListener(n,r,!1),()=>{t.removeEventListener(n,r,!1)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=(Ri=Ri||document.querySelector("base"),Ri?Ri.getAttribute("href"):null);return null==n?null:function(e){Ia=Ia||document.createElement("a"),Ia.setAttribute("href",e);const t=Ia.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){Ri=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let Ia,Ri=null;const Xy=new X("TRANSITION_ID"),bN=[{provide:na,useFactory:function(e,t,n){return()=>{n.get(go).donePromise.then(()=>{const r=gr(),o=t.querySelectorAll(`style[ng-transition="${e}"]`);for(let i=0;i{const i=t.findTestabilityInTree(r,o);if(null==i)throw new Error("Could not find testability for element.");return i},ne.getAllAngularTestabilities=()=>t.getAllTestabilities(),ne.getAllAngularRootElements=()=>t.getAllRootElements(),ne.frameworkStabilizers||(ne.frameworkStabilizers=[]),ne.frameworkStabilizers.push(r=>{const o=ne.getAllAngularTestabilities();let i=o.length,s=!1;const a=function(l){s=s||l,i--,0==i&&r(s)};o.forEach(function(l){l.whenStable(a)})})}findTestabilityInTree(t,n,r){if(null==n)return null;const o=t.getTestability(n);return null!=o?o:r?gr().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null}}let EN=(()=>{class e{build(){return new XMLHttpRequest}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Fi=new X("EventManagerPlugins");let Ta=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>o.manager=this),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}addGlobalEventListener(n,r,o){return this._findPluginFor(r).addGlobalEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){const r=this._eventNameToPlugin.get(n);if(r)return r;const o=this._plugins;for(let i=0;i{class e{constructor(){this._stylesSet=new Set}addStyles(n){const r=new Set;n.forEach(o=>{this._stylesSet.has(o)||(this._stylesSet.add(o),r.add(o))}),this.onStylesAdded(r)}onStylesAdded(n){}getAllStyles(){return Array.from(this._stylesSet)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),Oi=(()=>{class e extends tC{constructor(n){super(),this._doc=n,this._hostNodes=new Map,this._hostNodes.set(n.head,[])}_addStylesToHost(n,r,o){n.forEach(i=>{const s=this._doc.createElement("style");s.textContent=i,o.push(r.appendChild(s))})}addHost(n){const r=[];this._addStylesToHost(this._stylesSet,n,r),this._hostNodes.set(n,r)}removeHost(n){const r=this._hostNodes.get(n);r&&r.forEach(nC),this._hostNodes.delete(n)}onStylesAdded(n){this._hostNodes.forEach((r,o)=>{this._addStylesToHost(n,o,r)})}ngOnDestroy(){this._hostNodes.forEach(n=>n.forEach(nC))}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function nC(e){gr().remove(e)}const od={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},id=/%COMP%/g;function Aa(e,t,n){for(let r=0;r{if("__ngUnwrap__"===t)return e;!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}let sd=(()=>{class e{constructor(n,r,o){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.rendererByCompId=new Map,this.defaultRenderer=new ad(n)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;switch(r.encapsulation){case Se.Emulated:{let o=this.rendererByCompId.get(r.id);return o||(o=new LN(this.eventManager,this.sharedStylesHost,r,this.appId),this.rendererByCompId.set(r.id,o)),o.applyToHost(n),o}case 1:case Se.ShadowDom:return new BN(this.eventManager,this.sharedStylesHost,n,r);default:if(!this.rendererByCompId.has(r.id)){const o=Aa(r.id,r.styles,[]);this.sharedStylesHost.addStyles(o),this.rendererByCompId.set(r.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return e.\u0275fac=function(n){return new(n||e)(Y(Ta),Y(Oi),Y(Ei))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();class ad{constructor(t){this.eventManager=t,this.data=Object.create(null)}destroy(){}createElement(t,n){return n?document.createElementNS(od[n]||n,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,n){t.appendChild(n)}insertBefore(t,n,r){t&&t.insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?document.querySelector(t):t;if(!r)throw new Error(`The selector "${t}" did not match any elements`);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=od[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=od[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(mt.DashCase|mt.Important)?t.style.setProperty(n,r,o&mt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&mt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,n,iC(r)):this.eventManager.addEventListener(t,n,iC(r))}}class LN extends ad{constructor(t,n,r,o){super(t),this.component=r;const i=Aa(o+"-"+r.id,r.styles,[]);n.addStyles(i),this.contentAttr=function(e){return"_ngcontent-%COMP%".replace(id,e)}(o+"-"+r.id),this.hostAttr=function(e){return"_nghost-%COMP%".replace(id,e)}(o+"-"+r.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}class BN extends ad{constructor(t,n,r,o){super(t),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const i=Aa(o.id,o.styles,[]);for(let s=0;s{class e extends rd{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const lC=["alt","control","meta","shift"],qN={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},cC={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"},QN={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let KN=(()=>{class e extends rd{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),s=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>gr().onAndCancel(n,i.domEventName,s))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let s="";if(lC.forEach(l=>{const c=r.indexOf(l);c>-1&&(r.splice(c,1),s+=l+".")}),s+=i,0!=r.length||0===i.length)return null;const a={};return a.domEventName=o,a.fullKey=s,a}static getEventFullKey(n){let r="",o=function(e){let t=e.key;if(null==t){if(t=e.keyIdentifier,null==t)return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&cC.hasOwnProperty(t)&&(t=cC[t]))}return qN[t]||t}(n);return o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),lC.forEach(i=>{i!=o&&QN[i](n)&&(r+=i+".")}),r+=o,r}static eventCallback(n,r,o){return i=>{e.getEventFullKey(i)===n&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){switch(n){case"esc":return"escape";default:return n}}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const rR=iy(WA,"browser",[{provide:Cu,useValue:"browser"},{provide:K_,useValue:function(){td.makeCurrent(),nd.init()},multi:!0},{provide:nt,useFactory:function(){return function(e){il=e}(document),document},deps:[]}]),oR=[[],{provide:Xo,useValue:"root"},{provide:ir,useFactory:function(){return new ir},deps:[]},{provide:Fi,useClass:HN,multi:!0,deps:[nt,Le,Cu]},{provide:Fi,useClass:KN,multi:!0,deps:[nt]},[],{provide:sd,useClass:sd,deps:[Ta,Oi,Ei]},{provide:zs,useExisting:sd},{provide:tC,useExisting:Oi},{provide:Oi,useClass:Oi,deps:[nt]},{provide:Iu,useClass:Iu,deps:[Le]},{provide:Ta,useClass:Ta,deps:[Fi,Le]},{provide:class{},useClass:EN,deps:[]},[]];let iR=(()=>{class e{constructor(n){if(n)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(n){return{ngModule:e,providers:[{provide:Ei,useValue:n.appId},{provide:Xy,useExisting:Ei},bN]}}}return e.\u0275fac=function(n){return new(n||e)(Y(e,12))},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:oR,imports:[fN,XA]}),e})();function Sa(e,t){return new qe(n=>{const r=e.length;if(0===r)return void n.complete();const o=new Array(r);let i=0,s=0;for(let a=0;a{c||(c=!0,s++),o[a]=u},error:u=>n.error(u),complete:()=>{i++,(i===r||!c)&&(s===r&&n.next(t?t.reduce((u,d,f)=>(u[d]=o[f],u),{}):o),n.complete())}}))}})}"undefined"!=typeof window&&window;let dC=(()=>{class e{constructor(n,r){this._renderer=n,this._elementRef=r,this.onChange=o=>{},this.onTouched=()=>{}}setProperty(n,r){this._renderer.setProperty(this._elementRef.nativeElement,n,r)}registerOnTouched(n){this.onTouched=n}registerOnChange(n){this.onChange=n}setDisabledState(n){this.setProperty("disabled",n)}}return e.\u0275fac=function(n){return new(n||e)(I(cr),I($e))},e.\u0275dir=L({type:e}),e})(),mr=(()=>{class e extends dC{}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,features:[ge]}),e})();const fn=new X("NgValueAccessor"),gR={provide:fn,useExisting:ue(()=>Pi),multi:!0},_R=new X("CompositionEventMode");let Pi=(()=>{class e extends dC{constructor(n,r,o){super(n,r),this._compositionMode=o,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const e=gr()?gr().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}writeValue(n){this.setProperty("value",null==n?"":n)}_handleInput(n){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(n)}_compositionStart(){this._composing=!0}_compositionEnd(n){this._composing=!1,this._compositionMode&&this.onChange(n)}}return e.\u0275fac=function(n){return new(n||e)(I(cr),I($e),I(_R,8))},e.\u0275dir=L({type:e,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(n,r){1&n&&Z("input",function(i){return r._handleInput(i.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(i){return r._compositionEnd(i.target.value)})},features:[_e([gR]),ge]}),e})();const We=new X("NgValidators"),Gn=new X("NgAsyncValidators");function bC(e){return null!=e}function EC(e){const t=Vs(e)?Wa(e):e;return Rc(t),t}function wC(e){let t={};return e.forEach(n=>{t=null!=n?Object.assign(Object.assign({},t),n):t}),0===Object.keys(t).length?null:t}function IC(e,t){return t.map(n=>n(e))}function MC(e){return e.map(t=>function(e){return!e.validate}(t)?t:n=>t.validate(n))}function fd(e){return null!=e?function(e){if(!e)return null;const t=e.filter(bC);return 0==t.length?null:function(n){return wC(IC(n,t))}}(MC(e)):null}function hd(e){return null!=e?function(e){if(!e)return null;const t=e.filter(bC);return 0==t.length?null:function(n){return function(...e){if(1===e.length){const t=e[0];if($a(t))return Sa(t,null);if(Ua(t)&&Object.getPrototypeOf(t)===Object.prototype){const n=Object.keys(t);return Sa(n.map(r=>t[r]),n)}}if("function"==typeof e[e.length-1]){const t=e.pop();return Sa(e=1===e.length&&$a(e[0])?e[0]:e,null).pipe(za(n=>t(...n)))}return Sa(e,null)}(IC(n,t).map(EC)).pipe(za(wC))}}(MC(e)):null}function SC(e,t){return null===e?[t]:Array.isArray(e)?[...e,t]:[e,t]}function pd(e){return e?Array.isArray(e)?e:[e]:[]}function xa(e,t){return Array.isArray(e)?e.includes(t):e===t}function RC(e,t){const n=pd(t);return pd(e).forEach(o=>{xa(n,o)||n.push(o)}),n}function FC(e,t){return pd(t).filter(n=>!xa(e,n))}let OC=(()=>{class e{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(n){this._rawValidators=n||[],this._composedValidatorFn=fd(this._rawValidators)}_setAsyncValidators(n){this._rawAsyncValidators=n||[],this._composedAsyncValidatorFn=hd(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(n){this._onDestroyCallbacks.push(n)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(n=>n()),this._onDestroyCallbacks=[]}reset(n){this.control&&this.control.reset(n)}hasError(n,r){return!!this.control&&this.control.hasError(n,r)}getError(n,r){return this.control?this.control.getError(n,r):null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275dir=L({type:e}),e})(),rt=(()=>{class e extends OC{get formDirective(){return null}get path(){return null}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,features:[ge]}),e})();class Wn extends OC{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}let gd=(()=>{class e extends class{constructor(t){this._cd=t}is(t){var n,r,o;return"submitted"===t?!!(null===(n=this._cd)||void 0===n?void 0:n.submitted):!!(null===(o=null===(r=this._cd)||void 0===r?void 0:r.control)||void 0===o?void 0:o[t])}}{constructor(n){super(n)}}return e.\u0275fac=function(n){return new(n||e)(I(Wn,2))},e.\u0275dir=L({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(n,r){2&n&&ks("ng-untouched",r.is("untouched"))("ng-touched",r.is("touched"))("ng-pristine",r.is("pristine"))("ng-dirty",r.is("dirty"))("ng-valid",r.is("valid"))("ng-invalid",r.is("invalid"))("ng-pending",r.is("pending"))},features:[ge]}),e})();function Vi(e,t){(function(e,t){const n=function(e){return e._rawValidators}(e);null!==t.validator?e.setValidators(SC(n,t.validator)):"function"==typeof n&&e.setValidators([n]);const r=function(e){return e._rawAsyncValidators}(e);null!==t.asyncValidator?e.setAsyncValidators(SC(r,t.asyncValidator)):"function"==typeof r&&e.setAsyncValidators([r]);const o=()=>e.updateValueAndValidity();Oa(t._rawValidators,o),Oa(t._rawAsyncValidators,o)})(e,t),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(n=>{e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&VC(e,t)})}(e,t),function(e,t){const n=(r,o)=>{t.valueAccessor.writeValue(r),o&&t.viewToModelUpdate(r)};e.registerOnChange(n),t._registerOnDestroy(()=>{e._unregisterOnChange(n)})}(e,t),function(e,t){t.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&VC(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),function(e,t){if(t.valueAccessor.setDisabledState){const n=r=>{t.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(n),t._registerOnDestroy(()=>{e._unregisterOnDisabledChange(n)})}}(e,t)}function Oa(e,t){e.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(t)})}function VC(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function Va(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const ki="VALID",ka="INVALID",Co="PENDING",Li="DISABLED";function Dd(e){return(Ed(e)?e.validators:e)||null}function BC(e){return Array.isArray(e)?fd(e):e||null}function bd(e,t){return(Ed(t)?t.asyncValidators:e)||null}function HC(e){return Array.isArray(e)?hd(e):e||null}function Ed(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}class wd{constructor(t,n){this._hasOwnPendingAsyncValidator=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._rawValidators=t,this._rawAsyncValidators=n,this._composedValidatorFn=BC(this._rawValidators),this._composedAsyncValidatorFn=HC(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get valid(){return this.status===ki}get invalid(){return this.status===ka}get pending(){return this.status==Co}get disabled(){return this.status===Li}get enabled(){return this.status!==Li}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this._rawValidators=t,this._composedValidatorFn=BC(t)}setAsyncValidators(t){this._rawAsyncValidators=t,this._composedAsyncValidatorFn=HC(t)}addValidators(t){this.setValidators(RC(t,this._rawValidators))}addAsyncValidators(t){this.setAsyncValidators(RC(t,this._rawAsyncValidators))}removeValidators(t){this.setValidators(FC(t,this._rawValidators))}removeAsyncValidators(t){this.setAsyncValidators(FC(t,this._rawAsyncValidators))}hasValidator(t){return xa(this._rawValidators,t)}hasAsyncValidator(t){return xa(this._rawAsyncValidators,t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(n=>{n.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status=Co,!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=Li,this.errors=null,this._forEachChild(r=>{r.disable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:n})),this._onDisabledChange.forEach(r=>r(!0))}enable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=ki,this._forEachChild(r=>{r.enable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:n})),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===ki||this.status===Co)&&this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(n=>n._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Li:ki}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status=Co,this._hasOwnPendingAsyncValidator=!0;const n=EC(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(r=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(r,{emitEvent:t})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(t,n={}){this.errors=t,this._updateControlsErrors(!1!==n.emitEvent)}get(t){return function(e,t,n){if(null==t||(Array.isArray(t)||(t=t.split(".")),Array.isArray(t)&&0===t.length))return null;let r=e;return t.forEach(o=>{r=r instanceof Id?r.controls.hasOwnProperty(o)?r.controls[o]:null:r instanceof RR&&r.at(o)||null}),r}(this,t)}getError(t,n){const r=n?this.get(n):this;return r&&r.errors?r.errors[t]:null}hasError(t,n){return!!this.getError(t,n)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new ze,this.statusChanges=new ze}_calculateStatus(){return this._allControlsDisabled()?Li:this.errors?ka:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Co)?Co:this._anyControlsHaveStatus(ka)?ka:ki}_anyControlsHaveStatus(t){return this._anyControls(n=>n.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_isBoxedValue(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){Ed(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}}class La extends wd{constructor(t=null,n,r){super(Dd(n),bd(r,n)),this._onChange=[],this._applyFormState(t),this._setUpdateStrategy(n),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}setValue(t,n={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==n.emitModelToViewChange&&this._onChange.forEach(r=>r(this.value,!1!==n.emitViewToModelChange)),this.updateValueAndValidity(n)}patchValue(t,n={}){this.setValue(t,n)}reset(t=null,n={}){this._applyFormState(t),this.markAsPristine(n),this.markAsUntouched(n),this.setValue(this.value,n),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){Va(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){Va(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}}class Id extends wd{constructor(t,n,r){super(Dd(n),bd(r,n)),this.controls=t,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(t,n){return this.controls[t]?this.controls[t]:(this.controls[t]=n,n.setParent(this),n._registerOnCollectionChange(this._onCollectionChange),n)}addControl(t,n,r={}){this.registerControl(t,n),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}removeControl(t,n={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}setControl(t,n,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],n&&this.registerControl(t,n),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,n={}){this._checkAllValuesPresent(t),Object.keys(t).forEach(r=>{this._throwIfControlMissing(r),this.controls[r].setValue(t[r],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(t,n={}){null!=t&&(Object.keys(t).forEach(r=>{this.controls[r]&&this.controls[r].patchValue(t[r],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(t={},n={}){this._forEachChild((r,o)=>{r.reset(t[o],{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this._reduceChildren({},(t,n,r)=>(t[r]=n instanceof La?n.value:n.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(n,r)=>!!r._syncPendingControls()||n);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!Object.keys(this.controls).length)throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.controls[t])throw new Error(`Cannot find form control with name: ${t}.`)}_forEachChild(t){Object.keys(this.controls).forEach(n=>{const r=this.controls[n];r&&t(r,n)})}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){for(const n of Object.keys(this.controls)){const r=this.controls[n];if(this.contains(n)&&t(r))return!0}return!1}_reduceValue(){return this._reduceChildren({},(t,n,r)=>((n.enabled||this.disabled)&&(t[r]=n.value),t))}_reduceChildren(t,n){let r=t;return this._forEachChild((o,i)=>{r=n(r,o,i)}),r}_allControlsDisabled(){for(const t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(t){this._forEachChild((n,r)=>{if(void 0===t[r])throw new Error(`Must supply a value for form control with name: '${r}'.`)})}}class RR extends wd{constructor(t,n,r){super(Dd(n),bd(r,n)),this.controls=t,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(t){return this.controls[t]}push(t,n={}){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}insert(t,n,r={}){this.controls.splice(t,0,n),this._registerControl(n),this.updateValueAndValidity({emitEvent:r.emitEvent})}removeAt(t,n={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),this.updateValueAndValidity({emitEvent:n.emitEvent})}setControl(t,n,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),n&&(this.controls.splice(t,0,n),this._registerControl(n)),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,n={}){this._checkAllValuesPresent(t),t.forEach((r,o)=>{this._throwIfControlMissing(o),this.at(o).setValue(r,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(t,n={}){null!=t&&(t.forEach((r,o)=>{this.at(o)&&this.at(o).patchValue(r,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(t=[],n={}){this._forEachChild((r,o)=>{r.reset(t[o],{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this.controls.map(t=>t instanceof La?t.value:t.getRawValue())}clear(t={}){this.controls.length<1||(this._forEachChild(n=>n._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:t.emitEvent}))}_syncPendingControls(){let t=this.controls.reduce((n,r)=>!!r._syncPendingControls()||n,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(t))throw new Error(`Cannot find form control at index ${t}`)}_forEachChild(t){this.controls.forEach((n,r)=>{t(n,r)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(n=>n.enabled&&t(n))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_checkAllValuesPresent(t){this._forEachChild((n,r)=>{if(void 0===t[r])throw new Error(`Must supply a value for form control at index: ${r}.`)})}_allControlsDisabled(){for(const t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}}const PR={provide:Wn,useExisting:ue(()=>Ba)},UC=(()=>Promise.resolve(null))();let Ba=(()=>{class e extends Wn{constructor(n,r,o,i){super(),this.control=new La,this._registered=!1,this.update=new ze,this._parent=n,this._setValidators(r),this._setAsyncValidators(o),this.valueAccessor=function(e,t){if(!t)return null;let n,r,o;return Array.isArray(t),t.forEach(i=>{i.constructor===Pi?n=i:function(e){return Object.getPrototypeOf(e.constructor)===mr}(i)?r=i:o=i}),o||r||n||null}(0,i)}ngOnChanges(n){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in n&&this._updateDisabled(n),function(e,t){if(!e.hasOwnProperty("model"))return!1;const n=e.model;return!!n.isFirstChange()||!Object.is(t,n.currentValue)}(n,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?function(e,t){return[...t.path,e]}(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(n){this.viewModel=n,this.update.emit(n)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Vi(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(n){UC.then(()=>{this.control.setValue(n,{emitViewToModelChange:!1})})}_updateDisabled(n){const r=n.isDisabled.currentValue,o=""===r||r&&"false"!==r;UC.then(()=>{o&&!this.control.disabled?this.control.disable():!o&&this.control.disabled&&this.control.enable()})}}return e.\u0275fac=function(n){return new(n||e)(I(rt,9),I(We,10),I(Gn,10),I(fn,10))},e.\u0275dir=L({type:e,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[_e([PR]),ge,ft]}),e})(),zC=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({}),e})();const HR={provide:fn,useExisting:ue(()=>Td),multi:!0};let Td=(()=>{class e extends mr{writeValue(n){this.setProperty("value",parseFloat(n))}registerOnChange(n){this.onChange=r=>{n(""==r?null:parseFloat(r))}}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,selectors:[["input","type","range","formControlName",""],["input","type","range","formControl",""],["input","type","range","ngModel",""]],hostBindings:function(n,r){1&n&&Z("change",function(i){return r.onChange(i.target.value)})("input",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},features:[_e([HR]),ge]}),e})();const WR={provide:fn,useExisting:ue(()=>Hi),multi:!0};function YC(e,t){return null==e?`${t}`:(t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Hi=(()=>{class e extends mr{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){this.value=n;const r=this._getOptionId(n);null==r&&this.setProperty("selectedIndex",-1);const o=YC(r,n);this.setProperty("value",o)}registerOnChange(n){this.onChange=r=>{this.value=this._getOptionValue(r),n(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(n){for(const r of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(r),n))return r;return null}_getOptionValue(n){const r=function(e){return e.split(":")[0]}(n);return this._optionMap.has(r)?this._optionMap.get(r):n}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(n,r){1&n&&Z("change",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},inputs:{compareWith:"compareWith"},features:[_e([WR]),ge]}),e})(),Rd=(()=>{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption())}set ngValue(n){null!=this._select&&(this._select._optionMap.set(this.id,n),this._setElementValue(YC(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._setElementValue(n),this._select&&this._select.writeValue(this._select.value)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(I($e),I(cr),I(Hi,9))},e.\u0275dir=L({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})();const QR={provide:fn,useExisting:ue(()=>Fd),multi:!0};function ZC(e,t){return null==e?`${t}`:("string"==typeof t&&(t=`'${t}'`),t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Fd=(()=>{class e extends mr{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){let r;if(this.value=n,Array.isArray(n)){const o=n.map(i=>this._getOptionId(i));r=(i,s)=>{i._setSelected(o.indexOf(s.toString())>-1)}}else r=(o,i)=>{o._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(n){this.onChange=r=>{const o=[];if(void 0!==r.selectedOptions){const i=r.selectedOptions;for(let s=0;s{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption(this))}set ngValue(n){null!=this._select&&(this._value=n,this._setElementValue(ZC(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._select?(this._value=n,this._setElementValue(ZC(this.id,n)),this._select.writeValue(this._select.value)):this._setElementValue(n)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}_setSelected(n){this._renderer.setProperty(this._element.nativeElement,"selected",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(I($e),I(cr),I(Fd,9))},e.\u0275dir=L({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})(),av=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({imports:[[zC]]}),e})(),oF=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({imports:[av]}),e})();class lv{constructor(){this.riskHotspotsSettings=null,this.coverageInfoSettings=null}}class iF{constructor(){this.groupingMaximum=0,this.grouping=0,this.historyComparisionDate="",this.historyComparisionType="",this.filter="",this.sortBy="name",this.sortOrder="asc",this.collapseStates=[]}}class sF{constructor(t){this.et="",this.et=t.et,this.cl=t.cl,this.ucl=t.ucl,this.cal=t.cal,this.tl=t.tl,this.lcq=t.lcq,this.cb=t.cb,this.tb=t.tb,this.bcq=t.bcq}get coverageRatioText(){return 0===this.tl?"-":this.cl+"/"+this.cal}get branchCoverageRatioText(){return 0===this.tb?"-":this.cb+"/"+this.tb}}class vo{static roundNumber(t,n){return Math.floor(t*Math.pow(10,n))/Math.pow(10,n)}static getNthOrLastIndexOf(t,n,r){let o=0,i=-1,s=-1;for(;o{this.historicCoverages.push(new sF(r))})}get coverage(){return 0===this.coverableLines?"-"!==this.methodCoverage?parseFloat(this.methodCoverage):NaN:vo.roundNumber(100*this.coveredLines/this.coverableLines,1)}get coverageType(){return 0===this.coverableLines?"-"!==this.methodCoverage?this._coverageType:"":this._coverageType}visible(t,n){if(""!==t&&-1===this.name.toLowerCase().indexOf(t.toLowerCase()))return!1;if(""===n||null===this.currentHistoricCoverage)return!0;if("allChanges"===n){if(this.coveredLines===this.currentHistoricCoverage.cl&&this.uncoveredLines===this.currentHistoricCoverage.ucl&&this.coverableLines===this.currentHistoricCoverage.cal&&this.totalLines===this.currentHistoricCoverage.tl&&this.coveredBranches===this.currentHistoricCoverage.cb&&this.totalBranches===this.currentHistoricCoverage.tb)return!1}else if("lineCoverageIncreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r<=this.currentHistoricCoverage.lcq)return!1}else if("lineCoverageDecreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r>=this.currentHistoricCoverage.lcq)return!1}else if("branchCoverageIncreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.bcq)return!1}else if("branchCoverageDecreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.bcq)return!1}return!0}updateCurrentHistoricCoverage(t){if(this.currentHistoricCoverage=null,""!==t)for(let n=0;n-1&&null===n}visible(t,n){if(""!==t&&this.name.toLowerCase().indexOf(t.toLowerCase())>-1)return!0;for(let r=0;r{class e{get nativeWindow(){return window}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function lF(e,t){1&e&&k(0,"td",3)}function cF(e,t){1&e&&k(0,"td"),2&e&&Ln("green ",w().greenClass,"")}function uF(e,t){1&e&&k(0,"td"),2&e&&Ln("red ",w().redClass,"")}let uv=(()=>{class e{constructor(){this.grayVisible=!0,this.greenVisible=!1,this.redVisible=!1,this.greenClass="",this.redClass="",this._percentage=NaN}get percentage(){return this._percentage}set percentage(n){this._percentage=n,this.grayVisible=isNaN(n),this.greenVisible=!isNaN(n)&&Math.round(n)>0,this.redVisible=!isNaN(n)&&100-Math.round(n)>0,this.greenClass="covered"+Math.round(n),this.redClass="covered"+(100-Math.round(n))}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275cmp=xn({type:e,selectors:[["coverage-bar"]],inputs:{percentage:"percentage"},decls:4,vars:3,consts:[[1,"coverage"],["class","gray covered100",4,"ngIf"],[3,"class",4,"ngIf"],[1,"gray","covered100"]],template:function(n,r){1&n&&(y(0,"table",0),S(1,lF,1,0,"td",1),S(2,cF,1,3,"td",2),S(3,uF,1,3,"td",2),C()),2&n&&(g(1),D("ngIf",r.grayVisible),g(1),D("ngIf",r.greenVisible),g(1),D("ngIf",r.redVisible))},directives:[yo],encapsulation:2,changeDetection:0}),e})();const dF=["codeelement-row",""];function fF(e,t){if(1&e&&(y(0,"th",2),M(1),C()),2&e){const n=w();g(1),P(n.element.coveredBranches)}}function hF(e,t){if(1&e&&(y(0,"th",2),M(1),C()),2&e){const n=w();g(1),P(n.element.totalBranches)}}function pF(e,t){if(1&e&&(y(0,"th",3),M(1),C()),2&e){const n=w();D("title",n.element.branchCoverageRatioText),g(1),P(n.element.branchCoveragePercentage)}}function gF(e,t){if(1&e&&(y(0,"th",2),k(1,"coverage-bar",4),C()),2&e){const n=w();g(1),D("percentage",n.element.branchCoverage)}}const mF=function(e,t){return{"icon-plus":e,"icon-minus":t}};let _F=(()=>{class e{constructor(){this.collapsed=!1,this.branchCoverageAvailable=!1}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275cmp=xn({type:e,selectors:[["","codeelement-row",""]],inputs:{element:"element",collapsed:"collapsed",branchCoverageAvailable:"branchCoverageAvailable"},attrs:dF,decls:20,vars:16,consts:[["href","#",3,"click"],[3,"ngClass"],[1,"right"],[1,"right",3,"title"],[3,"percentage"],["class","right",4,"ngIf"],["class","right",3,"title",4,"ngIf"]],template:function(n,r){1&n&&(y(0,"th"),y(1,"a",0),Z("click",function(i){return r.element.toggleCollapse(i)}),k(2,"i",1),M(3),C(),C(),y(4,"th",2),M(5),C(),y(6,"th",2),M(7),C(),y(8,"th",2),M(9),C(),y(10,"th",2),M(11),C(),y(12,"th",3),M(13),C(),y(14,"th",2),k(15,"coverage-bar",4),C(),S(16,fF,2,1,"th",5),S(17,hF,2,1,"th",5),S(18,pF,2,2,"th",6),S(19,gF,2,1,"th",5)),2&n&&(g(2),D("ngClass",su(13,mF,r.element.collapsed,!r.element.collapsed)),g(1),oe(" ",r.element.name,""),g(2),P(r.element.coveredLines),g(2),P(r.element.uncoveredLines),g(2),P(r.element.coverableLines),g(2),P(r.element.totalLines),g(1),D("title",r.element.coverageRatioText),g(1),P(r.element.coveragePercentage),g(2),D("percentage",r.element.coverage),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable))},directives:[Ni,uv,yo],encapsulation:2,changeDetection:0}),e})();const yF=["coverage-history-chart",""];let CF=(()=>{class e{constructor(){this.path=null,this._historicCoverages=[]}get historicCoverages(){return this._historicCoverages}set historicCoverages(n){if(this._historicCoverages=n,n.length>1){let r="";for(let o=0;o1),g(1),D("ngIf",null!==n.clazz.currentHistoricCoverage),g(1),D("ngIf",null===n.clazz.currentHistoricCoverage)}}function GF(e,t){if(1&e&&(y(0,"td",2),k(1,"coverage-bar",5),C()),2&e){const n=w();g(1),D("percentage",n.clazz.branchCoverage)}}let zF=(()=>{class e{constructor(){this.translations={},this.branchCoverageAvailable=!1,this.historyComparisionDate=""}getClassName(n,r){return n>r?"lightgreen":n1),g(1),D("ngIf",null!==r.clazz.currentHistoricCoverage),g(1),D("ngIf",null===r.clazz.currentHistoricCoverage),g(2),D("percentage",r.clazz.coverage),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable))},directives:[yo,uv,CF,Ni],encapsulation:2,changeDetection:0}),e})();function WF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.noGrouping)}}function qF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.byAssembly)}}function QF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.byNamespace+" "+n.settings.grouping)}}function KF(e,t){if(1&e&&(y(0,"option",26),M(1),C()),2&e){const n=t.$implicit;D("value",n),g(1),P(n)}}function YF(e,t){1&e&&k(0,"br")}function ZF(e,t){if(1&e&&(y(0,"option",32),M(1),C()),2&e){const n=w(4);g(1),oe(" ",n.translations.branchCoverageIncreaseOnly," ")}}function JF(e,t){if(1&e&&(y(0,"option",33),M(1),C()),2&e){const n=w(4);g(1),oe(" ",n.translations.branchCoverageDecreaseOnly," ")}}function XF(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"select",23),Z("ngModelChange",function(o){return le(n),w(3).settings.historyComparisionType=o}),y(2,"option",24),M(3),C(),y(4,"option",27),M(5),C(),y(6,"option",28),M(7),C(),y(8,"option",29),M(9),C(),S(10,ZF,2,1,"option",30),S(11,JF,2,1,"option",31),C(),C()}if(2&e){const n=w(3);g(1),D("ngModel",n.settings.historyComparisionType),g(2),P(n.translations.filter),g(2),P(n.translations.allChanges),g(2),P(n.translations.lineCoverageIncreaseOnly),g(2),P(n.translations.lineCoverageDecreaseOnly),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable)}}function eO(e,t){if(1&e){const n=ln();se(0),y(1,"div"),M(2),y(3,"select",23),Z("ngModelChange",function(o){return le(n),w(2).settings.historyComparisionDate=o})("ngModelChange",function(){return le(n),w(2).updateCurrentHistoricCoverage()}),y(4,"option",24),M(5),C(),S(6,KF,2,2,"option",25),C(),C(),S(7,YF,1,0,"br",0),S(8,XF,12,7,"div",0),ae()}if(2&e){const n=w(2);g(2),oe(" ",n.translations.compareHistory," "),g(1),D("ngModel",n.settings.historyComparisionDate),g(2),P(n.translations.date),g(1),D("ngForOf",n.historicCoverageExecutionTimes),g(1),D("ngIf",""!==n.settings.historyComparisionDate),g(1),D("ngIf",""!==n.settings.historyComparisionDate)}}function tO(e,t){1&e&&k(0,"col",8)}function nO(e,t){1&e&&k(0,"col",11)}function rO(e,t){1&e&&k(0,"col",12)}function oO(e,t){1&e&&k(0,"col",13)}const In=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function iO(e,t){if(1&e){const n=ln();y(0,"th",5),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("covered_branches",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"covered_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered_branches"!==n.settings.sortBy)),g(1),P(n.translations.covered)}}function sO(e,t){if(1&e){const n=ln();y(0,"th",5),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("total_branches",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"total_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total_branches"!==n.settings.sortBy)),g(1),P(n.translations.total)}}function aO(e,t){if(1&e){const n=ln();y(0,"th",19),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("branchcoverage",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"branchcoverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"branchcoverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"branchcoverage"!==n.settings.sortBy)),g(1),P(n.translations.branchCoverage)}}function lO(e,t){if(1&e&&k(0,"tr",35),2&e){const n=w().$implicit,r=w(2);D("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable)}}function cO(e,t){if(1&e&&k(0,"tr",37),2&e){const n=w().$implicit,r=w(3);D("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function uO(e,t){if(1&e&&(se(0),S(1,cO,1,4,"tr",36),ae()),2&e){const n=t.$implicit,r=w().$implicit,o=w(2);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function dO(e,t){if(1&e&&k(0,"tr",40),2&e){const n=w().$implicit,r=w(5);D("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function fO(e,t){if(1&e&&(se(0),S(1,dO,1,4,"tr",39),ae()),2&e){const n=t.$implicit,r=w(2).$implicit,o=w(3);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function hO(e,t){if(1&e&&(se(0),k(1,"tr",38),S(2,fO,2,1,"ng-container",22),ae()),2&e){const n=w().$implicit,r=w(3);g(1),D("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable),g(1),D("ngForOf",n.classes)}}function pO(e,t){if(1&e&&(se(0),S(1,hO,3,4,"ng-container",0),ae()),2&e){const n=t.$implicit,r=w().$implicit,o=w(2);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function gO(e,t){if(1&e&&(se(0),S(1,lO,1,3,"tr",34),S(2,uO,2,1,"ng-container",22),S(3,pO,2,1,"ng-container",22),ae()),2&e){const n=t.$implicit,r=w(2);g(1),D("ngIf",n.visible(r.settings.filter,r.settings.historyComparisionType)),g(1),D("ngForOf",n.classes),g(1),D("ngForOf",n.subElements)}}function mO(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"div",1),y(2,"div"),y(3,"a",2),Z("click",function(o){return le(n),w().collapseAll(o)}),M(4),C(),M(5," | "),y(6,"a",2),Z("click",function(o){return le(n),w().expandAll(o)}),M(7),C(),C(),y(8,"div",3),S(9,WF,2,1,"ng-container",0),S(10,qF,2,1,"ng-container",0),S(11,QF,2,1,"ng-container",0),k(12,"br"),M(13),y(14,"input",4),Z("ngModelChange",function(o){return le(n),w().settings.grouping=o})("ngModelChange",function(){return le(n),w().updateCoverageInfo()}),C(),C(),y(15,"div",3),S(16,eO,9,6,"ng-container",0),C(),y(17,"div",5),y(18,"span"),M(19),C(),y(20,"input",6),Z("ngModelChange",function(o){return le(n),w().settings.filter=o}),C(),C(),C(),y(21,"table",7),y(22,"colgroup"),k(23,"col"),k(24,"col",8),k(25,"col",9),k(26,"col",10),k(27,"col",11),k(28,"col",12),k(29,"col",13),S(30,tO,1,0,"col",14),S(31,nO,1,0,"col",15),S(32,rO,1,0,"col",16),S(33,oO,1,0,"col",17),C(),y(34,"thead"),y(35,"tr"),y(36,"th"),y(37,"a",2),Z("click",function(o){return le(n),w().updateSorting("name",o)}),k(38,"i",18),M(39),C(),C(),y(40,"th",5),y(41,"a",2),Z("click",function(o){return le(n),w().updateSorting("covered",o)}),k(42,"i",18),M(43),C(),C(),y(44,"th",5),y(45,"a",2),Z("click",function(o){return le(n),w().updateSorting("uncovered",o)}),k(46,"i",18),M(47),C(),C(),y(48,"th",5),y(49,"a",2),Z("click",function(o){return le(n),w().updateSorting("coverable",o)}),k(50,"i",18),M(51),C(),C(),y(52,"th",5),y(53,"a",2),Z("click",function(o){return le(n),w().updateSorting("total",o)}),k(54,"i",18),M(55),C(),C(),y(56,"th",19),y(57,"a",2),Z("click",function(o){return le(n),w().updateSorting("coverage",o)}),k(58,"i",18),M(59),C(),C(),S(60,iO,4,6,"th",20),S(61,sO,4,6,"th",20),S(62,aO,4,6,"th",21),C(),C(),y(63,"tbody"),S(64,gO,4,3,"ng-container",22),C(),C(),C()}if(2&e){const n=w();g(4),P(n.translations.collapseAll),g(3),P(n.translations.expandAll),g(2),D("ngIf",-1===n.settings.grouping),g(1),D("ngIf",0===n.settings.grouping),g(1),D("ngIf",n.settings.grouping>0),g(2),oe(" ",n.translations.grouping," "),g(1),D("max",n.settings.groupingMaximum)("ngModel",n.settings.grouping),g(2),D("ngIf",n.historicCoverageExecutionTimes.length>0),g(3),oe("",n.translations.filter," "),g(1),D("ngModel",n.settings.filter),g(10),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(5),D("ngClass",st(31,In,"name"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"name"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"name"!==n.settings.sortBy)),g(1),P(n.translations.name),g(3),D("ngClass",st(35,In,"covered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered"!==n.settings.sortBy)),g(1),P(n.translations.covered),g(3),D("ngClass",st(39,In,"uncovered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"uncovered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"uncovered"!==n.settings.sortBy)),g(1),P(n.translations.uncovered),g(3),D("ngClass",st(43,In,"coverable"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverable"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverable"!==n.settings.sortBy)),g(1),P(n.translations.coverable),g(3),D("ngClass",st(47,In,"total"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total"!==n.settings.sortBy)),g(1),P(n.translations.total),g(3),D("ngClass",st(51,In,"coverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverage"!==n.settings.sortBy)),g(1),P(n.translations.coverage),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(2),D("ngForOf",n.codeElements)}}let _O=(()=>{class e{constructor(n){this.queryString="",this.historicCoverageExecutionTimes=[],this.branchCoverageAvailable=!1,this.codeElements=[],this.translations={},this.settings=new iF,this.window=n.nativeWindow}ngOnInit(){this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes,this.branchCoverageAvailable=this.window.branchCoverageAvailable,this.translations=this.window.translations;let n=!1;if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings)console.log("Coverage info: Restoring from history",this.window.history.state.coverageInfoSettings),n=!0,this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));else{let o=0,i=this.window.assemblies;for(let s=0;s-1&&(this.queryString=window.location.href.substr(r)),this.updateCoverageInfo(),n&&this.restoreCollapseState()}onDonBeforeUnlodad(){if(this.saveCollapseState(),void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Coverage info: Updating history",this.settings);let n=new lv;null!==window.history.state&&(n=JSON.parse(JSON.stringify(this.window.history.state))),n.coverageInfoSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(n,"")}}updateCoverageInfo(){let n=(new Date).getTime(),r=this.window.assemblies,o=[],i=0;if(0===this.settings.grouping)for(let l=0;l{for(let o=0;o{for(let i=0;in&&(o[i].collapsed=this.settings.collapseStates[n]),n++,r(o[i].subElements)};r(this.codeElements)}}return e.\u0275fac=function(n){return new(n||e)(I(kd))},e.\u0275cmp=xn({type:e,selectors:[["coverage-info"]],hostBindings:function(n,r){1&n&&Z("beforeunload",function(){return r.onDonBeforeUnlodad()},!1,Hl)},decls:1,vars:1,consts:[[4,"ngIf"],[1,"customizebox"],["href","#",3,"click"],[1,"center"],["type","range","step","1","min","-1",3,"max","ngModel","ngModelChange"],[1,"right"],["type","text",3,"ngModel","ngModelChange"],[1,"overview","table-fixed","stripped"],[1,"column90"],[1,"column105"],[1,"column100"],[1,"column70"],[1,"column98"],[1,"column112"],["class","column90",4,"ngIf"],["class","column70",4,"ngIf"],["class","column98",4,"ngIf"],["class","column112",4,"ngIf"],[1,"icon-down-dir",3,"ngClass"],["colspan","2",1,"center"],["class","right",4,"ngIf"],["class","center","colspan","2",4,"ngIf"],[4,"ngFor","ngForOf"],[3,"ngModel","ngModelChange"],["value",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["value","allChanges"],["value","lineCoverageIncreaseOnly"],["value","lineCoverageDecreaseOnly"],["value","branchCoverageIncreaseOnly",4,"ngIf"],["value","branchCoverageDecreaseOnly",4,"ngIf"],["value","branchCoverageIncreaseOnly"],["value","branchCoverageDecreaseOnly"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable",4,"ngIf"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable"],["class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate"],["codeelement-row","",1,"namespace",3,"element","collapsed","branchCoverageAvailable"],["class","namespace","class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",1,"namespace",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate"]],template:function(n,r){1&n&&S(0,mO,65,55,"div",0),2&n&&D("ngIf",r.codeElements.length>0)},directives:[yo,Td,Pi,gd,Ba,Ni,Yu,Hi,Rd,Od,_F,zF],encapsulation:2}),e})();class yO{constructor(){this.assembly="",this.numberOfRiskHotspots=10,this.filter="",this.sortBy="",this.sortOrder="asc"}}function CO(e,t){if(1&e&&(y(0,"option",14),M(1),C()),2&e){const n=t.$implicit;D("value",n),g(1),P(n)}}function vO(e,t){if(1&e&&(y(0,"span"),M(1),C()),2&e){const n=w(2);g(1),P(n.translations.top)}}function DO(e,t){1&e&&(y(0,"option",21),M(1,"20"),C())}function bO(e,t){1&e&&(y(0,"option",22),M(1,"50"),C())}function EO(e,t){1&e&&(y(0,"option",23),M(1,"100"),C())}function wO(e,t){if(1&e&&(y(0,"option",14),M(1),C()),2&e){const n=w(3);D("value",n.totalNumberOfRiskHotspots),g(1),P(n.translations.all)}}function IO(e,t){if(1&e){const n=ln();y(0,"select",15),Z("ngModelChange",function(o){return le(n),w(2).settings.numberOfRiskHotspots=o}),y(1,"option",16),M(2,"10"),C(),S(3,DO,2,0,"option",17),S(4,bO,2,0,"option",18),S(5,EO,2,0,"option",19),S(6,wO,2,2,"option",20),C()}if(2&e){const n=w(2);D("ngModel",n.settings.numberOfRiskHotspots),g(3),D("ngIf",n.totalNumberOfRiskHotspots>10),g(1),D("ngIf",n.totalNumberOfRiskHotspots>20),g(1),D("ngIf",n.totalNumberOfRiskHotspots>50),g(1),D("ngIf",n.totalNumberOfRiskHotspots>100)}}function MO(e,t){1&e&&k(0,"col",24)}const Ha=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function TO(e,t){if(1&e){const n=ln();y(0,"th"),y(1,"a",11),Z("click",function(o){const s=le(n).index;return w(2).updateSorting(""+s,o)}),k(2,"i",12),M(3),C(),y(4,"a",25),k(5,"i",26),C(),C()}if(2&e){const n=t.$implicit,r=t.index,o=w(2);g(2),D("ngClass",st(3,Ha,o.settings.sortBy===""+r&&"desc"===o.settings.sortOrder,o.settings.sortBy===""+r&&"asc"===o.settings.sortOrder,o.settings.sortBy!==""+r)),g(1),P(n.name),g(1),oi("href",n.explanationUrl,Vr)}}const AO=function(e,t){return{lightred:e,lightgreen:t}};function SO(e,t){if(1&e&&(y(0,"td",29),M(1),C()),2&e){const n=t.$implicit;D("ngClass",su(2,AO,n.exceeded,!n.exceeded)),g(1),P(n.value)}}function xO(e,t){if(1&e&&(y(0,"tr"),y(1,"td"),M(2),C(),y(3,"td"),y(4,"a",25),M(5),C(),C(),y(6,"td",27),y(7,"a",25),M(8),C(),C(),S(9,SO,2,5,"td",28),C()),2&e){const n=t.$implicit,r=w(2);g(2),P(n.assembly),g(2),D("href",n.reportPath+r.queryString,Vr),g(1),P(n.class),g(1),D("title",n.methodName),g(1),D("href",n.reportPath+r.queryString+"#file"+n.fileIndex+"_line"+n.line,Vr),g(1),oe(" ",n.methodShortName," "),g(1),D("ngForOf",n.metrics)}}function NO(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"div",1),y(2,"div"),y(3,"select",2),Z("ngModelChange",function(o){return le(n),w().settings.assembly=o})("ngModelChange",function(){return le(n),w().updateRiskHotpots()}),y(4,"option",3),M(5),C(),S(6,CO,2,2,"option",4),C(),C(),y(7,"div",5),S(8,vO,2,1,"span",0),S(9,IO,7,5,"select",6),C(),k(10,"div",5),y(11,"div",7),y(12,"span"),M(13),C(),y(14,"input",8),Z("ngModelChange",function(o){return le(n),w().settings.filter=o})("ngModelChange",function(){return le(n),w().updateRiskHotpots()}),C(),C(),C(),y(15,"table",9),y(16,"colgroup"),k(17,"col"),k(18,"col"),k(19,"col"),S(20,MO,1,0,"col",10),C(),y(21,"thead"),y(22,"tr"),y(23,"th"),y(24,"a",11),Z("click",function(o){return le(n),w().updateSorting("assembly",o)}),k(25,"i",12),M(26),C(),C(),y(27,"th"),y(28,"a",11),Z("click",function(o){return le(n),w().updateSorting("class",o)}),k(29,"i",12),M(30),C(),C(),y(31,"th"),y(32,"a",11),Z("click",function(o){return le(n),w().updateSorting("method",o)}),k(33,"i",12),M(34),C(),C(),S(35,TO,6,7,"th",13),C(),C(),y(36,"tbody"),S(37,xO,10,7,"tr",13),function(e,t){const n=J();let r;const o=e+20;n.firstCreatePass?(r=function(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}throw new Qn("302",`The pipe '${e}' could not be found!`)}(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(o,r.onDestroy)):r=n.data[o];const i=r.factory||(r.factory=Xn(r.type)),s=An(I);try{const a=us(!1),l=i();us(a),function(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,b(),o,l)}finally{An(s)}}(38,"slice"),C(),C(),C()}if(2&e){const n=w();g(3),D("ngModel",n.settings.assembly),g(2),P(n.translations.assembly),g(1),D("ngForOf",n.assemblies),g(2),D("ngIf",n.totalNumberOfRiskHotspots>10),g(1),D("ngIf",n.totalNumberOfRiskHotspots>10),g(4),oe("",n.translations.filter," "),g(1),D("ngModel",n.settings.filter),g(6),D("ngForOf",n.riskHotspotMetrics),g(5),D("ngClass",st(20,Ha,"assembly"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"assembly"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"assembly"!==n.settings.sortBy)),g(1),P(n.translations.assembly),g(3),D("ngClass",st(24,Ha,"class"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"class"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"class"!==n.settings.sortBy)),g(1),P(n.translations.class),g(3),D("ngClass",st(28,Ha,"method"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"method"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"method"!==n.settings.sortBy)),g(1),P(n.translations.method),g(1),D("ngForOf",n.riskHotspotMetrics),g(2),D("ngForOf",M_(38,16,n.riskHotspots,0,n.settings.numberOfRiskHotspots))}}let RO=(()=>{class e{constructor(n){this.queryString="",this.riskHotspotMetrics=[],this.riskHotspots=[],this.totalNumberOfRiskHotspots=0,this.assemblies=[],this.translations={},this.settings=new yO,this.window=n.nativeWindow}ngOnInit(){this.riskHotspotMetrics=this.window.riskHotspotMetrics,this.translations=this.window.translations,void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.riskHotspotsSettings&&(console.log("Risk hotspots: Restoring from history",this.window.history.state.riskHotspotsSettings),this.settings=JSON.parse(JSON.stringify(this.window.history.state.riskHotspotsSettings)));const n=window.location.href.indexOf("?");n>-1&&(this.queryString=window.location.href.substr(n)),this.updateRiskHotpots()}onDonBeforeUnlodad(){if(void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Risk hotspots: Updating history",this.settings);let n=new lv;null!==window.history.state&&(n=JSON.parse(JSON.stringify(this.window.history.state))),n.riskHotspotsSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(n,"")}}updateRiskHotpots(){const n=this.window.riskHotspots;if(this.totalNumberOfRiskHotspots=n.length,0===this.assemblies.length){let s=[];for(let a=0;a0)},directives:[yo,Hi,gd,Ba,Rd,Od,Yu,Pi,Ni],pipes:[Yy],encapsulation:2}),e})(),FO=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e,bootstrap:[RO,_O]}),e.\u0275inj=Ft({providers:[kd],imports:[[iR,oF]]}),e})();rR().bootstrapModule(FO).catch(e=>console.error(e))}},wo=>{wo(wo.s=15)}]); \ No newline at end of file diff --git a/docs/coverage/report.css b/docs/coverage/report.css new file mode 100644 index 00000000..27ef3f3c --- /dev/null +++ b/docs/coverage/report.css @@ -0,0 +1,564 @@ +html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } +body { margin: 0; padding: 0; height: 100%; color: #000; } +h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } +h1:first-of-type { margin-top: 0; } +h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } +h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } +a { color: #c00; text-decoration: none; } +a:hover { color: #000; text-decoration: none; } +h1 a.back { color: #fff; background-color: #949494; display: inline-block; margin: -12px 5px -10px -10px; padding: 10px; border-right: 1px solid #fff; } +h1 a.back:hover { background-color: #ccc; } +h1 a.button { color: #000; background-color: #bebebe; margin: -5px 0 0 10px; padding: 5px 8px 5px 8px; border: 1px solid #fff; font-size: 0.9em; border-radius: 3px; float:right; } +h1 a.button:hover { background-color: #ccc; } +h1 a.button i { position: relative; top: 1px; } + +.container { margin: auto; max-width: 1650px; width: 90%; background-color: #fff; display: flex; box-shadow: 0 0 60px #7d7d7d; min-height: 100%; } +.containerleft { padding: 0 20px 20px 20px; flex: 1; } +.containerright { width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } +.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; border-left: solid 1px #6f6f6f; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } +.containerrightfixed h1 { background-color: #c00; } +.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; width: 100%; max-width: 300px; text-overflow: ellipsis; } +.containerright a { margin-bottom: 3px; } + +@media screen and (max-width:1200px){ + .container { box-shadow: none; width: 100%; } + .containerright { display: none; } +} + +.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } + +th { text-align: left; } +.table-fixed { table-layout: fixed; } +.overview { border: solid 1px #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } +.overview th { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 4px 2px 4px; background-color: #ddd; } +.overview tr.namespace th { background-color: #dcdcdc; } +.overview thead th { background-color: #d1d1d1; } +.overview th a { color: #000; } +.overview tr.namespace a { margin-left: 15px; display: block; } +.overview td { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } +div.currenthistory { margin: -2px -5px 0 -5px; padding: 2px 5px 2px 5px; height: 16px; } +.coverage { border-collapse: collapse; font-size: 5px; height: 10px; } +.coverage td { padding: 0; border: none; } +.stripped tr:nth-child(2n+1) { background-color: #F3F3F3; } + +.customizebox { font-size: 0.75em; margin-bottom: 7px; } +.customizebox>div { width: 25%; display: inline-block; } +.customizebox div.right input { width: 150px; } +#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } + +.percentagebar { + padding-left: 3px; +} +a.percentagebar { + padding-left: 6px; +} +.percentagebarundefined { + border-left: 2px solid #fff; +} +.percentagebar0 { + border-left: 2px solid #c10909; +} +.percentagebar10 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 90%, #0aad0a 90%, #0aad0a 100%) 1; +} +.percentagebar20 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 80%, #0aad0a 80%, #0aad0a 100%) 1; +} +.percentagebar30 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 70%, #0aad0a 70%, #0aad0a 100%) 1; +} +.percentagebar40 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 60%, #0aad0a 60%, #0aad0a 100%) 1; +} +.percentagebar50 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 50%, #0aad0a 50%, #0aad0a 100%) 1; +} +.percentagebar60 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 40%, #0aad0a 40%, #0aad0a 100%) 1; +} +.percentagebar70 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 30%, #0aad0a 30%, #0aad0a 100%) 1; +} +.percentagebar80 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 20%, #0aad0a 20%, #0aad0a 100%) 1; +} +.percentagebar90 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 10%, #0aad0a 10%, #0aad0a 100%) 1; +} +.percentagebar100 { + border-left: 2px solid #0aad0a; +} + +.hidden, .ng-hide { display: none; } +.right { text-align: right; } +.center { text-align: center; } +.rightmargin { padding-right: 8px; } +.leftmargin { padding-left: 5px; } +.green { background-color: #0aad0a; } +.lightgreen { background-color: #dcf4dc; } +.red { background-color: #c10909; } +.lightred { background-color: #f7dede; } +.orange { background-color: #FFA500; } +.lightorange { background-color: #FFEFD5; } +.gray { background-color: #dcdcdc; } +.lightgray { color: #888888; } +.lightgraybg { background-color: #dadada; } + +code { font-family: Consolas, monospace; font-size: 0.9em; } + +.toggleZoom { text-align:right; } + +.ct-chart { position: relative; } +.ct-chart .ct-line { stroke-width: 2px !important; } +.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } +.ct-chart .ct-point:hover { stroke-width: 10px !important; } +.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} +.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} + +.tinylinecoveragechart, .tinybranchcoveragechart { background-color: #fff; margin-left: -3px; float: left; border: solid 1px #c1c1c1; width: 30px; height: 18px; } +.historiccoverageoffset { margin-top: 7px; } + +.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line { stroke-width: 1px !important; } +.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } + +.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } +.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } + +.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D; color: #453D3F; pointer-events: none; z-index: 1; min-width: 250px; } + +.column1324 { max-width: 1324px; } +.column674 { max-width: 674px; } +.column60 { width: 60px; } +.column70 { width: 70px; } +.column90 { width: 90px; } +.column98 { width: 98px; } +.column100 { width: 100px; } +.column105 { width: 105px; } +.column112 { width: 112px; } +.column135 { width: 135px; } +.column150 { width: 150px; } + +.covered0 { width: 0px; } +.covered1 { width: 1px; } +.covered2 { width: 2px; } +.covered3 { width: 3px; } +.covered4 { width: 4px; } +.covered5 { width: 5px; } +.covered6 { width: 6px; } +.covered7 { width: 7px; } +.covered8 { width: 8px; } +.covered9 { width: 9px; } +.covered10 { width: 10px; } +.covered11 { width: 11px; } +.covered12 { width: 12px; } +.covered13 { width: 13px; } +.covered14 { width: 14px; } +.covered15 { width: 15px; } +.covered16 { width: 16px; } +.covered17 { width: 17px; } +.covered18 { width: 18px; } +.covered19 { width: 19px; } +.covered20 { width: 20px; } +.covered21 { width: 21px; } +.covered22 { width: 22px; } +.covered23 { width: 23px; } +.covered24 { width: 24px; } +.covered25 { width: 25px; } +.covered26 { width: 26px; } +.covered27 { width: 27px; } +.covered28 { width: 28px; } +.covered29 { width: 29px; } +.covered30 { width: 30px; } +.covered31 { width: 31px; } +.covered32 { width: 32px; } +.covered33 { width: 33px; } +.covered34 { width: 34px; } +.covered35 { width: 35px; } +.covered36 { width: 36px; } +.covered37 { width: 37px; } +.covered38 { width: 38px; } +.covered39 { width: 39px; } +.covered40 { width: 40px; } +.covered41 { width: 41px; } +.covered42 { width: 42px; } +.covered43 { width: 43px; } +.covered44 { width: 44px; } +.covered45 { width: 45px; } +.covered46 { width: 46px; } +.covered47 { width: 47px; } +.covered48 { width: 48px; } +.covered49 { width: 49px; } +.covered50 { width: 50px; } +.covered51 { width: 51px; } +.covered52 { width: 52px; } +.covered53 { width: 53px; } +.covered54 { width: 54px; } +.covered55 { width: 55px; } +.covered56 { width: 56px; } +.covered57 { width: 57px; } +.covered58 { width: 58px; } +.covered59 { width: 59px; } +.covered60 { width: 60px; } +.covered61 { width: 61px; } +.covered62 { width: 62px; } +.covered63 { width: 63px; } +.covered64 { width: 64px; } +.covered65 { width: 65px; } +.covered66 { width: 66px; } +.covered67 { width: 67px; } +.covered68 { width: 68px; } +.covered69 { width: 69px; } +.covered70 { width: 70px; } +.covered71 { width: 71px; } +.covered72 { width: 72px; } +.covered73 { width: 73px; } +.covered74 { width: 74px; } +.covered75 { width: 75px; } +.covered76 { width: 76px; } +.covered77 { width: 77px; } +.covered78 { width: 78px; } +.covered79 { width: 79px; } +.covered80 { width: 80px; } +.covered81 { width: 81px; } +.covered82 { width: 82px; } +.covered83 { width: 83px; } +.covered84 { width: 84px; } +.covered85 { width: 85px; } +.covered86 { width: 86px; } +.covered87 { width: 87px; } +.covered88 { width: 88px; } +.covered89 { width: 89px; } +.covered90 { width: 90px; } +.covered91 { width: 91px; } +.covered92 { width: 92px; } +.covered93 { width: 93px; } +.covered94 { width: 94px; } +.covered95 { width: 95px; } +.covered96 { width: 96px; } +.covered97 { width: 97px; } +.covered98 { width: 98px; } +.covered99 { width: 99px; } +.covered100 { width: 100px; } + + @media print { + html, body { background-color: #fff; } + .container { max-width: 100%; width: 100%; padding: 0; } + .overview colgroup col:first-child { width: 300px; } +} + +.icon-up-dir_active { + background-image: url(icon_up-dir.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDEyMTZxMCAyNi0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMC00NS0xOXQtMTktNDUgMTktNDVsNDQ4LTQ0OHExOS0xOSA0NS0xOXQ0NSAxOWw0NDggNDQ4cTE5IDE5IDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-down-dir_active { + background-image: url(icon_up-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-down-dir { + background-image: url(icon_down-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-info-circled { + background-image: url(icon_info-circled.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; +} +.icon-plus { + background-image: url(icon_plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTQxNnY0MTZxMCA0MC0yOCA2OHQtNjggMjhoLTE5MnEtNDAgMC02OC0yOHQtMjgtNjh2LTQxNmgtNDE2cS00MCAwLTY4LTI4dC0yOC02OHYtMTkycTAtNDAgMjgtNjh0NjgtMjhoNDE2di00MTZxMC00MCAyOC02OHQ2OC0yOGgxOTJxNDAgMCA2OCAyOHQyOCA2OHY0MTZoNDE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-minus { + background-image: url(icon_minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTEyMTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-wrench { + background-image: url(icon_wrench.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik00NDggMTQ3MnEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOSA0NS0xOSAxOS00NXptNjQ0LTQyMGwtNjgyIDY4MnEtMzcgMzctOTAgMzctNTIgMC05MS0zN2wtMTA2LTEwOHEtMzgtMzYtMzgtOTAgMC01MyAzOC05MWw2ODEtNjgxcTM5IDk4IDExNC41IDE3My41dDE3My41IDExNC41em02MzQtNDM1cTAgMzktMjMgMTA2LTQ3IDEzNC0xNjQuNSAyMTcuNXQtMjU4LjUgODMuNXEtMTg1IDAtMzE2LjUtMTMxLjV0LTEzMS41LTMxNi41IDEzMS41LTMxNi41IDMxNi41LTEzMS41cTU4IDAgMTIxLjUgMTYuNXQxMDcuNSA0Ni41cTE2IDExIDE2IDI4dC0xNiAyOGwtMjkzIDE2OXYyMjRsMTkzIDEwN3E1LTMgNzktNDguNXQxMzUuNS04MSA3MC41LTM1LjVxMTUgMCAyMy41IDEwdDguNSAyNXoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-fork { + background-image: url(icon_fork.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNmZmYiIC8+PHBhdGggZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-cube { + background-image: url(icon_cube.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTYyOWw2NDAtMzQ5di02MzZsLTY0MCAyMzN2NzUyem0tNjQtODY1bDY5OC0yNTQtNjk4LTI1NC02OTggMjU0em04MzItMjUydjc2OHEwIDM1LTE4IDY1dC00OSA0N2wtNzA0IDM4NHEtMjggMTYtNjEgMTZ0LTYxLTE2bC03MDQtMzg0cS0zMS0xNy00OS00N3QtMTgtNjV2LTc2OHEwLTQwIDIzLTczdDYxLTQ3bDcwNC0yNTZxMjItOCA0NC04dDQ0IDhsNzA0IDI1NnEzOCAxNCA2MSA0N3QyMyA3M3oiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-search-plus { + background-image: url(icon_search-plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtMjI0djIyNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yMjRoLTIyNHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTY0cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoMjI0di0yMjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41djIyNGgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-search-minus { + background-image: url(icon_search-minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNTc2cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg1NzZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-star { + background-image: url(icon_star.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-sponsor { + background-image: url(icon_sponsor.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTY2NHEtMjYgMC00NC0xOGwtNjI0LTYwMnEtMTAtOC0yNy41LTI2dC01NS41LTY1LjUtNjgtOTcuNS01My41LTEyMS0yMy41LTEzOHEwLTIyMCAxMjctMzQ0dDM1MS0xMjRxNjIgMCAxMjYuNSAyMS41dDEyMCA1OCA5NS41IDY4LjUgNzYgNjhxMzYtMzYgNzYtNjh0OTUuNS02OC41IDEyMC01OCAxMjYuNS0yMS41cTIyNCAwIDM1MSAxMjR0MTI3IDM0NHEwIDIyMS0yMjkgNDUwbC02MjMgNjAwcS0xOCAxOC00NCAxOHoiIGZpbGw9IiNlYTRhYWEiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} + +@media (prefers-color-scheme: dark) { + @media screen { + html { + background-color: #333; + color: #fff; + } + + body { + color: #fff; + } + + h1 { + background-color: #555453; + color: #fff; + } + + .container { + background-color: #333; + box-shadow: 0 0 60px #0c0c0c; + } + + .containerrightfixed { + background-color: #3D3C3C; + border-left: solid 1px #515050; + } + + .containerrightfixed h1 { + background-color: #484747; + } + + .overview tr:hover { + background-color: #2E2D2C; + } + + .overview th { + background-color: #444; + border: solid 1px #3B3A39; + } + + .overview thead th { + background-color: #444; + } + + .overview th a { + color: #fff; + color: rgba(255, 255, 255, 0.95); + } + + .overview th a:hover { + color: #0078d4; + } + + .overview td { + border: solid 1px #3B3A39; + } + + .overview .coverage td { + border: none; + } + + .stripped tr:nth-child(2n+1) { + background-color: #3c3c3c; + } + + input, select { + background-color: #333; + color: #fff; + border: 1px solid #A19F9D; + } + + a { + color: #fff; + color: rgba(255, 255, 255, 0.95); + } + + a:hover { + color: #0078d4; + } + + h1 a.back { + background-color: #4a4846; + } + + h1 a.button { + color: #fff; + background-color: #565656; + border-color: #c1c1c1; + } + + h1 a.button:hover { + background-color: #8d8d8d; + } + + .gray { + background-color: #484747; + } + + .lightgray { + color: #ebebeb; + } + + .lightgraybg { + background-color: #474747; + } + + .lightgreen { + background-color: #406540; + } + + .lightorange { + background-color: #ab7f36; + } + + .lightred { + background-color: #954848; + } + + .ct-label { + color: #fff !important; + } + + .ct-grid { + stroke: #fff !important; + } + + .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { + stroke: #0078D4 !important; + } + + .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { + stroke: #6dc428 !important; + } + + .linecoverage { + background-color: #0078D4; + } + + .branchcoverage { + background-color: #6dc428; + } + + .tinylinecoveragechart, .tinybranchcoveragechart { + background-color: #333; + } + + .tinybranchcoveragechart .ct-series.ct-series-a .ct-line { + stroke: #6dc428 !important; + } + + .icon-down-dir { + background-image: url(icon_down-dir_active_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE0MDggNzA0cTAgMjYtMTkgNDVsLTQ0OCA0NDhxLTE5IDE5LTQ1IDE5dC00NS0xOWwtNDQ4LTQ0OHEtMTktMTktMTktNDV0MTktNDUgNDUtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6Ii8+PC9zdmc+); + } + + .icon-info-circled { + background-image: url(icon_info-circled_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); + } + + .icon-plus { + background-image: url(icon_plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtMTkycS00MCAwLTY4LTI4dC0yOC02OHYtNDE2aC00MTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGg0MTZ2LTQxNnEwLTQwIDI4LTY4dDY4LTI4aDE5MnE0MCAwIDY4IDI4dDI4IDY4djQxNmg0MTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); + } + + .icon-minus { + background-image: url(icon_minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtMTIxNnEtNDAgMC02OC0yOHQtMjgtNjh2LTE5MnEwLTQwIDI4LTY4dDY4LTI4aDEyMTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); + } + + .icon-wrench { + background-image: url(icon_wrench_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JEQkRCRiIgZD0iTTQ0OCAxNDcycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em02NDQtNDIwbC02ODIgNjgycS0zNyAzNy05MCAzNy01MiAwLTkxLTM3bC0xMDYtMTA4cS0zOC0zNi0zOC05MCAwLTUzIDM4LTkxbDY4MS02ODFxMzkgOTggMTE0LjUgMTczLjV0MTczLjUgMTE0LjV6bTYzNC00MzVxMCAzOS0yMyAxMDYtNDcgMTM0LTE2NC41IDIxNy41dC0yNTguNSA4My41cS0xODUgMC0zMTYuNS0xMzEuNXQtMTMxLjUtMzE2LjUgMTMxLjUtMzE2LjUgMzE2LjUtMTMxLjVxNTggMCAxMjEuNSAxNi41dDEwNy41IDQ2LjVxMTYgMTEgMTYgMjh0LTE2IDI4bC0yOTMgMTY5djIyNGwxOTMgMTA3cTUtMyA3OS00OC41dDEzNS41LTgxIDcwLjUtMzUuNXExNSAwIDIzLjUgMTB0OC41IDI1eiIvPjwvc3ZnPg==); + } + + .icon-fork { + background-image: url(icon_fork_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); + } + + .icon-cube { + background-image: url(icon_cube_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTg5NiAxNjI5bDY0MC0zNDl2LTYzNmwtNjQwIDIzM3Y3NTJ6bS02NC04NjVsNjk4LTI1NC02OTgtMjU0LTY5OCAyNTR6bTgzMi0yNTJ2NzY4cTAgMzUtMTggNjV0LTQ5IDQ3bC03MDQgMzg0cS0yOCAxNi02MSAxNnQtNjEtMTZsLTcwNC0zODRxLTMxLTE3LTQ5LTQ3dC0xOC02NXYtNzY4cTAtNDAgMjMtNzN0NjEtNDdsNzA0LTI1NnEyMi04IDQ0LTh0NDQgOGw3MDQgMjU2cTM4IDE0IDYxIDQ3dDIzIDczeiIvPjwvc3ZnPg==); + } + + .icon-search-plus { + background-image: url(icon_search-plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC0yMjR2MjI0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTIyNGgtMjI0cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWgyMjR2LTIyNHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MjI0aDIyNHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); + } + + .icon-search-minus { + background-image: url(icon_search-minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC01NzZxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di02NHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDU3NnExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); + } + + .icon-star { + background-image: url(icon_star_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=); + } + } +} + +.ct-double-octave:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-grid-background,.ct-line{fill:none}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{content:"";display:table;clear:both}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/src/ImageProcessing/AssemblyInfo.fs b/src/ImageProcessing/AssemblyInfo.fs index da664d0a..d9b7443e 100644 --- a/src/ImageProcessing/AssemblyInfo.fs +++ b/src/ImageProcessing/AssemblyInfo.fs @@ -1,39 +1,23 @@ // Auto-Generated by FAKE; do not edit namespace System - open System.Reflection [] [] -[] -[] -[] -[] -[] -[] +[] +[] +[] +[] +[] +[] do () module internal AssemblyVersionInformation = - [] - let AssemblyTitle = "ImageProcessing" - - [] - let AssemblyProduct = "ImageProcessing" - - [] - let AssemblyVersion = "0.1.0" - - [] - let AssemblyMetadata_ReleaseDate = "2017-03-17T00:00:00.0000000" - - [] - let AssemblyFileVersion = "0.1.0" - - [] - let AssemblyInformationalVersion = "0.1.0" - - [] - let AssemblyMetadata_ReleaseChannel = "release" - - [] - let AssemblyMetadata_GitHash = "b385af579477bb585016a6b5204121de4a485dac" + let [] AssemblyTitle = "ImageProcessing" + let [] AssemblyProduct = "ImageProcessing" + let [] AssemblyVersion = "1.0.0" + let [] AssemblyMetadata_ReleaseDate = "2023-12-16T00:00:00.0000000+03:00" + let [] AssemblyFileVersion = "1.0.0" + let [] AssemblyInformationalVersion = "1.0.0" + let [] AssemblyMetadata_ReleaseChannel = "release" + let [] AssemblyMetadata_GitHash = "cd6a8b053b59e4e68d00de7cee25a009fd79dabd" diff --git a/src/ImageProcessing/ImageProcessing.fsproj b/src/ImageProcessing/ImageProcessing.fsproj index 998545a6..ce3e36ef 100644 --- a/src/ImageProcessing/ImageProcessing.fsproj +++ b/src/ImageProcessing/ImageProcessing.fsproj @@ -6,7 +6,7 @@ true
- ImageProcessing + LeonidLodygin.ImageProcessing Image processing using GPGPU diff --git a/tests/ImageProcessing.Tests/AssemblyInfo.fs b/tests/ImageProcessing.Tests/AssemblyInfo.fs index 3b1c52ac..4a916b4c 100644 --- a/tests/ImageProcessing.Tests/AssemblyInfo.fs +++ b/tests/ImageProcessing.Tests/AssemblyInfo.fs @@ -4,20 +4,20 @@ open System.Reflection [] [] -[] -[] -[] -[] +[] +[] +[] +[] [] -[] +[] do () module internal AssemblyVersionInformation = let [] AssemblyTitle = "ImageProcessing.Tests" let [] AssemblyProduct = "ImageProcessing" - let [] AssemblyVersion = "0.1.0" - let [] AssemblyMetadata_ReleaseDate = "2017-03-17T00:00:00.0000000" - let [] AssemblyFileVersion = "0.1.0" - let [] AssemblyInformationalVersion = "0.1.0" + let [] AssemblyVersion = "1.0.0" + let [] AssemblyMetadata_ReleaseDate = "2023-12-16T00:00:00.0000000+03:00" + let [] AssemblyFileVersion = "1.0.0" + let [] AssemblyInformationalVersion = "1.0.0" let [] AssemblyMetadata_ReleaseChannel = "release" - let [] AssemblyMetadata_GitHash = "b385af579477bb585016a6b5204121de4a485dac" + let [] AssemblyMetadata_GitHash = "cd6a8b053b59e4e68d00de7cee25a009fd79dabd" diff --git a/tests/ImageProcessing.Tests/CpuTests.fs b/tests/ImageProcessing.Tests/CpuTests.fs index 3535d314..3372fd88 100644 --- a/tests/ImageProcessing.Tests/CpuTests.fs +++ b/tests/ImageProcessing.Tests/CpuTests.fs @@ -1,10 +1,10 @@ namespace CpuTests open Expecto -open Arguments -open Kernels -open MyImage -open Types +open ImageProcessing.Arguments +open ImageProcessing.Kernels +open ImageProcessing.MyImage +open ImageProcessing.Types open System module SimpleTests = @@ -17,7 +17,7 @@ module SimpleTests = [ testCase "MyImage after gauss filter with CPU" <| fun _ -> let image = loadAsImage (src + "/input/test.png") - let filtered = CpuProcessing.applyFilter gaussianBlur7x7Kernel image + let filtered = ImageProcessing.CpuProcessing.applyFilter gaussianBlur7x7Kernel image Expect.notEqual image.Data @@ -27,7 +27,7 @@ module SimpleTests = <| fun _ -> let image = MyImage([| 1uy; 2uy; 3uy; 1uy; 2uy; 3uy; 1uy; 2uy; 3uy |], 3, 3, "test") - let turnedImage = image |> CpuProcessing.rotate Right + let turnedImage = image |> ImageProcessing.CpuProcessing.rotate Right let expected = [| 1uy; 1uy; 1uy; 2uy; 2uy; 2uy; 3uy; 3uy; 3uy |] @@ -38,10 +38,10 @@ module SimpleTests = let turnedImage = image - |> CpuProcessing.rotate Right - |> CpuProcessing.rotate Right - |> CpuProcessing.rotate Right - |> CpuProcessing.rotate Right + |> ImageProcessing.CpuProcessing.rotate Right + |> ImageProcessing.CpuProcessing.rotate Right + |> ImageProcessing.CpuProcessing.rotate Right + |> ImageProcessing.CpuProcessing.rotate Right Expect.equal image.Data @@ -59,8 +59,15 @@ module PropertyTests = let image = MyImage(GpuTests.SimpleTests.flat2dArray arr, Array2D.length2 arr, Array2D.length1 arr, "test") - let turnedLeft = image |> CpuProcessing.rotate Left |> CpuProcessing.rotate Left - let turnedRight = image |> CpuProcessing.rotate Right |> CpuProcessing.rotate Right + let turnedLeft = + image + |> ImageProcessing.CpuProcessing.rotate Left + |> ImageProcessing.CpuProcessing.rotate Left + + let turnedRight = + image + |> ImageProcessing.CpuProcessing.rotate Right + |> ImageProcessing.CpuProcessing.rotate Right Expect.equal turnedLeft.Data diff --git a/tests/ImageProcessing.Tests/GpuCpuComparison.fs b/tests/ImageProcessing.Tests/GpuCpuComparison.fs index 66a5b8f5..6f08626b 100644 --- a/tests/ImageProcessing.Tests/GpuCpuComparison.fs +++ b/tests/ImageProcessing.Tests/GpuCpuComparison.fs @@ -1,8 +1,8 @@ namespace GpuCpuComparison open Expecto -open Arguments -open Types +open ImageProcessing.Arguments +open ImageProcessing.Types module PropertyTests = [] diff --git a/tests/ImageProcessing.Tests/GpuTests.fs b/tests/ImageProcessing.Tests/GpuTests.fs index 400eb969..44537271 100644 --- a/tests/ImageProcessing.Tests/GpuTests.fs +++ b/tests/ImageProcessing.Tests/GpuTests.fs @@ -1,10 +1,10 @@ namespace GpuTests open Expecto -open Arguments -open Kernels -open MyImage -open Types +open ImageProcessing.Arguments +open ImageProcessing.Kernels +open ImageProcessing.MyImage +open ImageProcessing.Types open System open Brahma.FSharp @@ -12,10 +12,10 @@ module SimpleTests = let src = __SOURCE_DIRECTORY__ let context = ClContext(ClDevice.GetFirstAppropriateDevice()) let queue = context.QueueProvider.CreateQueue() - let filterKernel = GpuKernels.applyFilterKernel context - let rotateKernel = GpuKernels.rotateKernel context - let mirrorKernel = GpuKernels.mirrorKernel context - let fishKernel = GpuKernels.fishEyeKernel context + let filterKernel = ImageProcessing.GpuKernels.applyFilterKernel context + let rotateKernel = ImageProcessing.GpuKernels.rotateKernel context + let mirrorKernel = ImageProcessing.GpuKernels.mirrorKernel context + let fishKernel = ImageProcessing.GpuKernels.fishEyeKernel context let kernelsCortege = (filterKernel, rotateKernel, mirrorKernel, fishKernel) let flat2dArray arr = @@ -41,7 +41,13 @@ module SimpleTests = let image = loadAsImage (src + "/input/test.png") let filtered = - GpuProcessing.applyFilter gaussianBlur7x7Kernel filterKernel context 64 queue image + ImageProcessing.GpuProcessing.applyFilter + gaussianBlur7x7Kernel + filterKernel + context + 64 + queue + image Expect.notEqual image.Data @@ -51,7 +57,9 @@ module SimpleTests = <| fun _ -> let image = MyImage([| 1uy; 2uy; 3uy; 1uy; 2uy; 3uy; 1uy; 2uy; 3uy |], 3, 3, "test") - let turnedImage = image |> GpuProcessing.rotate Right rotateKernel context 64 queue + let turnedImage = + image + |> ImageProcessing.GpuProcessing.rotate Right rotateKernel context 64 queue let expected = [| 1uy; 1uy; 1uy; 2uy; 2uy; 2uy; 3uy; 3uy; 3uy |] @@ -62,10 +70,10 @@ module SimpleTests = let turnedImage = image - |> GpuProcessing.rotate Right rotateKernel context 64 queue - |> GpuProcessing.rotate Right rotateKernel context 64 queue - |> GpuProcessing.rotate Right rotateKernel context 64 queue - |> GpuProcessing.rotate Right rotateKernel context 64 queue + |> ImageProcessing.GpuProcessing.rotate Right rotateKernel context 64 queue + |> ImageProcessing.GpuProcessing.rotate Right rotateKernel context 64 queue + |> ImageProcessing.GpuProcessing.rotate Right rotateKernel context 64 queue + |> ImageProcessing.GpuProcessing.rotate Right rotateKernel context 64 queue Expect.equal image.Data @@ -84,13 +92,33 @@ module PropertyTests = let turnedLeft = image - |> GpuProcessing.rotate Left SimpleTests.rotateKernel SimpleTests.context 64 SimpleTests.queue - |> GpuProcessing.rotate Left SimpleTests.rotateKernel SimpleTests.context 64 SimpleTests.queue + |> ImageProcessing.GpuProcessing.rotate + Left + SimpleTests.rotateKernel + SimpleTests.context + 64 + SimpleTests.queue + |> ImageProcessing.GpuProcessing.rotate + Left + SimpleTests.rotateKernel + SimpleTests.context + 64 + SimpleTests.queue let turnedRight = image - |> GpuProcessing.rotate Right SimpleTests.rotateKernel SimpleTests.context 64 SimpleTests.queue - |> GpuProcessing.rotate Right SimpleTests.rotateKernel SimpleTests.context 64 SimpleTests.queue + |> ImageProcessing.GpuProcessing.rotate + Right + SimpleTests.rotateKernel + SimpleTests.context + 64 + SimpleTests.queue + |> ImageProcessing.GpuProcessing.rotate + Right + SimpleTests.rotateKernel + SimpleTests.context + 64 + SimpleTests.queue Expect.equal turnedLeft.Data diff --git a/tests/ImageProcessing.Tests/coverage.xml b/tests/ImageProcessing.Tests/coverage.xml index 20bf7916..f62359e2 100644 --- a/tests/ImageProcessing.Tests/coverage.xml +++ b/tests/ImageProcessing.Tests/coverage.xml @@ -1,11 +1,11 @@  - + - - - C:\Users\Леонид\ImageProcessing\tests\ImageProcessing.Tests\bin\Debug\net7.0\ImageProcessing.dll - 2023-12-16T14:36:30.2931635Z + + + C:\Users\Леонид\ImageProcessing\tests\ImageProcessing.Tests\bin\Release\net7.0\ImageProcessing.dll + 2023-12-16T20:04:08.5017959Z ImageProcessing @@ -20,68 +20,72 @@ - + ImageProcessing.Main - - + + 100663297 + System.Void ImageProcessing.Main::main$cont@20(Argu.ParseResults`1<ImageProcessing.Arguments/CliArguments>,System.String,System.String,Microsoft.FSharp.Core.Unit) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663298 System.Int32 ImageProcessing.Main::main(System.String[]) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - + + - + @@ -91,19 +95,19 @@ - 100663299 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> ImageProcessing.Main/filters@28::Invoke(Types/Modifications) + 100663300 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Main/filters@28::Invoke(ImageProcessing.Types/Modifications) - + - 100663300 + 100663301 System.Void ImageProcessing.Main/filters@28::.cctor() - + @@ -113,14 +117,14 @@ - 100663302 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> ImageProcessing.Main/filters@37-1::Invoke(Types/Modifications) + 100663303 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Main/filters@37-1::Invoke(ImageProcessing.Types/Modifications) - + - + @@ -130,19 +134,19 @@ - 100663304 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> ImageProcessing.Main/filters@39-2::Invoke(Types/Modifications) + 100663305 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Main/filters@39-2::Invoke(ImageProcessing.Types/Modifications) - + - 100663305 + 100663306 System.Void ImageProcessing.Main/filters@39-2::.cctor() - + @@ -152,145 +156,145 @@ - 100663307 - MyImage/MyImage ImageProcessing.Main/composition@41::Invoke(Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,MyImage/MyImage) + 100663308 + ImageProcessing.MyImage/MyImage ImageProcessing.Main/composition@41::Invoke(Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,ImageProcessing.MyImage/MyImage) - + - 100663308 + 100663309 System.Void ImageProcessing.Main/composition@41::.cctor() - + - - Arguments + + ImageProcessing.Arguments - - - 100663309 - a Arguments::first(a,b,c,d) + + + 100663310 + a ImageProcessing.Arguments::first(a,b,c,d) - + - + - - - 100663310 - b Arguments::second(a,b,c,d) + + + 100663311 + b ImageProcessing.Arguments::second(a,b,c,d) - + - + - - - 100663311 - c Arguments::third(a,b,c,d) + + + 100663312 + c ImageProcessing.Arguments::third(a,b,c,d) - + - + - - - 100663312 - d Arguments::fourth(a,b,c,d) + + + 100663313 + d ImageProcessing.Arguments::fourth(a,b,c,d) - + - + - 100663313 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments::modificationParser(Types/Modifications) + 100663314 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments::modificationParser(ImageProcessing.Types/Modifications) - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - 100663314 - Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClContext,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>>>> Arguments::modificationGpuParser(Types/Modifications,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>) + 100663315 + Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClContext,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>>>> ImageProcessing.Arguments::modificationGpuParser(ImageProcessing.Types/Modifications,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>) - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - 100663315 - Brahma.FSharp.Platform Arguments::deviceParser(Types/Devices) + 100663316 + Brahma.FSharp.Platform ImageProcessing.Arguments::deviceParser(ImageProcessing.Types/Devices) - - - - - + + + + + @@ -298,2059 +302,2129 @@ - + + + + + 100663319 + System.Int32 ImageProcessing.Arguments::GetHashCode$cont@58(System.Collections.IEqualityComparer,ImageProcessing.Arguments/CliArguments,Microsoft.FSharp.Core.Unit) + + + + + + + 100663320 + System.Boolean ImageProcessing.Arguments::Equals$cont@58(ImageProcessing.Arguments/CliArguments,System.Object,System.Collections.IEqualityComparer,Microsoft.FSharp.Core.Unit) + + + - Arguments/modificationParser@21 + ImageProcessing.Arguments/modificationParser@21 - 100663317 - MyImage/MyImage Arguments/modificationParser@21::Invoke(MyImage/MyImage) + 100663322 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@21::Invoke(ImageProcessing.MyImage/MyImage) + + + + + + + 100663323 + System.Void ImageProcessing.Arguments/modificationParser@21::.cctor() - + - Arguments/modificationParser@22-1 + ImageProcessing.Arguments/modificationParser@22-1 - 100663319 - MyImage/MyImage Arguments/modificationParser@22-1::Invoke(MyImage/MyImage) + 100663325 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@22-1::Invoke(ImageProcessing.MyImage/MyImage) + + + + + + + 100663326 + System.Void ImageProcessing.Arguments/modificationParser@22-1::.cctor() - + - Arguments/modificationParser@23-2 + ImageProcessing.Arguments/modificationParser@23-2 - 100663321 - MyImage/MyImage Arguments/modificationParser@23-2::Invoke(MyImage/MyImage) + 100663328 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@23-2::Invoke(ImageProcessing.MyImage/MyImage) + + + + + + + 100663329 + System.Void ImageProcessing.Arguments/modificationParser@23-2::.cctor() - + - Arguments/modificationParser@24-3 + ImageProcessing.Arguments/modificationParser@24-3 - 100663323 - MyImage/MyImage Arguments/modificationParser@24-3::Invoke(MyImage/MyImage) + 100663331 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@24-3::Invoke(ImageProcessing.MyImage/MyImage) + + + + + + + 100663332 + System.Void ImageProcessing.Arguments/modificationParser@24-3::.cctor() - + - Arguments/modificationParser@25-4 + ImageProcessing.Arguments/modificationParser@25-4 - 100663325 - MyImage/MyImage Arguments/modificationParser@25-4::Invoke(MyImage/MyImage) + 100663334 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@25-4::Invoke(ImageProcessing.MyImage/MyImage) + + + + + + + 100663335 + System.Void ImageProcessing.Arguments/modificationParser@25-4::.cctor() - + - Arguments/modificationParser@26-5 + ImageProcessing.Arguments/modificationParser@26-5 - 100663327 - MyImage/MyImage Arguments/modificationParser@26-5::Invoke(MyImage/MyImage) + 100663337 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@26-5::Invoke(ImageProcessing.MyImage/MyImage) - + - Arguments/modificationParser@27-6 + ImageProcessing.Arguments/modificationParser@27-6 - 100663329 - MyImage/MyImage Arguments/modificationParser@27-6::Invoke(MyImage/MyImage) + 100663339 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@27-6::Invoke(ImageProcessing.MyImage/MyImage) - + - Arguments/modificationParser@28-7 + ImageProcessing.Arguments/modificationParser@28-7 - 100663331 - MyImage/MyImage Arguments/modificationParser@28-7::Invoke(MyImage/MyImage) + 100663341 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@28-7::Invoke(ImageProcessing.MyImage/MyImage) - + - Arguments/modificationParser@29-8 + ImageProcessing.Arguments/modificationParser@29-8 - 100663333 - MyImage/MyImage Arguments/modificationParser@29-8::Invoke(MyImage/MyImage) + 100663343 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@29-8::Invoke(ImageProcessing.MyImage/MyImage) - + - Arguments/modificationParser@30-9 + ImageProcessing.Arguments/modificationParser@30-9 - 100663335 - MyImage/MyImage Arguments/modificationParser@30-9::Invoke(MyImage/MyImage) + 100663345 + ImageProcessing.MyImage/MyImage ImageProcessing.Arguments/modificationParser@30-9::Invoke(ImageProcessing.MyImage/MyImage) - + - 100663336 - System.Void Arguments/modificationParser@30-9::.cctor() + 100663346 + System.Void ImageProcessing.Arguments/modificationParser@30-9::.cctor() - + - Arguments/modificationGpuParser@37 + ImageProcessing.Arguments/modificationGpuParser@37 - 100663338 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@37::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663348 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@37::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@38-1 + ImageProcessing.Arguments/modificationGpuParser@38-1 - 100663340 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@38-1::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663350 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@38-1::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@39-2 + ImageProcessing.Arguments/modificationGpuParser@39-2 - 100663342 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@39-2::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663352 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@39-2::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@40-3 + ImageProcessing.Arguments/modificationGpuParser@40-3 - 100663344 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@40-3::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663354 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@40-3::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@41-4 + ImageProcessing.Arguments/modificationGpuParser@41-4 - 100663346 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@41-4::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663356 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@41-4::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@42-5 + ImageProcessing.Arguments/modificationGpuParser@42-5 - 100663348 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@42-5::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663358 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@42-5::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@43-6 + ImageProcessing.Arguments/modificationGpuParser@43-6 - 100663350 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@43-6::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663360 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@43-6::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@44-7 + ImageProcessing.Arguments/modificationGpuParser@44-7 - 100663352 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@44-7::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663362 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@44-7::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@45-8 + ImageProcessing.Arguments/modificationGpuParser@45-8 - 100663354 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@45-8::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663364 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@45-8::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/modificationGpuParser@46-9 + ImageProcessing.Arguments/modificationGpuParser@46-9 - 100663356 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> Arguments/modificationGpuParser@46-9::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + 100663366 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.Arguments/modificationGpuParser@46-9::Invoke(Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - + - Arguments/CliArguments + ImageProcessing.Arguments/CliArguments - 100663380 - System.String Arguments/CliArguments::Argu.IArgParserTemplate.get_Usage() + 100663390 + System.String ImageProcessing.Arguments/CliArguments::Argu.IArgParserTemplate.get_Usage() - - - - - - - + + + + + + + - - - - - - + + + + + + - + - - ImageArrayProcessing + + ImageProcessing.ImageArrayProcessing - 100663403 - System.String[] ImageArrayProcessing::get_extensions() + 100663413 + System.String[] ImageProcessing.ImageArrayProcessing::get_extensions() - + - - 100663404 - Microsoft.FSharp.Collections.FSharpList`1<System.String> ImageArrayProcessing::listAllFiles(System.String) + + 100663414 + Microsoft.FSharp.Collections.FSharpList`1<System.String> ImageProcessing.ImageArrayProcessing::listAllFiles(System.String) - - - + + - + + + + + 100663415 + System.Void ImageProcessing.ImageArrayProcessing::helper@53(System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,System.String) + + + + + + - 100663405 - System.Void ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Types/AgentStatus) + 100663416 + System.Void ImageProcessing.ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,ImageProcessing.Types/AgentStatus) - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - + - ImageArrayProcessing/filtered@29 + ImageProcessing.ImageArrayProcessing/listAllFiles@29 - 100663407 - System.Boolean ImageArrayProcessing/filtered@29::Invoke(System.String) + 100663418 + System.Boolean ImageProcessing.ImageArrayProcessing/listAllFiles@29::Invoke(System.String) - + - + - 100663408 - System.Void ImageArrayProcessing/filtered@29::.cctor() + 100663419 + System.Void ImageProcessing.ImageArrayProcessing/listAllFiles@29::.cctor() - + - ImageArrayProcessing/arrayOfImagesProcessing@51 + ImageProcessing.ImageArrayProcessing/arrayOfImagesProcessing@51 - 100663410 - Types/Msg ImageArrayProcessing/arrayOfImagesProcessing@51::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) + 100663421 + ImageProcessing.Types/Msg ImageProcessing.ImageArrayProcessing/arrayOfImagesProcessing@51::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - 100663411 - System.Void ImageArrayProcessing/arrayOfImagesProcessing@51::.cctor() + 100663422 + System.Void ImageProcessing.ImageArrayProcessing/arrayOfImagesProcessing@51::.cctor() - - - - - - - ImageArrayProcessing/helper@54 - - - - 100663413 - Microsoft.FSharp.Core.Unit ImageArrayProcessing/helper@54::Invoke(System.String) - - - - - - - + - <StartupCode$ImageProcessing>.$ImageArrayProcessing + <StartupCode$ImageProcessing>.$ImageProcessing.ImageArrayProcessing - 100663414 - System.Void <StartupCode$ImageProcessing>.$ImageArrayProcessing::.cctor() + 100663423 + System.Void <StartupCode$ImageProcessing>.$ImageProcessing.ImageArrayProcessing::.cctor() - + - + - - Agents + + ImageProcessing.Agents - - 100663415 - Microsoft.FSharp.Collections.FSharpList`1<System.String> Agents::listAllFiles(System.String) + + 100663424 + Microsoft.FSharp.Collections.FSharpList`1<System.String> ImageProcessing.Agents::listAllFiles(System.String) - - + - + - 100663416 - System.String Agents::outFile(System.String,System.String) + 100663425 + System.String ImageProcessing.Agents::outFile(System.String,System.String) - + - + - 100663417 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::imgSaver(System.String,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + 100663426 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg> ImageProcessing.Agents::imgSaver(System.String,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - 100663418 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::imgProcessor(Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + 100663427 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg> ImageProcessing.Agents::imgProcessor(Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - 100663419 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::msgLogger() + 100663428 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg> ImageProcessing.Agents::msgLogger() - + - + - 100663420 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents::superAgent(System.String,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + 100663429 + Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg> ImageProcessing.Agents::superAgent(System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - - - 100663421 - System.Void Agents::superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage>,System.Int32) + + + 100663430 + System.Void ImageProcessing.Agents::superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,System.Int32) - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + - + - Agents/imgSaver@30-2 + ImageProcessing.Agents/imgSaver@30-2 - 100663423 - System.Boolean Agents/imgSaver@30-2::Invoke(Microsoft.FSharp.Core.Unit) + 100663432 + System.Boolean ImageProcessing.Agents/imgSaver@30-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + - 100663424 - System.Void Agents/imgSaver@30-2::.cctor() + 100663433 + System.Void ImageProcessing.Agents/imgSaver@30-2::.cctor() - + - Agents/imgSaver@33-4 + ImageProcessing.Agents/imgSaver@33-4 - 100663426 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@33-4::Invoke(Types/Msg) + 100663435 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgSaver@33-4::Invoke(ImageProcessing.Types/Msg) - - - - - - + + + + + + - - - + + + - + - Agents/imgSaver@31-5 + ImageProcessing.Agents/imgSaver@31-5 - 100663428 - Microsoft.FSharp.Control.AsyncReturn Agents/imgSaver@31-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + 100663437 + Microsoft.FSharp.Control.AsyncReturn ImageProcessing.Agents/imgSaver@31-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - Agents/imgSaver@31-3 + ImageProcessing.Agents/imgSaver@31-3 - 100663430 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@31-3::Invoke(Microsoft.FSharp.Core.Unit) + 100663439 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgSaver@31-3::Invoke(Microsoft.FSharp.Core.Unit) - + - + - Agents/imgSaver@30-1 + ImageProcessing.Agents/imgSaver@30-1 - 100663432 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@30-1::Invoke(Microsoft.FSharp.Core.Unit) + 100663441 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgSaver@30-1::Invoke(Microsoft.FSharp.Core.Unit) - + - Agents/imgSaver@28 + ImageProcessing.Agents/imgSaver@28 - 100663434 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgSaver@28::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + 100663443 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgSaver@28::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - Agents/imgProcessor@53-2 + ImageProcessing.Agents/imgProcessor@53-2 - 100663436 - System.Boolean Agents/imgProcessor@53-2::Invoke(Microsoft.FSharp.Core.Unit) + 100663445 + System.Boolean ImageProcessing.Agents/imgProcessor@53-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + - 100663437 - System.Void Agents/imgProcessor@53-2::.cctor() + 100663446 + System.Void ImageProcessing.Agents/imgProcessor@53-2::.cctor() - + - Agents/imgProcessor@59-5 + ImageProcessing.Agents/imgProcessor@59-5 - 100663439 - Types/Msg Agents/imgProcessor@59-5::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) + 100663448 + ImageProcessing.Types/Msg ImageProcessing.Agents/imgProcessor@59-5::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - 100663440 - System.Void Agents/imgProcessor@59-5::.cctor() + 100663449 + System.Void ImageProcessing.Agents/imgProcessor@59-5::.cctor() - + - Agents/imgProcessor@56-4 + ImageProcessing.Agents/imgProcessor@56-4 - 100663442 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@56-4::Invoke(Types/Msg) + 100663451 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgProcessor@56-4::Invoke(ImageProcessing.Types/Msg) - - - - - - - - - + + + + + + + + + - - - + + + - + - Agents/imgProcessor@54-6 + ImageProcessing.Agents/imgProcessor@54-6 - 100663444 - Microsoft.FSharp.Control.AsyncReturn Agents/imgProcessor@54-6::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + 100663453 + Microsoft.FSharp.Control.AsyncReturn ImageProcessing.Agents/imgProcessor@54-6::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - Agents/imgProcessor@54-3 + ImageProcessing.Agents/imgProcessor@54-3 - 100663446 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@54-3::Invoke(Microsoft.FSharp.Core.Unit) + 100663455 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgProcessor@54-3::Invoke(Microsoft.FSharp.Core.Unit) - + - + - Agents/imgProcessor@53-1 + ImageProcessing.Agents/imgProcessor@53-1 - 100663448 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@53-1::Invoke(Microsoft.FSharp.Core.Unit) + 100663457 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgProcessor@53-1::Invoke(Microsoft.FSharp.Core.Unit) - + - Agents/imgProcessor@51 + ImageProcessing.Agents/imgProcessor@51 - 100663450 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/imgProcessor@51::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + 100663459 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/imgProcessor@51::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - Agents/msgLogger@75-2 + ImageProcessing.Agents/msgLogger@75-2 - 100663452 - System.Boolean Agents/msgLogger@75-2::Invoke(Microsoft.FSharp.Core.Unit) + 100663461 + System.Boolean ImageProcessing.Agents/msgLogger@75-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + - 100663453 - System.Void Agents/msgLogger@75-2::.cctor() + 100663462 + System.Void ImageProcessing.Agents/msgLogger@75-2::.cctor() - + - Agents/msgLogger@78-4 + ImageProcessing.Agents/msgLogger@78-4 - 100663455 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@78-4::Invoke(Types/Msg) + 100663464 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/msgLogger@78-4::Invoke(ImageProcessing.Types/Msg) - - - - - + + + + + - - - + + + - + + + + + 100663465 + System.Void ImageProcessing.Agents/msgLogger@78-4::.cctor() + + + - Agents/msgLogger@76-5 + ImageProcessing.Agents/msgLogger@76-5 - 100663457 - Microsoft.FSharp.Control.AsyncReturn Agents/msgLogger@76-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + 100663467 + Microsoft.FSharp.Control.AsyncReturn ImageProcessing.Agents/msgLogger@76-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - Agents/msgLogger@76-3 + ImageProcessing.Agents/msgLogger@76-3 - 100663459 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@76-3::Invoke(Microsoft.FSharp.Core.Unit) + 100663469 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/msgLogger@76-3::Invoke(Microsoft.FSharp.Core.Unit) - + - + - Agents/msgLogger@75-1 + ImageProcessing.Agents/msgLogger@75-1 - 100663461 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@75-1::Invoke(Microsoft.FSharp.Core.Unit) + 100663471 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/msgLogger@75-1::Invoke(Microsoft.FSharp.Core.Unit) - + - Agents/msgLogger@73 + ImageProcessing.Agents/msgLogger@73 - 100663463 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/msgLogger@73::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) + 100663473 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/msgLogger@73::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - 100663464 - System.Void Agents/msgLogger@73::.cctor() + 100663474 + System.Void ImageProcessing.Agents/msgLogger@73::.cctor() - + - Agents/superAgent@96-2 + ImageProcessing.Agents/superAgent@96-2 - 100663466 - System.Boolean Agents/superAgent@96-2::Invoke(Microsoft.FSharp.Core.Unit) + 100663476 + System.Boolean ImageProcessing.Agents/superAgent@96-2::Invoke(Microsoft.FSharp.Core.Unit) - + - + - 100663467 - System.Void Agents/superAgent@96-2::.cctor() + 100663477 + System.Void ImageProcessing.Agents/superAgent@96-2::.cctor() - + - Agents/superAgent@99-4 + ImageProcessing.Agents/superAgent@99-4 - 100663469 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@99-4::Invoke(Types/Msg) + 100663479 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/superAgent@99-4::Invoke(ImageProcessing.Types/Msg) - - - - - - - - - + + + + + + + + + - - - + + + - + - Agents/superAgent@97-5 + ImageProcessing.Agents/superAgent@97-5 - 100663471 - Microsoft.FSharp.Control.AsyncReturn Agents/superAgent@97-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) + 100663481 + Microsoft.FSharp.Control.AsyncReturn ImageProcessing.Agents/superAgent@97-5::Invoke(Microsoft.FSharp.Control.AsyncActivation`1<Microsoft.FSharp.Core.Unit>) - + - Agents/superAgent@97-3 + ImageProcessing.Agents/superAgent@97-3 - 100663473 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@97-3::Invoke(Microsoft.FSharp.Core.Unit) + 100663483 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/superAgent@97-3::Invoke(Microsoft.FSharp.Core.Unit) - + - + - Agents/superAgent@96-1 + ImageProcessing.Agents/superAgent@96-1 - 100663475 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@96-1::Invoke(Microsoft.FSharp.Core.Unit) + 100663485 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/superAgent@96-1::Invoke(Microsoft.FSharp.Core.Unit) - - - - - - - Agents/superAgent@94 - - - - 100663477 - Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> Agents/superAgent@94::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg>) - - - - - - + - Agents/superAgents@124 + ImageProcessing.Agents/superAgent@94 - 100663479 - Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Types/Msg> Agents/superAgents@124::Invoke(System.Int32) + 100663487 + Microsoft.FSharp.Control.FSharpAsync`1<Microsoft.FSharp.Core.Unit> ImageProcessing.Agents/superAgent@94::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>) - + - + - Agents/superImageProcessing@130 + ImageProcessing.Agents/superImageProcessing@130 - 100663481 - Types/Msg Agents/superImageProcessing@130::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) + 100663489 + ImageProcessing.Types/Msg ImageProcessing.Agents/superImageProcessing@130::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - 100663482 - System.Void Agents/superImageProcessing@130::.cctor() + 100663490 + System.Void ImageProcessing.Agents/superImageProcessing@130::.cctor() - + - Agents/superImageProcessing@132-1 + ImageProcessing.Agents/superImageProcessing@132-1 - 100663484 - Types/Msg Agents/superImageProcessing@132-1::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) + 100663492 + ImageProcessing.Types/Msg ImageProcessing.Agents/superImageProcessing@132-1::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<Microsoft.FSharp.Core.Unit>) - + - 100663485 - System.Void Agents/superImageProcessing@132-1::.cctor() + 100663493 + System.Void ImageProcessing.Agents/superImageProcessing@132-1::.cctor() - + - - GpuProcessing + + ImageProcessing.GpuProcessing - - - 100663486 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::applyFilter(System.Single[][],Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - - - - + + + 100663494 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.GpuProcessing::applyFilter(System.Single[][],Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + - + - - - 100663487 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::rotate(Types/Side,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - - - - + + + 100663495 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.GpuProcessing::rotate(ImageProcessing.Types/Side,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + - + - - - 100663488 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::mirror(Types/MirrorDirection,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - - - - + + + 100663496 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.GpuProcessing::mirror(ImageProcessing.Types/MirrorDirection,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + - + - - - 100663489 - Microsoft.FSharp.Core.FSharpFunc`2<MyImage/MyImage,MyImage/MyImage> GpuProcessing::fishEye(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) - - - - + + + 100663497 + Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage> ImageProcessing.GpuProcessing::fishEye(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,Brahma.FSharp.ClContext,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>) + - + - GpuProcessing/kernel@21 + ImageProcessing.GpuProcessing/kernel@21 - 100663491 - Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>>> GpuProcessing/kernel@21::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32) + 100663499 + Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>>> ImageProcessing.GpuProcessing/kernel@21::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32) - + - GpuProcessing/kernel@21D + ImageProcessing.GpuProcessing/kernel@21D - 100663493 - Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@21D::Invoke(System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + 100663501 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuProcessing/kernel@21D::Invoke(System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - + - GpuProcessing/result@44 + ImageProcessing.GpuProcessing/result@44 - 100663495 - Brahma.FSharp.Msg GpuProcessing/result@44::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) + 100663503 + Brahma.FSharp.Msg ImageProcessing.GpuProcessing/result@44::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - + - + - GpuProcessing/applyFilter@23-1 + ImageProcessing.GpuProcessing/applyFilter@23-1 - 100663497 - MyImage/MyImage GpuProcessing/applyFilter@23-1::Invoke(MyImage/MyImage) + 100663505 + ImageProcessing.MyImage/MyImage ImageProcessing.GpuProcessing/applyFilter@23-1::Invoke(ImageProcessing.MyImage/MyImage) - - - - - - - - - - - + + + + + + + + + + + - + - GpuProcessing/kernel@63-1 + ImageProcessing.GpuProcessing/kernel@63-1 - 100663499 - Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>> GpuProcessing/kernel@63-1::Invoke(Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32) + 100663507 + Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>> ImageProcessing.GpuProcessing/kernel@63-1::Invoke(ImageProcessing.Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32) - + - GpuProcessing/kernel@63-1D + ImageProcessing.GpuProcessing/kernel@63-1D - 100663501 - Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@63-1D::Invoke(Brahma.FSharp.ClArray`1<System.Byte>) + 100663509 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuProcessing/kernel@63-1D::Invoke(Brahma.FSharp.ClArray`1<System.Byte>) - + - GpuProcessing/result@80-1 + ImageProcessing.GpuProcessing/result@80-1 - 100663503 - Brahma.FSharp.Msg GpuProcessing/result@80-1::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) + 100663511 + Brahma.FSharp.Msg ImageProcessing.GpuProcessing/result@80-1::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - + - + - GpuProcessing/rotate@65 + ImageProcessing.GpuProcessing/rotate@65 - 100663505 - MyImage/MyImage GpuProcessing/rotate@65::Invoke(MyImage/MyImage) + 100663513 + ImageProcessing.MyImage/MyImage ImageProcessing.GpuProcessing/rotate@65::Invoke(ImageProcessing.MyImage/MyImage) - - - - - - - + + + + + + + - + - GpuProcessing/kernel@98-2 + ImageProcessing.GpuProcessing/kernel@98-2 - 100663507 - Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>> GpuProcessing/kernel@98-2::Invoke(Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32) + 100663515 + Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Brahma.FSharp.ClArray`1<System.Byte>> ImageProcessing.GpuProcessing/kernel@98-2::Invoke(ImageProcessing.Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32) - + - GpuProcessing/kernel@98-2D + ImageProcessing.GpuProcessing/kernel@98-2D - 100663509 - Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@98-2D::Invoke(Brahma.FSharp.ClArray`1<System.Byte>) + 100663517 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuProcessing/kernel@98-2D::Invoke(Brahma.FSharp.ClArray`1<System.Byte>) - + - GpuProcessing/result@115-2 + ImageProcessing.GpuProcessing/result@115-2 - 100663511 - Brahma.FSharp.Msg GpuProcessing/result@115-2::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) + 100663519 + Brahma.FSharp.Msg ImageProcessing.GpuProcessing/result@115-2::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - + - + - GpuProcessing/mirror@100 + ImageProcessing.GpuProcessing/mirror@100 - 100663513 - MyImage/MyImage GpuProcessing/mirror@100::Invoke(MyImage/MyImage) + 100663521 + ImageProcessing.MyImage/MyImage ImageProcessing.GpuProcessing/mirror@100::Invoke(ImageProcessing.MyImage/MyImage) - - - - - - - + + + + + + + - + - GpuProcessing/kernel@132-3 + ImageProcessing.GpuProcessing/kernel@132-3 - 100663515 - Brahma.FSharp.ClArray`1<System.Byte> GpuProcessing/kernel@132-3::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + 100663523 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuProcessing/kernel@132-3::Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - + - GpuProcessing/result@149-3 + ImageProcessing.GpuProcessing/result@149-3 - 100663517 - Brahma.FSharp.Msg GpuProcessing/result@149-3::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) + 100663525 + Brahma.FSharp.Msg ImageProcessing.GpuProcessing/result@149-3::Invoke(Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1<System.Byte[]>) - + - + - GpuProcessing/fishEye@134 + ImageProcessing.GpuProcessing/fishEye@134 - 100663519 - MyImage/MyImage GpuProcessing/fishEye@134::Invoke(MyImage/MyImage) + 100663527 + ImageProcessing.MyImage/MyImage ImageProcessing.GpuProcessing/fishEye@134::Invoke(ImageProcessing.MyImage/MyImage) - - - - - - - + + + + + + + - + - GpuKernels + ImageProcessing.GpuKernels - 100663520 - Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>> GpuKernels::applyFilterKernel(Brahma.FSharp.ClContext) + 100663528 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>> ImageProcessing.GpuKernels::applyFilterKernel(Brahma.FSharp.ClContext) - - + + - + - 100663521 - Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::applyFilterProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + 100663529 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuKernels::applyFilterProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - - - - - + + + + + - + - 100663522 - Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>>> GpuKernels::rotateKernel(Brahma.FSharp.ClContext) + 100663530 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>>> ImageProcessing.GpuKernels::rotateKernel(Brahma.FSharp.ClContext) - - + + - + - 100663523 - Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::rotateKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + 100663531 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuKernels::rotateKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,ImageProcessing.Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - - - - - - - - + + + + + + + + - - + + - + - 100663524 - Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>>> GpuKernels::mirrorKernel(Brahma.FSharp.ClContext) + 100663532 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>>> ImageProcessing.GpuKernels::mirrorKernel(Brahma.FSharp.ClContext) - - + + - + - 100663525 - Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::mirrorKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + 100663533 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuKernels::mirrorKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,ImageProcessing.Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - - - - - - - - + + + + + + + + - - + + - + - 100663526 - Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>> GpuKernels::fishEyeKernel(Brahma.FSharp.ClContext) + 100663534 + Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<a>,Microsoft.FSharp.Core.Unit>>>>> ImageProcessing.GpuKernels::fishEyeKernel(Brahma.FSharp.ClContext) - - + + - + - 100663527 - Brahma.FSharp.ClArray`1<System.Byte> GpuKernels::fishEyeKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) + 100663535 + Brahma.FSharp.ClArray`1<System.Byte> ImageProcessing.GpuKernels::fishEyeKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>) - - - - - + + + + + - + - GpuKernels/applyFilterProcessor@50 + ImageProcessing.GpuKernels/applyFilterProcessor@50 - 100663529 - Microsoft.FSharp.Core.Unit GpuKernels/applyFilterProcessor@50::Invoke(Microsoft.FSharp.Core.Unit) + 100663537 + Microsoft.FSharp.Core.Unit ImageProcessing.GpuKernels/applyFilterProcessor@50::Invoke(Microsoft.FSharp.Core.Unit) - + - + - GpuKernels/rotateKernelProcessor@87 + ImageProcessing.GpuKernels/rotateKernelProcessor@87 - 100663531 - Microsoft.FSharp.Core.Unit GpuKernels/rotateKernelProcessor@87::Invoke(Microsoft.FSharp.Core.Unit) + 100663539 + Microsoft.FSharp.Core.Unit ImageProcessing.GpuKernels/rotateKernelProcessor@87::Invoke(Microsoft.FSharp.Core.Unit) - + - + - GpuKernels/mirrorKernelProcessor@124 + ImageProcessing.GpuKernels/mirrorKernelProcessor@124 - 100663533 - Microsoft.FSharp.Core.Unit GpuKernels/mirrorKernelProcessor@124::Invoke(Microsoft.FSharp.Core.Unit) + 100663541 + Microsoft.FSharp.Core.Unit ImageProcessing.GpuKernels/mirrorKernelProcessor@124::Invoke(Microsoft.FSharp.Core.Unit) - + - + - GpuKernels/fishEyeKernelProcessor@173 + ImageProcessing.GpuKernels/fishEyeKernelProcessor@173 - 100663535 - Microsoft.FSharp.Core.Unit GpuKernels/fishEyeKernelProcessor@173::Invoke(Microsoft.FSharp.Core.Unit) + 100663543 + Microsoft.FSharp.Core.Unit ImageProcessing.GpuKernels/fishEyeKernelProcessor@173::Invoke(Microsoft.FSharp.Core.Unit) - + - + - - CpuProcessing + + ImageProcessing.CpuProcessing + + + 100663544 + System.Single ImageProcessing.CpuProcessing::processPixel@19(ImageProcessing.MyImage/MyImage,System.Int32,System.Single[],System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 100663536 - MyImage/MyImage CpuProcessing::applyFilter(System.Single[][],MyImage/MyImage) + 100663545 + ImageProcessing.MyImage/MyImage ImageProcessing.CpuProcessing::applyFilter(System.Single[][],ImageProcessing.MyImage/MyImage) - - - + + + - + - 100663537 - MyImage/MyImage CpuProcessing::rotate(Types/Side,MyImage/MyImage) + 100663546 + ImageProcessing.MyImage/MyImage ImageProcessing.CpuProcessing::rotate(ImageProcessing.Types/Side,ImageProcessing.MyImage/MyImage) - - - - - - - + + + + + + + - - - - + + + + - + - 100663538 - MyImage/MyImage CpuProcessing::mirror(Types/MirrorDirection,MyImage/MyImage) + 100663547 + ImageProcessing.MyImage/MyImage ImageProcessing.CpuProcessing::mirror(ImageProcessing.Types/MirrorDirection,ImageProcessing.MyImage/MyImage) - - - - - - - + + + + + + + - - - - + + + + - + + + + + 100663548 + System.Tuple`2<System.Double,System.Double> ImageProcessing.CpuProcessing::getFishCoordinates@77(System.Double,System.Double,System.Double) + + + + + + + + + + + - 100663539 - MyImage/MyImage CpuProcessing::fishEye(MyImage/MyImage) + 100663549 + ImageProcessing.MyImage/MyImage ImageProcessing.CpuProcessing::fishEye(ImageProcessing.MyImage/MyImage) - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - CpuProcessing/processPixel@31-1 + ImageProcessing.CpuProcessing/processPixel@31-1 - 100663541 - System.Single CpuProcessing/processPixel@31-1::Invoke(System.Single,System.Single,System.Single) + 100663551 + System.Single ImageProcessing.CpuProcessing/processPixel@31-1::Invoke(System.Single,System.Single,System.Single) - + - + - 100663542 - System.Void CpuProcessing/processPixel@31-1::.cctor() + 100663552 + System.Void ImageProcessing.CpuProcessing/processPixel@31-1::.cctor() - - - - - - - CpuProcessing/processPixel@20 - - - - 100663544 - System.Single CpuProcessing/processPixel@20::Invoke(System.Int32) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - CpuProcessing/applyFilter@33 + ImageProcessing.CpuProcessing/applyFilter@33 - 100663546 - System.Byte CpuProcessing/applyFilter@33::Invoke(System.Int32,System.Byte) + 100663554 + System.Byte ImageProcessing.CpuProcessing/applyFilter@33::Invoke(System.Int32,System.Byte) - + - - - - - - - CpuProcessing/getFishCoordinates@78 - - - - 100663548 - System.Tuple`2<System.Double,System.Double> CpuProcessing/getFishCoordinates@78::Invoke(System.Double,System.Double,System.Double) - - - - - - - - - - - + - - MyImage + + ImageProcessing.MyImage - 100663687 - MyImage/MyImage MyImage::loadAsImage(System.String) + 100663693 + ImageProcessing.MyImage/MyImage ImageProcessing.MyImage::loadAsImage(System.String) - - - - + + + + - + - - 100663688 - System.Void MyImage::saveImage(MyImage/MyImage,System.String) + + 100663694 + System.Void ImageProcessing.MyImage::saveImage(ImageProcessing.MyImage/MyImage,System.String) - - + - + - MyImage/MyImage + ImageProcessing.MyImage/MyImage - 100663693 - System.Int32 MyImage/MyImage::CompareTo(MyImage/MyImage) + 100663699 + System.Int32 ImageProcessing.MyImage/MyImage::CompareTo(ImageProcessing.MyImage/MyImage) - + - 100663694 - System.Int32 MyImage/MyImage::CompareTo(System.Object) + 100663700 + System.Int32 ImageProcessing.MyImage/MyImage::CompareTo(System.Object) - + - 100663695 - System.Int32 MyImage/MyImage::CompareTo(System.Object,System.Collections.IComparer) + 100663701 + System.Int32 ImageProcessing.MyImage/MyImage::CompareTo(System.Object,System.Collections.IComparer) - + - 100663696 - System.Int32 MyImage/MyImage::GetHashCode(System.Collections.IEqualityComparer) + 100663702 + System.Int32 ImageProcessing.MyImage/MyImage::GetHashCode(System.Collections.IEqualityComparer) - + - 100663697 - System.Int32 MyImage/MyImage::GetHashCode() + 100663703 + System.Int32 ImageProcessing.MyImage/MyImage::GetHashCode() - + - 100663698 - System.Boolean MyImage/MyImage::Equals(System.Object,System.Collections.IEqualityComparer) + 100663704 + System.Boolean ImageProcessing.MyImage/MyImage::Equals(System.Object,System.Collections.IEqualityComparer) - + - 100663699 - System.Void MyImage/MyImage::.ctor(System.Byte[],System.Int32,System.Int32,System.String) + 100663705 + System.Void ImageProcessing.MyImage/MyImage::.ctor(System.Byte[],System.Int32,System.Int32,System.String) - + - + - 100663700 - System.Boolean MyImage/MyImage::Equals(MyImage/MyImage) + 100663706 + System.Boolean ImageProcessing.MyImage/MyImage::Equals(ImageProcessing.MyImage/MyImage) - + - 100663701 - System.Boolean MyImage/MyImage::Equals(System.Object) + 100663707 + System.Boolean ImageProcessing.MyImage/MyImage::Equals(System.Object) - + - Kernels + ImageProcessing.Kernels - 100663702 - System.Single[][] Kernels::get_gaussianBlurKernel() + 100663708 + System.Single[][] ImageProcessing.Kernels::get_gaussianBlurKernel() - + - 100663703 - System.Single[][] Kernels::get_edgesKernel() + 100663709 + System.Int32[][] ImageProcessing.Kernels::get_arg@1() - + - 100663704 - System.Single[][] Kernels::get_gaussianBlur7x7Kernel() + 100663710 + System.Int32[][] ImageProcessing.Kernels::get_array@1() - + - 100663705 - System.Single[][] Kernels::get_sharpenKernel() + 100663711 + System.Single[][] ImageProcessing.Kernels::get_res@1() - + - 100663706 - System.Single[][] Kernels::get_embossKernel() + 100663712 + System.Single[][] ImageProcessing.Kernels::get_edgesKernel() + + + + + + + 100663713 + System.Int32[][] ImageProcessing.Kernels::get_arg@1-1() - + + + + + 100663714 + System.Int32[][] ImageProcessing.Kernels::get_array@1-1() + + + + + + + 100663715 + System.Single[][] ImageProcessing.Kernels::get_res@1-1() + + + + + + + 100663716 + System.Single[][] ImageProcessing.Kernels::get_gaussianBlur7x7Kernel() + + + + + + + 100663717 + System.Int32[][] ImageProcessing.Kernels::get_arg@1-2() + + + + + + + 100663718 + System.Int32[][] ImageProcessing.Kernels::get_array@1-2() + + + + + + + 100663719 + System.Single[][] ImageProcessing.Kernels::get_res@1-2() + + + + + + + 100663720 + System.Single[][] ImageProcessing.Kernels::get_sharpenKernel() + + + + + + + 100663721 + System.Int32[][] ImageProcessing.Kernels::get_arg@1-3() + + + + + + + 100663722 + System.Int32[][] ImageProcessing.Kernels::get_array@1-3() + + + + + + + 100663723 + System.Single[][] ImageProcessing.Kernels::get_res@1-3() + + + + + + + 100663724 + System.Single[][] ImageProcessing.Kernels::get_embossKernel() + + + - 100663707 - System.Void Kernels::.cctor() + 100663725 + System.Void ImageProcessing.Kernels::.cctor() - + - - <StartupCode$ImageProcessing>.$Kernels + + <StartupCode$ImageProcessing>.$ImageProcessing.Kernels - - - 100663708 - System.Void <StartupCode$ImageProcessing>.$Kernels::.cctor() + + + 100663726 + System.Void <StartupCode$ImageProcessing>.$ImageProcessing.Kernels::.cctor() - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - C:\Users\Леонид\ImageProcessing\tests\ImageProcessing.Tests\bin\Debug\net7.0\ImageProcessing.Tests.dll - 2023-12-16T14:36:32.1428499Z + + C:\Users\Леонид\ImageProcessing\tests\ImageProcessing.Tests\bin\Release\net7.0\ImageProcessing.Tests.dll + 2023-12-16T20:04:10.5468079Z ImageProcessing.Tests From 43150f5b9d37f514050d2c5be821bb0b9a7f3588 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Mon, 18 Dec 2023 01:07:38 +0300 Subject: [PATCH 07/27] Add assembly name --- src/ImageProcessing/ImageProcessing.fsproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ImageProcessing/ImageProcessing.fsproj b/src/ImageProcessing/ImageProcessing.fsproj index ce3e36ef..d52dbd4b 100644 --- a/src/ImageProcessing/ImageProcessing.fsproj +++ b/src/ImageProcessing/ImageProcessing.fsproj @@ -4,6 +4,7 @@ net7.0 false true + LeonidLodygin.ImageProcessing LeonidLodygin.ImageProcessing From c22c0bab2dc8ad8ef0bfe6d6183c5c3ea4eef2c8 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Mon, 18 Dec 2023 01:08:59 +0300 Subject: [PATCH 08/27] Fix readme --- CHANGELOG.md | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e040bb3a..79f71190 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -## [0.1.0] - 2023-12-16 -First release - ### Added - Processing images by applying filters - Rotating, reflecting images - Parallel image processing using agents - Processing using the CPU or any GPU on your device +## [0.1.0] - 2023-12-16 +First release + [0.1.0]: https://github.com/LeonidLodygin/ImageProcessing/releases/tag/v1.0.0 diff --git a/README.md b/README.md index 5882e06d..90c87006 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ Simple image processing on GPGPU in F# using [Brahma.FSharp](https://github.com/ > dotnet run -i *input path* -o *output path* -mod FishEye -gpu AnyGpu ``` ## Result -| Original | Fisheye | -|:-----------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------| -| ![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/images/example.jpg) | ![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/images/processed.jpg) | +| Original | Fisheye | +|:------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------| +| ![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/gh-pages/images/example.jpg) | ![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/gh-pages/images/processed.jpg) | ## Contributors From dc9bd1695ada3b6eee50681f9a0eaf47ee848493 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Mon, 18 Dec 2023 16:13:43 +0300 Subject: [PATCH 09/27] Fix readme and props --- Directory.Build.props | 2 +- README.md | 4 +++- src/Directory.Build.props | 1 + src/ImageProcessing/ImageProcessing.fsproj | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 581fb248..5e6cc1d4 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -3,7 +3,7 @@ f#, fsharp https://github.com/LeonidLodygin/ImageProcessing - https://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md + https://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md false git LeonidLodygin diff --git a/README.md b/README.md index 90c87006..4048ede3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ Simple image processing on GPGPU in F# using [Brahma.FSharp](https://github.com/ * Process one image or a whole set of images at a time ## Installation -* TODO +```sh +> dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0 +``` ## Quick start ```sh diff --git a/src/Directory.Build.props b/src/Directory.Build.props index a841d7e5..1ea6fcf3 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,6 +2,7 @@ false + true true diff --git a/src/ImageProcessing/ImageProcessing.fsproj b/src/ImageProcessing/ImageProcessing.fsproj index d52dbd4b..711bdaf0 100644 --- a/src/ImageProcessing/ImageProcessing.fsproj +++ b/src/ImageProcessing/ImageProcessing.fsproj @@ -4,7 +4,9 @@ net7.0 false true + README.md LeonidLodygin.ImageProcessing + LeonidLodygin.ImageProcessing LeonidLodygin.ImageProcessing From 8da9ce0ef11f07fab750684eddb2afeda0a8d399 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Tue, 19 Dec 2023 13:34:40 +0300 Subject: [PATCH 10/27] docs template --- docsSrc/_menu-item_template.html | 1 + docsSrc/_menu_template.html | 9 + docsSrc/_template.html | 164 +++++++ docsSrc/content/fsdocs-custom.css | 15 + docsSrc/content/fsdocs-dark.css | 50 +++ docsSrc/content/fsdocs-light.css | 43 ++ docsSrc/content/fsdocs-main.css | 604 ++++++++++++++++++++++++++ docsSrc/content/navbar-fixed-left.css | 91 ++++ docsSrc/content/theme-toggle.js | 68 +++ docsSrc/index.md | 56 +++ 10 files changed, 1101 insertions(+) create mode 100644 docsSrc/_menu-item_template.html create mode 100644 docsSrc/_menu_template.html create mode 100644 docsSrc/_template.html create mode 100644 docsSrc/content/fsdocs-custom.css create mode 100644 docsSrc/content/fsdocs-dark.css create mode 100644 docsSrc/content/fsdocs-light.css create mode 100644 docsSrc/content/fsdocs-main.css create mode 100644 docsSrc/content/navbar-fixed-left.css create mode 100644 docsSrc/content/theme-toggle.js create mode 100644 docsSrc/index.md diff --git a/docsSrc/_menu-item_template.html b/docsSrc/_menu-item_template.html new file mode 100644 index 00000000..dc1b656a --- /dev/null +++ b/docsSrc/_menu-item_template.html @@ -0,0 +1 @@ +
  • {{fsdocs-menu-item-content}}
  • \ No newline at end of file diff --git a/docsSrc/_menu_template.html b/docsSrc/_menu_template.html new file mode 100644 index 00000000..066716c9 --- /dev/null +++ b/docsSrc/_menu_template.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/docsSrc/_template.html b/docsSrc/_template.html new file mode 100644 index 00000000..6e7c39e9 --- /dev/null +++ b/docsSrc/_template.html @@ -0,0 +1,164 @@ + + + + + + {{fsdocs-page-title}} + + + + + + + + + + + + + + + + {{fsdocs-watch-script}} + + + + + + +
    + {{fsdocs-content}} + {{fsdocs-tooltips}} +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docsSrc/content/fsdocs-custom.css b/docsSrc/content/fsdocs-custom.css new file mode 100644 index 00000000..c2da89ad --- /dev/null +++ b/docsSrc/content/fsdocs-custom.css @@ -0,0 +1,15 @@ +.fsharp-icon-logo { + width: 25px; + margin-top: -2px; + -webkit-filter: grayscale(100%) brightness(1) invert(1); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%) brightness(1) invert(1); +} + + +body .navbar .dropdown-menu .active .bi { + display: block !important; +} + +nav.navbar .dropdown-item img.fsharp-icon-logo { + margin-right: 0px; +} \ No newline at end of file diff --git a/docsSrc/content/fsdocs-dark.css b/docsSrc/content/fsdocs-dark.css new file mode 100644 index 00000000..001b6530 --- /dev/null +++ b/docsSrc/content/fsdocs-dark.css @@ -0,0 +1,50 @@ +@import url('https://raw.githubusercontent.com/tonsky/FiraCode/fixed/distr/fira_code.css'); +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +:root { + --fsdocs-text-color:#d1d1d1; + --fsdocs-pre-border-color: #000000; + --fsdocs-pre-border-color-top: #070707; + --fsdocs-pre-background-color: #1E1E1E; + --fsdocs-pre-color: #e2e2e2; + --fsdocs-table-pre-background-color: #1d1d1d; + --fsdocs-table-pre-color: #c9c9c9; + + --fsdocs-code-strings-color: #ea9a75; + --fsdocs-code-printf-color: #E0C57F; + --fsdocs-code-escaped-color: #EA8675; + --fsdocs-code-identifiers-color: var(--fsdocs-text-color); + --fsdocs-code-module-color: #43AEC6; + --fsdocs-code-reference-color: #6a8dd8; + --fsdocs-code-value-color: #43AEC6; + --fsdocs-code-interface-color: #43AEC6; + --fsdocs-code-typearg-color: #43AEC6; + --fsdocs-code-disposable-color: #2f798a; + --fsdocs-code-property-color: #43AEC6; + --fsdocs-code-punctuation-color: #43AEC6; + --fsdocs-code-punctuation2-color: #e1e1e1; + --fsdocs-code-function-color: #e1e1e1; + --fsdocs-code-function2-color: #43AEC6; + --fsdocs-code-activepattern-color: #4ec9b0; + --fsdocs-code-unioncase-color: #4ec9b0; + --fsdocs-code-enumeration-color: #4ec9b0; + --fsdocs-code-keywords-color: #2248c4; + --fsdocs-code-comment-color: #329215; + --fsdocs-code-operators-color: #af75c1; + --fsdocs-code-numbers-color: #96C71D; + --fsdocs-code-linenumbers-color: #80b0b0; + --fsdocs-code-mutable-color: #997f0c; + --fsdocs-code-inactive-color: #808080; + --fsdocs-code-preprocessor-color: #af75c1; + --fsdocs-code-fsioutput-color: #808080; + --fsdocs-code-tooltip-color: #d1d1d1; +} + + +.fsdocs-source-link img { + -webkit-filter: grayscale(100%) brightness(1) invert(1); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%) brightness(1) invert(1); +} \ No newline at end of file diff --git a/docsSrc/content/fsdocs-light.css b/docsSrc/content/fsdocs-light.css new file mode 100644 index 00000000..474512dc --- /dev/null +++ b/docsSrc/content/fsdocs-light.css @@ -0,0 +1,43 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +:root { + --fsdocs-text-color:#262626; + --fsdocs-pre-border-color: #d8d8d8; + --fsdocs-pre-border-color-top: #e3e3e3; + --fsdocs-pre-background-color: #f3f4f7; + --fsdocs-pre-color: #8e0e2b; + --fsdocs-table-pre-background-color: #fff7ed; + --fsdocs-table-pre-color: #837b79; + + --fsdocs-code-strings-color: #dd1144; + --fsdocs-code-printf-color: #E0C57F; + --fsdocs-code-escaped-color: #EA8675; + --fsdocs-code-identifiers-color: var(--fsdocs-text-color); + --fsdocs-code-module-color: #009999; + --fsdocs-code-reference-color: #4974D1; + --fsdocs-code-value-color: #43AEC6; + --fsdocs-code-interface-color: #43AEC6; + --fsdocs-code-typearg-color: #43AEC6; + --fsdocs-code-disposable-color: #43AEC6; + --fsdocs-code-property-color: #43AEC6; + --fsdocs-code-punctuation-color: #43AEC6; + --fsdocs-code-punctuation2-color: #var(--fsdocs-text-color); + --fsdocs-code-function-color: #e1e1e1; + --fsdocs-code-function2-color: #990000; + --fsdocs-code-activepattern-color: #4ec9b0; + --fsdocs-code-unioncase-color: #4ec9b0; + --fsdocs-code-enumeration-color: #4ec9b0; + --fsdocs-code-keywords-color: #b68015; + --fsdocs-code-comment-color: #808080; + --fsdocs-code-operators-color: #af75c1; + --fsdocs-code-numbers-color: #009999; + --fsdocs-code-linenumbers-color: #80b0b0; + --fsdocs-code-mutable-color: #d1d1d1; + --fsdocs-code-inactive-color: #808080; + --fsdocs-code-preprocessor-color: #af75c1; + --fsdocs-code-fsioutput-color: #808080; + --fsdocs-code-tooltip-color: #d1d1d1; +} \ No newline at end of file diff --git a/docsSrc/content/fsdocs-main.css b/docsSrc/content/fsdocs-main.css new file mode 100644 index 00000000..a1748d2f --- /dev/null +++ b/docsSrc/content/fsdocs-main.css @@ -0,0 +1,604 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: 'Hind Vadodara', sans-serif; + /* padding-top: 0px; + padding-bottom: 40px; +*/ +} + +blockquote { + margin: 0 1em 0 0.25em; + margin-top: 0px; + margin-right: 1em; + margin-bottom: 0px; + margin-left: 0.25em; + padding: 0 .75em 0 1em; + border-left: 1px solid #777; + border-right: 0px solid #777; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} + + .masthead .muted a { + text-decoration: none; + color: #999999; + } + + .masthead ul, .masthead li { + margin-bottom: 0px; + } + + .masthead .nav li { + margin-top: 15px; + font-size: 110%; + } + + .masthead h3 { + margin-top: 15px; + margin-bottom: 5px; + font-size: 170%; + } + +/*-------------------------------------------------------------------------- + Formatting fsdocs-content +/*--------------------------------------------------------------------------*/ + +/* Change font sizes for headings etc. */ +#fsdocs-content h1 { + margin: 30px 0px 15px 0px; + /* font-weight: 400; */ + font-size: 2rem; + letter-spacing: 1.78px; + line-height: 2.5rem; + font-weight: 400; +} + +#fsdocs-content h2 { + font-size: 1.6rem; + margin: 20px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content h3 { + font-size: 1.2rem; + margin: 15px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content hr { + margin: 0px 0px 20px 0px; +} + +#fsdocs-content li { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + margin: 0px 0px 15px 0px; +} + +#fsdocs-content p { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: var(--fsdocs-text-color);; +} + +#fsdocs-content a:not(.btn) { + color: #4974D1; +} +/* remove the default bootstrap bold on dt elements */ +#fsdocs-content dt { + font-weight: normal; +} + + + +/*-------------------------------------------------------------------------- + Formatting tables in fsdocs-content, using learn.microsoft.com tables +/*--------------------------------------------------------------------------*/ + +#fsdocs-content .table { + table-layout: auto; + width: 100%; + font-size: 0.875rem; +} + + #fsdocs-content .table caption { + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 2px; + text-transform: uppercase; + padding: 1.125rem; + border-width: 0 0 1px; + border-style: solid; + border-color: #e3e3e3; + text-align: right; + } + + #fsdocs-content .table td, + #fsdocs-content .table th { + display: table-cell; + word-wrap: break-word; + padding: 0.75rem 1rem 0.75rem 0rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #e3e3e3; + border-right: 0; + border-left: 0; + border-bottom: 0; + border-style: solid; + } + + /* suppress the top line on inner lists such as tables of exceptions */ + #fsdocs-content .table .fsdocs-exception-list td, + #fsdocs-content .table .fsdocs-exception-list th { + border-top: 0 + } + + #fsdocs-content .table td p:first-child, + #fsdocs-content .table th p:first-child { + margin-top: 0; + } + + #fsdocs-content .table td.nowrap, + #fsdocs-content .table th.nowrap { + white-space: nowrap; + } + + #fsdocs-content .table td.is-narrow, + #fsdocs-content .table th.is-narrow { + width: 15%; + } + + #fsdocs-content .table th:not([scope='row']) { + border-top: 0; + border-bottom: 1px; + } + + #fsdocs-content .table > caption + thead > tr:first-child > td, + #fsdocs-content .table > colgroup + thead > tr:first-child > td, + #fsdocs-content .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + #fsdocs-content .table table-striped > tbody > tr:nth-of-type(odd) { + background-color: var(--box-shadow-light); + } + + #fsdocs-content .table.min { + width: unset; + } + + #fsdocs-content .table.is-left-aligned td:first-child, + #fsdocs-content .table.is-left-aligned th:first-child { + padding-left: 0; + } + + #fsdocs-content .table.is-left-aligned td:first-child a, + #fsdocs-content .table.is-left-aligned th:first-child a { + outline-offset: -0.125rem; + } + +@media screen and (max-width: 767px), screen and (min-resolution: 120dpi) and (max-width: 767.9px) { + #fsdocs-content .table.is-stacked-mobile td:nth-child(1) { + display: block; + width: 100%; + padding: 1rem 0; + } + + #fsdocs-content .table.is-stacked-mobile td:not(:nth-child(1)) { + display: block; + border-width: 0; + padding: 0 0 1rem; + } +} + +#fsdocs-content .table.has-inner-borders th, +#fsdocs-content .table.has-inner-borders td { + border-right: 1px solid #e3e3e3; +} + + #fsdocs-content .table.has-inner-borders th:last-child, + #fsdocs-content .table.has-inner-borders td:last-child { + border-right: none; + } + +.fsdocs-entity-list .fsdocs-entity-name { + width: 25%; + font-weight: bold; +} + +.fsdocs-member-list .fsdocs-member-usage { + width: 35%; +} + +/*-------------------------------------------------------------------------- + Formatting xmldoc sections in fsdocs-content +/*--------------------------------------------------------------------------*/ + +.fsdocs-xmldoc, .fsdocs-entity-xmldoc, .fsdocs-member-xmldoc { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: var(--fsdocs-text-color);; +} + +.fsdocs-xmldoc h1 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h2 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h3 { + font-size: 1.1rem; + margin: 10px 0px 0px 0px; +} + +/* #fsdocs-nav .searchbox { + margin-top: 30px; + margin-bottom: 30px; +} */ + +#fsdocs-nav img.logo{ + width:90%; + /* height:140px; */ + /* margin:10px 0px 0px 20px; */ + margin-top:40px; + border-style:none; +} + +#fsdocs-nav input{ + /* margin-left: 20px; */ + margin-right: 20px; + margin-top: 20px; + margin-bottom: 20px; + width: 93%; + -webkit-border-radius: 0; + border-radius: 0; +} + +#fsdocs-nav { + /* margin-left: -5px; */ + /* width: 90%; */ + font-size:0.95rem; +} + +#fsdocs-nav li.nav-header{ + /* margin-left: -5px; */ + /* width: 90%; */ + padding-left: 0; + color: var(--fsdocs-text-color);; + text-transform: none; + font-size:16px; + margin-top: 9px; + font-weight: bold; +} + +#fsdocs-nav a{ + padding-left: 0; + color: #6c6c6d; + /* margin-left: 5px; */ + /* width: 90%; */ +} + +/*-------------------------------------------------------------------------- + Formatting pre and code sections in fsdocs-content (code highlighting is + further below) +/*--------------------------------------------------------------------------*/ + +#fsdocs-content code { + /* font-size: 0.83rem; */ + font: 0.85rem 'Roboto Mono', monospace; + background-color: #f7f7f900; + border: 0px; + padding: 0px; + /* word-wrap: break-word; */ + /* white-space: pre; */ +} + +/* omitted */ +#fsdocs-content span.omitted { + background: #3c4e52; + border-radius: 5px; + color: #808080; + padding: 0px 0px 1px 0px; +} + +#fsdocs-content pre .fssnip code { + font: 0.86rem 'Roboto Mono', monospace; +} + +#fsdocs-content table.pre, +#fsdocs-content pre.fssnip, +#fsdocs-content pre { + line-height: 13pt; + border: 0px solid var(--fsdocs-pre-border-color); + border-top: 0px solid var(--fsdocs-pre-border-color-top); + border-collapse: separate; + white-space: pre; + font: 0.86rem 'Roboto Mono', monospace; + width: 100%; + margin: 10px 0px 20px 0px; + background-color: var(--fsdocs-pre-background-color); + padding: 10px; + border-radius: 5px; + color: var(--fsdocs-pre-color); + max-width: none; + box-sizing: border-box; +} + +#fsdocs-content pre.fssnip code { + font: 0.86rem 'Roboto Mono', monospace; + font-weight: 600; +} + +#fsdocs-content table.pre { + background-color: var(--fsdocs-table-pre-background-color);; +} + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border-radius: 0px; + width: 100%; + background-color: var(--fsdocs-table-pre-background-color); + color: var(--fsdocs-table-pre-color); +} + +#fsdocs-content table.pre td { + padding: 0px; + white-space: normal; + margin: 0px; + width: 100%; +} + +#fsdocs-content table.pre td.lines { + width: 30px; +} + + +#fsdocs-content pre { + word-wrap: inherit; +} + +.fsdocs-example-header { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 700; + color: var(--fsdocs-text-color);; +} + +/*-------------------------------------------------------------------------- + Formatting github source links +/*--------------------------------------------------------------------------*/ + +.fsdocs-source-link { + float: right; + text-decoration: none; +} + + .fsdocs-source-link img { + border-style: none; + margin-left: 10px; + width: auto; + height: 1.4em; + } + + .fsdocs-source-link .hover { + display: none; + } + + .fsdocs-source-link:hover .hover { + display: block; + } + + .fsdocs-source-link .normal { + display: block; + } + + .fsdocs-source-link:hover .normal { + display: none; + } + +/*-------------------------------------------------------------------------- + Formatting logo +/*--------------------------------------------------------------------------*/ + +#fsdocs-logo { + width:40px; + height:40px; + margin:10px 0px 0px 0px; + border-style:none; +} + +/*-------------------------------------------------------------------------- + +/*--------------------------------------------------------------------------*/ + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border: none; +} + +/*-------------------------------------------------------------------------- + Remove formatting from links +/*--------------------------------------------------------------------------*/ + +#fsdocs-content h1 a, +#fsdocs-content h1 a:hover, +#fsdocs-content h1 a:focus, +#fsdocs-content h2 a, +#fsdocs-content h2 a:hover, +#fsdocs-content h2 a:focus, +#fsdocs-content h3 a, +#fsdocs-content h3 a:hover, +#fsdocs-content h3 a:focus, +#fsdocs-content h4 a, +#fsdocs-content h4 a:hover, #fsdocs-content +#fsdocs-content h4 a:focus, +#fsdocs-content h5 a, +#fsdocs-content h5 a:hover, +#fsdocs-content h5 a:focus, +#fsdocs-content h6 a, +#fsdocs-content h6 a:hover, +#fsdocs-content h6 a:focus { + color: var(--fsdocs-text-color);; + text-decoration: none; + text-decoration-style: none; + /* outline: none */ +} + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +.fsdocs-param-name, +.fsdocs-return-name, +.fsdocs-param { + font-weight: 900; + font-size: 0.85rem; + font-family: 'Roboto Mono', monospace; +} +/* strings --- and stlyes for other string related formats */ +#fsdocs-content span.s { + color: var(--fsdocs-code-strings-color); +} +/* printf formatters */ +#fsdocs-content span.pf { + color: var(--fsdocs-code-printf-color); +} +/* escaped chars */ +#fsdocs-content span.e { + color: var(--fsdocs-code-escaped-color); +} + +/* identifiers --- and styles for more specific identifier types */ +#fsdocs-content span.id { + color: var(--fsdocs-identifiers-color);; +} +/* module */ +#fsdocs-content span.m { + color:var(--fsdocs-code-module-color); +} +/* reference type */ +#fsdocs-content span.rt { + color: var(--fsdocs-code-reference-color); +} +/* value type */ +#fsdocs-content span.vt { + color: var(--fsdocs-code-value-color); +} +/* interface */ +#fsdocs-content span.if { + color: var(--fsdocs-code-interface-color); +} +/* type argument */ +#fsdocs-content span.ta { + color: var(--fsdocs-code-typearg-color); +} +/* disposable */ +#fsdocs-content span.d { + color: var(--fsdocs-code-disposable-color); +} +/* property */ +#fsdocs-content span.prop { + color: var(--fsdocs-code-property-color); +} +/* punctuation */ +#fsdocs-content span.p { + color: var(--fsdocs-code-punctuation-color); +} +#fsdocs-content span.pn { + color: var(--fsdocs-code-punctuation2-color); +} +/* function */ +#fsdocs-content span.f { + color: var(--fsdocs-code-function-color); +} +#fsdocs-content span.fn { + color: var(--fsdocs-code-function2-color); +} +/* active pattern */ +#fsdocs-content span.pat { + color: var(--fsdocs-code-activepattern-color); +} +/* union case */ +#fsdocs-content span.u { + color: var(--fsdocs-code-unioncase-color); +} +/* enumeration */ +#fsdocs-content span.e { + color: var(--fsdocs-code-enumeration-color); +} +/* keywords */ +#fsdocs-content span.k { + color: var(--fsdocs-code-keywords-color); + /* font-weight: bold; */ +} +/* comment */ +#fsdocs-content span.c { + color: var(--fsdocs-code-comment-color); + font-weight: 400; + font-style: italic; +} +/* operators */ +#fsdocs-content span.o { + color: var(--fsdocs-code-operators-color); +} +/* numbers */ +#fsdocs-content span.n { + color: var(--fsdocs-code-numbers-color); +} +/* line number */ +#fsdocs-content span.l { + color: var(--fsdocs-code-linenumbers-color); +} +/* mutable var or ref cell */ +#fsdocs-content span.v { + color: var(--fsdocs-code-mutable-color); + font-weight: bold; +} +/* inactive code */ +#fsdocs-content span.inactive { + color: var(--fsdocs-code-inactive-color); +} +/* preprocessor */ +#fsdocs-content span.prep { + color: var(--fsdocs-code-preprocessor-color); +} +/* fsi output */ +#fsdocs-content span.fsi { + color: var(--fsdocs-code-fsioutput-color); +} + +/* tool tip */ +div.fsdocs-tip { + background: #475b5f; + border-radius: 4px; + font: 0.85rem 'Roboto Mono', monospace; + padding: 6px 8px 6px 8px; + display: none; + color: var(--fsdocs-code-tooltip-color); + pointer-events: none; +} + + div.fsdocs-tip code { + color: var(--fsdocs-code-tooltip-color); + font: 0.85rem 'Roboto Mono', monospace; + } \ No newline at end of file diff --git a/docsSrc/content/navbar-fixed-left.css b/docsSrc/content/navbar-fixed-left.css new file mode 100644 index 00000000..28e4c574 --- /dev/null +++ b/docsSrc/content/navbar-fixed-left.css @@ -0,0 +1,91 @@ +/* CSS for Bootstrap 5 Fixed Left Sidebar Navigation */ + + + +@media (min-width: 992px){ + + body { + padding-left: 300px; + padding-right: 60px; + } + + #fsdocs-logo { + width:140px; + height:140px; + margin:10px 0px 0px 0px; + border-style:none; + } + + + nav.navbar { + position: fixed; + left: 0; + width: 300px; + bottom: 0; + top: 0; + overflow-y: auto; + overflow-x: hidden; + display: block; + border-right: 1px solid #cecece; + } + + nav.navbar>.container { + flex-direction: column; + padding: 0; + } + + nav.navbar .navbar-nav { + flex-direction: column; + } + nav.navbar .navbar-collapse { + width: 100%; + } + + nav.navbar .navbar-nav { + width: 100%; + } + + nav.navbar .navbar-nav .dropdown-menu { + position: static; + display: block; + } + + nav.navbar .dropdown { + margin-bottom: 5px; + font-size: 14px; + } + + nav.navbar .dropdown-item { + white-space: normal; + font-size: 14px; + vertical-align: middle; + } + + nav.navbar .dropdown-item img { + margin-right: 5px; + } + + nav.navbar .dropdown-toggle { + cursor: default; + } + + nav.navbar .dropdown-menu { + border-radius: 0; + border-left: 0; + border-right: 0; + } + + nav.navbar .dropdown-toggle:not(#bd-theme)::after { + display: none; + } + + .dropdown-menu[data-bs-popper] { + top: auto; + left: auto; + margin-top: auto; + } + + .nav-link:focus, .nav-link:hover { + color: auto; + } +} \ No newline at end of file diff --git a/docsSrc/content/theme-toggle.js b/docsSrc/content/theme-toggle.js new file mode 100644 index 00000000..c208c082 --- /dev/null +++ b/docsSrc/content/theme-toggle.js @@ -0,0 +1,68 @@ +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ + +(() => { + 'use strict' + + const storedTheme = localStorage.getItem('theme') + + const getPreferredTheme = () => { + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = function (theme) { + const fsdocsTheme = document.getElementById("fsdocs-theme") + const re = /fsdocs-.*.css/ + if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute('data-bs-theme', 'dark') + fsdocsTheme.setAttribute("href", fsdocsTheme.getAttribute("href").replace(re,"fsdocs-dark.css")) + + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + + fsdocsTheme.setAttribute("href", fsdocsTheme.getAttribute("href").replace(re,`fsdocs-${theme}.css`)) + } + } + + setTheme(getPreferredTheme()) + + const showActiveTheme = theme => { + const activeThemeIcon = document.getElementById('theme-icon-active') + const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) + const svgOfActiveBtn = btnToActive.querySelector('i').getAttribute('class') + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + element.classList.remove('active') + }) + + btnToActive.classList.add('active') + activeThemeIcon.setAttribute('class', svgOfActiveBtn) + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + if (storedTheme !== 'light' || storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document.querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + localStorage.setItem('theme', theme) + setTheme(theme) + showActiveTheme(theme) + }) + }) + }) +})() \ No newline at end of file diff --git a/docsSrc/index.md b/docsSrc/index.md new file mode 100644 index 00000000..f6ffdcd6 --- /dev/null +++ b/docsSrc/index.md @@ -0,0 +1,56 @@ +# LeonidLodygin.ImageProcessing + +--- + +## What is ImageProcessing? + +A library for image processing using GPGPU and agents for parallel computing. + +--- + +
    +
    +
    +
    +
    Tutorials
    +

    Takes you by the hand through a series of steps to create your first library.

    +
    + +
    +
    +
    +
    +
    +
    How-To Guides
    +

    Guides you through the steps involved in addressing key problems and use-cases.

    +
    + +
    +
    +
    +
    +
    +
    Explanations
    +

    Discusses key topics and concepts at a fairly high level and provide useful background information and explanation..

    +
    + +
    +
    +
    +
    +
    +
    Reference
    +

    Contain technical references.

    +
    + +
    +
    +
    \ No newline at end of file From 33a96bb6d85bda7627fb87120f914082daea054a Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Tue, 19 Dec 2023 14:31:30 +0300 Subject: [PATCH 11/27] Add namespaces --- .fsdocs/cache | 6 +- build/build.fs | 6 +- docsSrc/_template.html | 20 +- temp/watch-docs/Dockerfile | 29 + temp/watch-docs/NuGet.config | 14 + .../Reference/imageprocessing-agents.html | 1022 +++++++++++++ ...mageprocessing-arguments-cliarguments.html | 523 +++++++ .../Reference/imageprocessing-arguments.html | 1033 +++++++++++++ .../imageprocessing-cpuprocessing.html | 672 ++++++++ .../Reference/imageprocessing-gpukernels.html | 1352 +++++++++++++++++ .../imageprocessing-gpuprocessing.html | 942 ++++++++++++ .../imageprocessing-imagearrayprocessing.html | 497 ++++++ .../Reference/imageprocessing-kernels.html | 427 ++++++ .../Reference/imageprocessing-main.html | 291 ++++ .../imageprocessing-myimage-myimage.html | 540 +++++++ .../Reference/imageprocessing-myimage.html | 451 ++++++ .../imageprocessing-types-agentstatus.html | 322 ++++ .../imageprocessing-types-devices.html | 390 +++++ ...imageprocessing-types-mirrordirection.html | 322 ++++ .../imageprocessing-types-modifications.html | 594 ++++++++ .../Reference/imageprocessing-types-msg.html | 436 ++++++ .../Reference/imageprocessing-types-side.html | 322 ++++ .../Reference/imageprocessing-types.html | 416 +++++ .../watch-docs/Reference/imageprocessing.html | 516 +++++++ temp/watch-docs/Reference/index.html | 210 +++ temp/watch-docs/_menu-item_template.html | 1 + temp/watch-docs/_menu_template.html | 9 + temp/watch-docs/content/fsdocs-custom.css | 15 + temp/watch-docs/content/fsdocs-dark.css | 50 + temp/watch-docs/content/fsdocs-default.css | 613 ++++++++ temp/watch-docs/content/fsdocs-light.css | 43 + temp/watch-docs/content/fsdocs-main.css | 604 ++++++++ temp/watch-docs/content/fsdocs-search.js | 84 + temp/watch-docs/content/fsdocs-tips.js | 54 + temp/watch-docs/content/img/copy-md-hover.png | Bin 0 -> 2886 bytes temp/watch-docs/content/img/copy-md.png | Bin 0 -> 3351 bytes .../watch-docs/content/img/copy-xml-hover.png | Bin 0 -> 3192 bytes temp/watch-docs/content/img/copy-xml.png | Bin 0 -> 3486 bytes temp/watch-docs/content/img/github-hover.png | Bin 0 -> 7695 bytes temp/watch-docs/content/img/github.png | Bin 0 -> 7642 bytes temp/watch-docs/content/navbar-fixed-left.css | 91 ++ .../watch-docs/content/navbar-fixed-right.css | 78 + temp/watch-docs/content/theme-toggle.js | 68 + ...1\203\320\274\320\265\320\275\321\202.txt" | 68 + temp/watch-docs/index.html | 233 +++ temp/watch-docs/index.json | 1 + 46 files changed, 13340 insertions(+), 25 deletions(-) create mode 100644 temp/watch-docs/Dockerfile create mode 100644 temp/watch-docs/NuGet.config create mode 100644 temp/watch-docs/Reference/imageprocessing-agents.html create mode 100644 temp/watch-docs/Reference/imageprocessing-arguments-cliarguments.html create mode 100644 temp/watch-docs/Reference/imageprocessing-arguments.html create mode 100644 temp/watch-docs/Reference/imageprocessing-cpuprocessing.html create mode 100644 temp/watch-docs/Reference/imageprocessing-gpukernels.html create mode 100644 temp/watch-docs/Reference/imageprocessing-gpuprocessing.html create mode 100644 temp/watch-docs/Reference/imageprocessing-imagearrayprocessing.html create mode 100644 temp/watch-docs/Reference/imageprocessing-kernels.html create mode 100644 temp/watch-docs/Reference/imageprocessing-main.html create mode 100644 temp/watch-docs/Reference/imageprocessing-myimage-myimage.html create mode 100644 temp/watch-docs/Reference/imageprocessing-myimage.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types-agentstatus.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types-devices.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types-mirrordirection.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types-modifications.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types-msg.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types-side.html create mode 100644 temp/watch-docs/Reference/imageprocessing-types.html create mode 100644 temp/watch-docs/Reference/imageprocessing.html create mode 100644 temp/watch-docs/Reference/index.html create mode 100644 temp/watch-docs/_menu-item_template.html create mode 100644 temp/watch-docs/_menu_template.html create mode 100644 temp/watch-docs/content/fsdocs-custom.css create mode 100644 temp/watch-docs/content/fsdocs-dark.css create mode 100644 temp/watch-docs/content/fsdocs-default.css create mode 100644 temp/watch-docs/content/fsdocs-light.css create mode 100644 temp/watch-docs/content/fsdocs-main.css create mode 100644 temp/watch-docs/content/fsdocs-search.js create mode 100644 temp/watch-docs/content/fsdocs-tips.js create mode 100644 temp/watch-docs/content/img/copy-md-hover.png create mode 100644 temp/watch-docs/content/img/copy-md.png create mode 100644 temp/watch-docs/content/img/copy-xml-hover.png create mode 100644 temp/watch-docs/content/img/copy-xml.png create mode 100644 temp/watch-docs/content/img/github-hover.png create mode 100644 temp/watch-docs/content/img/github.png create mode 100644 temp/watch-docs/content/navbar-fixed-left.css create mode 100644 temp/watch-docs/content/navbar-fixed-right.css create mode 100644 temp/watch-docs/content/theme-toggle.js create mode 100644 "temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" create mode 100644 temp/watch-docs/index.html create mode 100644 temp/watch-docs/index.json diff --git a/.fsdocs/cache b/.fsdocs/cache index 0cdbcbfb..12fe5936 100644 --- a/.fsdocs/cache +++ b/.fsdocs/cache @@ -1,5 +1,5 @@ -@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item1http://localhost:8901/@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1^C:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0\ImageProcessing.dll@m_Item2^heada-o:C:\Users\Леонид\ImageProcessing\src\ImageProcessing\obj\Debug\net7.0\ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head --define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head*--doc:obj\Debug\net7.0\ImageProcessing.xml^tail^head --optimize-^tail^head --tailcalls-^tail^headO-r:C:\Users\Леонид\.nuget\packages\argu\6.1.1\lib\netstandard2.0\Argu.dll^tail^heado-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.ast\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.AST.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Core.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.printer\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Printer.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.shared\2.0.3\lib\net7.0\Brahma.FSharp.OpenCL.Shared.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.translator\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Translator.dll^tail^headU-r:C:\Users\Леонид\.nuget\packages\expecto\9.0.4\lib\netstandard2.0\Expecto.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\expecto.fscheck\9.0.4\lib\netstandard2.0\Expecto.FsCheck.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\extraconstraints.fody\1.14.0\lib\netstandard1.4\ExtraConstraints.dll^tail^headV-r:C:\Users\Леонид\.nuget\packages\fscheck\2.14.3\lib\netstandard2.0\FsCheck.dll^tail^head]-r:C:\Users\Леонид\.nuget\packages\fsharp.core\6.0.0\lib\netstandard2.1\FSharp.Core.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\fsharp.quotations.evaluator\2.1.0\lib\netstandard2.0\FSharp.Quotations.Evaluator.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\fsharpx.collections\3.1.0\lib\netstandard2.0\FSharpx.Collections.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\fsharpx.text.structuredformat\3.1.0\lib\netstandard2.0\FSharpx.Text.StructuredFormat.dll^tail^head{-r:C:\Users\Леонид\.nuget\packages\microsoft.build.framework\16.10.0\lib\netstandard2.0\Microsoft.Build.Framework.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.CSharp.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.Core.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Primitives.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Registry.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\microsoft.win32.systemevents\7.0.0\lib\net7.0\Microsoft.Win32.SystemEvents.dll^tail^head\-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Mdb.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Pdb.dll^tail^headb-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Rocks.dll^tail^headX-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\mscorlib.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\netstandard.dll^tail^headn-r:C:\Users\Леонид\.nuget\packages\sixlabors.imagesharp\2.1.3\lib\netcoreapp3.1\SixLabors.ImageSharp.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.AppContext.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Buffers.dll^tail^head[-r:C:\Users\Леонид\.nuget\packages\system.codedom\7.0.0\lib\net7.0\System.CodeDom.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Concurrent.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Immutable.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.NonGeneric.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Specialized.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Annotations.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.DataAnnotations.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.EventBasedAsync.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Primitives.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.TypeConverter.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.configuration.configurationmanager\7.0.0\lib\net7.0\System.Configuration.ConfigurationManager.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Configuration.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Console.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Core.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.Common.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.DataSetExtensions.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Contracts.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Debug.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.DiagnosticSource.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.diagnostics.eventlog\7.0.0\lib\net7.0\System.Diagnostics.EventLog.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.FileVersionInfo.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Process.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.StackTrace.dll^tail^headz-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tools.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TraceSource.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tracing.dll^tail^headV-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.dll^tail^headi-r:C:\Users\Леонид\.nuget\packages\system.drawing.common\7.0.0\lib\net7.0\System.Drawing.Common.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.Primitives.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Dynamic.Runtime.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Asn1.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Tar.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Calendars.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Extensions.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.Brotli.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.FileSystem.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.ZipFile.dll^tail^headY-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.AccessControl.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.DriveInfo.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Primitives.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Watcher.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.IsolatedStorage.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.MemoryMappedFiles.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.AccessControl.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.UnmanagedMemoryStream.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Expressions.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Parallel.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Queryable.dll^tail^head]-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Memory.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.Json.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.HttpListener.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Mail.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NameResolution.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NetworkInformation.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Ping.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Primitives.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Quic.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Requests.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Security.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.ServicePoint.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Sockets.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebClient.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebHeaderCollection.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebProxy.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.Client.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.Vectors.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ObjectModel.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.DispatchProxy.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.ILGeneration.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.Lightweight.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Extensions.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Metadata.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.TypeExtensions.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Reader.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.ResourceManager.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Writer.dll^tail^headv-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Extensions.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Handles.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.dll^tail^heady-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.JavaScript.dll^tail^head-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Intrinsics.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Loader.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Numerics.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Formatters.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Json.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Xml.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.AccessControl.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Claims.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Algorithms.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Cng.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Csp.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Encoding.dll^tail^headt-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.OpenSsl.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Primitives.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.security.cryptography.protecteddata\7.0.0\lib\net7.0\System.Security.Cryptography.ProtectedData.dll^tail^head}-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.X509Certificates.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.security.permissions\7.0.0\lib\net7.0\System.Security.Permissions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.Windows.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.SecureString.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceModel.Web.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceProcess.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.CodePages.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.Extensions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encodings.Web.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Json.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.RegularExpressions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Channels.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Overlapped.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Dataflow.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Extensions.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Parallel.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Thread.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.ThreadPool.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Timer.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.Local.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ValueTuple.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.HttpUtility.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Windows.dll^tail^headq-r:C:\Users\Леонид\.nuget\packages\system.windows.extensions\7.0.0\lib\net7.0\System.Windows.Extensions.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.ReaderWriter.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Serialization.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XDocument.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlDocument.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlSerializer.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.XDocument.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\WindowsBase.dll^tail^headY-r:C:\Users\Леонид\.nuget\packages\yc.opencl.net\2.0.3\lib\net7.0\YC.OpenCL.NET.dll^tail^head--target:library^tail^head+--nowarn:IL2121,NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head --fullpaths^tail^head --flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value0https://github.com/LeonidLodygin/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item1http://localhost:8901/@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1lC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0\LeonidLodygin.ImageProcessing.dll@m_Item2^heado-o:C:\Users\Леонид\ImageProcessing\src\ImageProcessing\obj\Debug\net7.0\LeonidLodygin.ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head --define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head8--doc:obj\Debug\net7.0\LeonidLodygin.ImageProcessing.xml^tail^head --optimize-^tail^head --tailcalls-^tail^headO-r:C:\Users\Леонид\.nuget\packages\argu\6.1.1\lib\netstandard2.0\Argu.dll^tail^heado-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.ast\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.AST.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Core.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.printer\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Printer.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.shared\2.0.3\lib\net7.0\Brahma.FSharp.OpenCL.Shared.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.translator\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Translator.dll^tail^headU-r:C:\Users\Леонид\.nuget\packages\expecto\9.0.4\lib\netstandard2.0\Expecto.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\expecto.fscheck\9.0.4\lib\netstandard2.0\Expecto.FsCheck.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\extraconstraints.fody\1.14.0\lib\netstandard1.4\ExtraConstraints.dll^tail^headV-r:C:\Users\Леонид\.nuget\packages\fscheck\2.14.3\lib\netstandard2.0\FsCheck.dll^tail^head]-r:C:\Users\Леонид\.nuget\packages\fsharp.core\6.0.0\lib\netstandard2.1\FSharp.Core.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\fsharp.quotations.evaluator\2.1.0\lib\netstandard2.0\FSharp.Quotations.Evaluator.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\fsharpx.collections\3.1.0\lib\netstandard2.0\FSharpx.Collections.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\fsharpx.text.structuredformat\3.1.0\lib\netstandard2.0\FSharpx.Text.StructuredFormat.dll^tail^head{-r:C:\Users\Леонид\.nuget\packages\microsoft.build.framework\16.10.0\lib\netstandard2.0\Microsoft.Build.Framework.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.CSharp.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.Core.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Primitives.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Registry.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\microsoft.win32.systemevents\7.0.0\lib\net7.0\Microsoft.Win32.SystemEvents.dll^tail^head\-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Mdb.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Pdb.dll^tail^headb-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Rocks.dll^tail^headX-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\mscorlib.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\netstandard.dll^tail^headn-r:C:\Users\Леонид\.nuget\packages\sixlabors.imagesharp\2.1.3\lib\netcoreapp3.1\SixLabors.ImageSharp.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.AppContext.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Buffers.dll^tail^head[-r:C:\Users\Леонид\.nuget\packages\system.codedom\7.0.0\lib\net7.0\System.CodeDom.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Concurrent.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Immutable.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.NonGeneric.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Specialized.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Annotations.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.DataAnnotations.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.EventBasedAsync.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Primitives.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.TypeConverter.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.configuration.configurationmanager\7.0.0\lib\net7.0\System.Configuration.ConfigurationManager.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Configuration.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Console.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Core.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.Common.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.DataSetExtensions.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Contracts.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Debug.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.DiagnosticSource.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.diagnostics.eventlog\7.0.0\lib\net7.0\System.Diagnostics.EventLog.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.FileVersionInfo.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Process.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.StackTrace.dll^tail^headz-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tools.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TraceSource.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tracing.dll^tail^headV-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.dll^tail^headi-r:C:\Users\Леонид\.nuget\packages\system.drawing.common\7.0.0\lib\net7.0\System.Drawing.Common.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.Primitives.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Dynamic.Runtime.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Asn1.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Tar.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Calendars.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Extensions.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.Brotli.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.FileSystem.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.ZipFile.dll^tail^headY-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.AccessControl.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.DriveInfo.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Primitives.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Watcher.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.IsolatedStorage.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.MemoryMappedFiles.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.AccessControl.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.UnmanagedMemoryStream.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Expressions.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Parallel.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Queryable.dll^tail^head]-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Memory.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.Json.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.HttpListener.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Mail.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NameResolution.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NetworkInformation.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Ping.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Primitives.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Quic.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Requests.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Security.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.ServicePoint.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Sockets.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebClient.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebHeaderCollection.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebProxy.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.Client.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.Vectors.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ObjectModel.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.DispatchProxy.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.ILGeneration.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.Lightweight.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Extensions.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Metadata.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.TypeExtensions.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Reader.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.ResourceManager.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Writer.dll^tail^headv-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Extensions.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Handles.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.dll^tail^heady-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.JavaScript.dll^tail^head-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Intrinsics.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Loader.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Numerics.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Formatters.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Json.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Xml.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.AccessControl.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Claims.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Algorithms.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Cng.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Csp.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Encoding.dll^tail^headt-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.OpenSsl.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Primitives.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.security.cryptography.protecteddata\7.0.0\lib\net7.0\System.Security.Cryptography.ProtectedData.dll^tail^head}-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.X509Certificates.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.security.permissions\7.0.0\lib\net7.0\System.Security.Permissions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.Windows.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.SecureString.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceModel.Web.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceProcess.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.CodePages.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.Extensions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encodings.Web.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Json.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.RegularExpressions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Channels.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Overlapped.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Dataflow.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Extensions.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Parallel.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Thread.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.ThreadPool.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Timer.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.Local.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ValueTuple.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.HttpUtility.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Windows.dll^tail^headq-r:C:\Users\Леонид\.nuget\packages\system.windows.extensions\7.0.0\lib\net7.0\System.Windows.Extensions.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.ReaderWriter.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Serialization.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XDocument.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlDocument.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlSerializer.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.XDocument.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\WindowsBase.dll^tail^headY-r:C:\Users\Леонид\.nuget\packages\yc.opencl.net\2.0.3\lib\net7.0\YC.OpenCL.NET.dll^tail^head--target:library^tail^head+--nowarn:IL2121,NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head --fullpaths^tail^head --flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value0https://github.com/LeonidLodygin/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_item fsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Mhttps://github.com/LeonidLodygin/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 -f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item24https://github.com/LeonidLodygin/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item27https://github.com/LeonidLodygin/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item25https://github.com/LeonidLodygin/blob/main/LICENSE.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headJC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Dhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ehttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headJC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_item fsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Mhttps://github.com/LeonidLodygin/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 -f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item24https://github.com/LeonidLodygin/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item27https://github.com/LeonidLodygin/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item25https://github.com/LeonidLodygin/blob/main/LICENSE.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^valuehttp://localhost:8901/@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string/https://LeonidLodygin.github.io/ImageProcessing^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-repository-link^string0https://github.com/LeonidLodygin/ImageProcessing^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^string4https://github.com/LeonidLodygin/blob/main/README.md^stringfsdocs-release-notes-link^string7https://github.com/LeonidLodygin/blob/main/CHANGELOG.md^stringfsdocs-license-link^string5https://github.com/LeonidLodygin/blob/main/LICENSE.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headPC:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4cH@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTimes[DH \ No newline at end of file +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Dhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ehttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^valuehttp://localhost:8901/@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string/https://LeonidLodygin.github.io/ImageProcessing^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-repository-link^string0https://github.com/LeonidLodygin/ImageProcessing^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^stringDhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^stringfsdocs-release-notes-link^stringGhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^stringfsdocs-license-link^stringEhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headPC:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4cH@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTime MhXH \ No newline at end of file diff --git a/build/build.fs b/build/build.fs index 3f692264..74dbebd2 100644 --- a/build/build.fs +++ b/build/build.fs @@ -97,10 +97,10 @@ let tagFromVersionNumber versionNumber = sprintf "v%s" versionNumber let changelogFilename = __SOURCE_DIRECTORY__ ".." "CHANGELOG.md" let changelog = Fake.Core.Changelog.load changelogFilename -let READMElink = Uri(Uri(gitHubRepoUrl), $"blob/{releaseBranch}/{readme}") -let CHANGELOGlink = Uri(Uri(gitHubRepoUrl), $"blob/{releaseBranch}/{changelogFile}") +let READMElink = Uri(Uri(gitHubRepoUrl), $"{productName}/blob/{releaseBranch}/{readme}") +let CHANGELOGlink = Uri(Uri(gitHubRepoUrl), $"{productName}/blob/{releaseBranch}/{changelogFile}") -let LICENSElink = Uri(Uri(gitHubRepoUrl), $"blob/{releaseBranch}/LICENSE.md") +let LICENSElink = Uri(Uri(gitHubRepoUrl), $"{productName}/blob/{releaseBranch}/LICENSE.md") let mutable latestEntry = if Seq.isEmpty changelog.Entries diff --git a/docsSrc/_template.html b/docsSrc/_template.html index 6e7c39e9..5d4b10f5 100644 --- a/docsSrc/_template.html +++ b/docsSrc/_template.html @@ -95,27 +95,9 @@ Notes
  • Source Repository
  • - - - - + {{fsdocs-list-of-namespaces}} diff --git a/temp/watch-docs/Dockerfile b/temp/watch-docs/Dockerfile new file mode 100644 index 00000000..989c9abb --- /dev/null +++ b/temp/watch-docs/Dockerfile @@ -0,0 +1,29 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 + +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get -y install python3 python3-pip python3-dev ipython3 + +RUN python3 -m pip install --no-cache-dir notebook jupyterlab + +ARG NB_USER=fsdocs-user +ARG NB_UID=1000 +ENV USER ${NB_USER} +ENV NB_UID ${NB_UID} +ENV HOME /home/${NB_USER} + +RUN adduser --disabled-password \ + --gecos "Default user" \ + --uid ${NB_UID} \ + ${NB_USER} + +COPY . ${HOME} +USER root +RUN chown -R ${NB_UID} ${HOME} +USER ${NB_USER} + +ENV PATH="${PATH}:$HOME/.dotnet/tools/" + +RUN dotnet tool install --global Microsoft.dotnet-interactive --version 1.0.410202 + +RUN dotnet-interactive jupyter install diff --git a/temp/watch-docs/NuGet.config b/temp/watch-docs/NuGet.config new file mode 100644 index 00000000..cf1ace51 --- /dev/null +++ b/temp/watch-docs/NuGet.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-agents.html b/temp/watch-docs/Reference/imageprocessing-agents.html new file mode 100644 index 00000000..dfe30216 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-agents.html @@ -0,0 +1,1022 @@ + + + + + + Agents (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Agents Module +

    + +
    +
    +

    + + Module with implementation of agents for image processing + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + imgProcessor filter imgSaver logger + + +

    +
    +
    +
    + Full Usage: + imgProcessor filter imgSaver logger +
    +
    + Parameters: + +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent for image processing + +

    +
    +
    +
    +
    + + filter + + : + MyImage -> MyImage +
    +
    +

    + Filter for application +

    +
    +
    + + imgSaver + + : + MailboxProcessor<Msg> +
    +
    +

    + Saving Agent +

    +
    +
    + + logger + + : + MailboxProcessor<Msg> +
    +
    +

    + Logging Agent +

    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + imgSaver outDir logger + + +

    +
    +
    +
    + Full Usage: + imgSaver outDir logger +
    +
    + Parameters: +
      + + + outDir + + : + string + - + Path to save + +
      + + + logger + + : + MailboxProcessor<Msg> + - + Logging Agent + +
      +
    +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent for saving images + +

    +
    +
    +
    +
    + + outDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + logger + + : + MailboxProcessor<Msg> +
    +
    +

    + Logging Agent +

    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + listAllFiles dir + + +

    +
    +
    +
    + Full Usage: + listAllFiles dir +
    +
    + Parameters: +
      + + + dir + + : + string + +
      +
    +
    + + Returns: + string list + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + List of all files in directory + +

    +
    +
    +
    +
    + + dir + + : + string +
    +
    +
    +
    +
    + + Returns: + + string list +
    +
    +
    +
    +
    +
    + +

    + + + msgLogger () + + +

    +
    +
    +
    + Full Usage: + msgLogger () +
    +
    + Parameters: +
      + + + () + + : + unit + +
      +
    +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent for logging + +

    +
    +
    +
    +
    + + () + + : + unit +
    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + outFile imgName outDir + + +

    +
    +
    +
    + Full Usage: + outFile imgName outDir +
    +
    + Parameters: +
      + + + imgName + + : + string + +
      + + + outDir + + : + string + +
      +
    +
    + + Returns: + string + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Creation of path to save the image + +

    +
    +
    +
    +
    + + imgName + + : + string +
    +
    +
    + + outDir + + : + string +
    +
    +
    +
    +
    + + Returns: + + string +
    +
    +
    +
    +
    +
    + +

    + + + superAgent outputDir conversion logger + + +

    +
    +
    +
    + Full Usage: + superAgent outputDir conversion logger +
    +
    + Parameters: +
      + + + outputDir + + : + string + - + Path to save + +
      + + + conversion + + : + MyImage -> MyImage + - + Image transformation + +
      + + + logger + + : + MailboxProcessor<Msg> + - + Logging Agent + +
      +
    +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent with the ability to process and save the image + +

    +
    +
    +
    +
    + + outputDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + conversion + + : + MyImage -> MyImage +
    +
    +

    + Image transformation +

    +
    +
    + + logger + + : + MailboxProcessor<Msg> +
    +
    +

    + Logging Agent +

    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + superImageProcessing inputDir outputDir conversion countOfAgents + + +

    +
    +
    +
    + Full Usage: + superImageProcessing inputDir outputDir conversion countOfAgents +
    +
    + Parameters: +
      + + + inputDir + + : + string + - + Path to image or images + +
      + + + outputDir + + : + string + - + Path to save + +
      + + + conversion + + : + MyImage -> MyImage + - + Image transformation + +
      + + + countOfAgents + + : + int + - + Count of superAgents to processing + +
      +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Image processing using superAgents + +

    +
    +
    +
    +
    + + inputDir + + : + string +
    +
    +

    + Path to image or images +

    +
    +
    + + outputDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + conversion + + : + MyImage -> MyImage +
    +
    +

    + Image transformation +

    +
    +
    + + countOfAgents + + : + int +
    +
    +

    + Count of superAgents to processing +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-arguments-cliarguments.html b/temp/watch-docs/Reference/imageprocessing-arguments-cliarguments.html new file mode 100644 index 00000000..dc23f645 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-arguments-cliarguments.html @@ -0,0 +1,523 @@ + + + + + + CliArguments (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + CliArguments Type +

    + +
    +
    +

    + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Agents + + +

    +
    +
    +
    + Full Usage: + Agents +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + GpGpu device + + +

    +
    +
    +
    + Full Usage: + GpGpu device +
    +
    + Parameters: +
      + + + device + + : + Devices + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + device + + : + Devices +
    +
    +
    +
    +
    + +

    + + + InputPath inputPath + + +

    +
    +
    +
    + Full Usage: + InputPath inputPath +
    +
    + Parameters: +
      + + + inputPath + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + inputPath + + : + string +
    +
    +
    +
    +
    + +

    + + + Modifications modifications + + +

    +
    +
    +
    + Full Usage: + Modifications modifications +
    +
    + Parameters: + +
    +
    +
    +
    +
    +
    +
    + + modifications + + : + List<Modifications> +
    +
    +
    +
    +
    + +

    + + + OutputPath outputPath + + +

    +
    +
    +
    + Full Usage: + OutputPath outputPath +
    +
    + Parameters: +
      + + + outputPath + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + outputPath + + : + string +
    +
    +
    +
    +
    + +

    + + + SuperAgents count + + +

    +
    +
    +
    + Full Usage: + SuperAgents count +
    +
    + Parameters: +
      + + + count + + : + int + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + count + + : + int +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-arguments.html b/temp/watch-docs/Reference/imageprocessing-arguments.html new file mode 100644 index 00000000..02e1f932 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-arguments.html @@ -0,0 +1,1033 @@ + + + + + + Arguments (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Arguments Module +

    + +
    +
    +

    + + Module with implementation of work via console commands + +

    +
    +
    +
    +

    + Types +

    + + + + + + + + + + + + + +
    + Type + + Description +
    +

    + + + CliArguments + + +

    +
    +
    + + + + + + +

    + +

    +
    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + deviceParser device + + +

    +
    +
    +
    + Full Usage: + deviceParser device +
    +
    + Parameters: +
      + + + device + + : + Devices + +
      +
    +
    + + Returns: + Platform + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Parsing of device + +

    +
    +
    +
    +
    + + device + + : + Devices +
    +
    +
    +
    +
    + + Returns: + + Platform +
    +
    +
    +
    +
    +
    + +

    + + + first (x, arg2, arg3, arg4) + + +

    +
    +
    +
    + Full Usage: + first (x, arg2, arg3, arg4) +
    +
    + Parameters: +
      + + + x + + : + 'a + +
      + + + arg1 + + : + 'b + +
      + + + arg2 + + : + 'c + +
      + + + arg3 + + : + 'd + +
      +
    +
    + + Returns: + 'a + +
    +
    +
    +
    +
    +
    +
    + + x + + : + 'a +
    +
    +
    + + arg1 + + : + 'b +
    +
    +
    + + arg2 + + : + 'c +
    +
    +
    + + arg3 + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'a +
    +
    +
    +
    +
    + +

    + + + fourth (arg1, arg2, arg3, x) + + +

    +
    +
    +
    + Full Usage: + fourth (arg1, arg2, arg3, x) +
    +
    + Parameters: +
      + + + arg0 + + : + 'a + +
      + + + arg1 + + : + 'b + +
      + + + arg2 + + : + 'c + +
      + + + x + + : + 'd + +
      +
    +
    + + Returns: + 'd + +
    +
    +
    +
    +
    +
    +
    + + arg0 + + : + 'a +
    +
    +
    + + arg1 + + : + 'b +
    +
    +
    + + arg2 + + : + 'c +
    +
    +
    + + x + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'd +
    +
    +
    +
    +
    + +

    + + + modificationGpuParser modification (arg2, arg3, arg4, arg5) + + +

    +
    +
    +
    + Full Usage: + modificationGpuParser modification (arg2, arg3, arg4, arg5) +
    +
    + Parameters: + +
    + + Returns: + ClContext -> int -> MailboxProcessor<Msg> -> MyImage -> MyImage + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Parsing of GPU modification + +

    +
    +
    +
    +
    + + modification + + : + Modifications +
    +
    +
    + + arg1 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + arg2 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + arg3 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + arg4 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    +
    +
    + + Returns: + + ClContext -> int -> MailboxProcessor<Msg> -> MyImage -> MyImage +
    +
    +
    +
    +
    +
    + +

    + + + modificationParser modification + + +

    +
    +
    +
    + Full Usage: + modificationParser modification +
    +
    + Parameters: + +
    + + Returns: + MyImage -> MyImage + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Parsing of CPU modification + +

    +
    +
    +
    +
    + + modification + + : + Modifications +
    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +
    +
    +
    +
    + +

    + + + second (arg1, x, arg3, arg4) + + +

    +
    +
    +
    + Full Usage: + second (arg1, x, arg3, arg4) +
    +
    + Parameters: +
      + + + arg0 + + : + 'a + +
      + + + x + + : + 'b + +
      + + + arg2 + + : + 'c + +
      + + + arg3 + + : + 'd + +
      +
    +
    + + Returns: + 'b + +
    +
    +
    +
    +
    +
    +
    + + arg0 + + : + 'a +
    +
    +
    + + x + + : + 'b +
    +
    +
    + + arg2 + + : + 'c +
    +
    +
    + + arg3 + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'b +
    +
    +
    +
    +
    + +

    + + + third (arg1, arg2, x, arg4) + + +

    +
    +
    +
    + Full Usage: + third (arg1, arg2, x, arg4) +
    +
    + Parameters: +
      + + + arg0 + + : + 'a + +
      + + + arg1 + + : + 'b + +
      + + + x + + : + 'c + +
      + + + arg3 + + : + 'd + +
      +
    +
    + + Returns: + 'c + +
    +
    +
    +
    +
    +
    +
    + + arg0 + + : + 'a +
    +
    +
    + + arg1 + + : + 'b +
    +
    +
    + + x + + : + 'c +
    +
    +
    + + arg3 + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'c +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-cpuprocessing.html b/temp/watch-docs/Reference/imageprocessing-cpuprocessing.html new file mode 100644 index 00000000..511d13ed --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-cpuprocessing.html @@ -0,0 +1,672 @@ + + + + + + CpuProcessing (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + CpuProcessing Module +

    + +
    +
    +

    + + Module with functions for image processing on the CPU + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + applyFilter filter img + + +

    +
    +
    +
    + Full Usage: + applyFilter filter img +
    +
    + Parameters: +
      + + + filter + + : + float32[][] + - + A two-dimensional array applied to an image as a filter + +
      + + + img + + : + MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Filter application + +

    +
    +
    +
    +
    + + filter + + : + float32[][] +
    +
    +

    + A two-dimensional array applied to an image as a filter +

    +
    +
    + + img + + : + MyImage +
    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + fishEye image + + +

    +
    +
    +
    + Full Usage: + fishEye image +
    +
    + Parameters: +
      + + + image + + : + MyImage + - + Image with type MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Applying "FishEye" to an image + +

    +
    +
    +
    +
    + + image + + : + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + mirror side image + + +

    +
    +
    +
    + Full Usage: + mirror side image +
    +
    + Parameters: +
      + + + side + + : + MirrorDirection + - + The side to which the image will be reflected + +
      + + + image + + : + MyImage + - + Image with type MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Image Reflection + +

    +
    +
    +
    +
    + + side + + : + MirrorDirection +
    +
    +

    + The side to which the image will be reflected +

    +
    +
    + + image + + : + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + rotate side image + + +

    +
    +
    +
    + Full Usage: + rotate side image +
    +
    + Parameters: +
      + + + side + + : + Side + - + The side to which the image will be rotated + +
      + + + image + + : + MyImage + - + Image with type MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Rotate of image + +

    +
    +
    +
    +
    + + side + + : + Side +
    +
    +

    + The side to which the image will be rotated +

    +
    +
    + + image + + : + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-gpukernels.html b/temp/watch-docs/Reference/imageprocessing-gpukernels.html new file mode 100644 index 00000000..e8cf6fd0 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-gpukernels.html @@ -0,0 +1,1352 @@ + + + + + + GpuKernels (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + GpuKernels Module +

    + +
    +
    +

    + + Module with kernels for image processing on the GPU + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + applyFilterKernel clContext + + +

    +
    +
    +
    + Full Usage: + applyFilterKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to apply filter to the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + applyFilterProcessor kernel localWorkSize commandQueue filter filterD img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + applyFilterProcessor kernel localWorkSize commandQueue filter filterD img imgH imgW result +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> + +
      + + + localWorkSize + + : + int + +
      + + + commandQueue + + : + MailboxProcessor<Msg> + +
      + + + filter + + : + ClArray<float32> + +
      + + + filterD + + : + int + +
      + + + img + + : + ClArray<byte> + +
      + + + imgH + + : + int + +
      + + + imgW + + : + int + +
      + + + result + + : + ClArray<byte> + +
      +
    +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the filter kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + filter + + : + ClArray<float32> +
    +
    +
    + + filterD + + : + int +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    + +

    + + + fishEyeKernel clContext + + +

    +
    +
    +
    + Full Usage: + fishEyeKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<'a> -> int -> int -> ClArray<'a> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to apply FishEye to the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<'a> -> int -> int -> ClArray<'a> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + fishEyeKernelProcessor kernel localWorkSize commandQueue img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + fishEyeKernelProcessor kernel localWorkSize commandQueue img imgH imgW result +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> + +
      + + + localWorkSize + + : + int + +
      + + + commandQueue + + : + MailboxProcessor<Msg> + +
      + + + img + + : + ClArray<byte> + +
      + + + imgH + + : + int + +
      + + + imgW + + : + int + +
      + + + result + + : + ClArray<byte> + +
      +
    +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the fisheye kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    + +

    + + + mirrorKernel clContext + + +

    +
    +
    +
    + Full Usage: + mirrorKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to reflect the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + mirrorKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + mirrorKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result +
    +
    + Parameters: + +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the reflection kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + side + + : + MirrorDirection +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    + +

    + + + rotateKernel clContext + + +

    +
    +
    +
    + Full Usage: + rotateKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to rotate the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + rotateKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + rotateKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> + +
      + + + localWorkSize + + : + int + +
      + + + side + + : + Side + +
      + + + commandQueue + + : + MailboxProcessor<Msg> + +
      + + + img + + : + ClArray<byte> + +
      + + + imgH + + : + int + +
      + + + imgW + + : + int + +
      + + + result + + : + ClArray<byte> + +
      +
    +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the rotation kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + side + + : + Side +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-gpuprocessing.html b/temp/watch-docs/Reference/imageprocessing-gpuprocessing.html new file mode 100644 index 00000000..a0a4725f --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-gpuprocessing.html @@ -0,0 +1,942 @@ + + + + + + GpuProcessing (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + GpuProcessing Module +

    + +
    +
    +

    + + Module with functions for image processing on the GPU + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + applyFilter filter kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + applyFilter filter kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + filter + + : + float32[][] + - + A two-dimensional array applied to an image as a filter + +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for filter application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Filter application + +

    +
    +
    +
    +
    + + filter + + : + float32[][] +
    +
    +

    + A two-dimensional array applied to an image as a filter +

    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for filter application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + fishEye kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + fishEye kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for fisheye filter application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Applying fisheye filter to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for fisheye filter application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + mirror side kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + mirror side kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + side + + : + MirrorDirection + - + The side to which the image will be reflected + +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for reflection application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Reflection of image + +

    +
    +
    +
    +
    + + side + + : + MirrorDirection +
    +
    +

    + The side to which the image will be reflected +

    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for reflection application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + rotate side kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + rotate side kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + side + + : + Side + - + The side to which the image will be rotated + +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for rotation application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Rotate of image + +

    +
    +
    +
    +
    + + side + + : + Side +
    +
    +

    + The side to which the image will be rotated +

    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for rotation application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-imagearrayprocessing.html b/temp/watch-docs/Reference/imageprocessing-imagearrayprocessing.html new file mode 100644 index 00000000..b817c849 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-imagearrayprocessing.html @@ -0,0 +1,497 @@ + + + + + + ImageArrayProcessing (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + ImageArrayProcessing Module +

    + +
    +
    +

    + + Module with implementation of processing array of images + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + arrayOfImagesProcessing inputDir outputDir conversion agentMod + + +

    +
    +
    +
    + Full Usage: + arrayOfImagesProcessing inputDir outputDir conversion agentMod +
    +
    + Parameters: +
      + + + inputDir + + : + string + - + Path to the folder with images + +
      + + + outputDir + + : + string + - + Path to save + +
      + + + conversion + + : + MyImage -> MyImage + - + Image transformation + +
      + + + agentMod + + : + AgentStatus + - + Processing with or without agent assistance + +
      +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Processing array of images + +

    +
    +
    +
    +
    + + inputDir + + : + string +
    +
    +

    + Path to the folder with images +

    +
    +
    + + outputDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + conversion + + : + MyImage -> MyImage +
    +
    +

    + Image transformation +

    +
    +
    + + agentMod + + : + AgentStatus +
    +
    +

    + Processing with or without agent assistance +

    +
    +
    +
    +
    +
    + +

    + + + extensions + + +

    +
    +
    +
    + Full Usage: + extensions +
    +
    + + Returns: + string[] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + string[] +
    +
    +
    +
    +
    + +

    + + + listAllFiles dir + + +

    +
    +
    +
    + Full Usage: + listAllFiles dir +
    +
    + Parameters: +
      + + + dir + + : + string + +
      +
    +
    + + Returns: + string list + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + List of all files in directory with correct extensions + +

    +
    +
    +
    +
    + + dir + + : + string +
    +
    +
    +
    +
    + + Returns: + + string list +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-kernels.html b/temp/watch-docs/Reference/imageprocessing-kernels.html new file mode 100644 index 00000000..e2b820df --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-kernels.html @@ -0,0 +1,427 @@ + + + + + + Kernels (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Kernels Module +

    + +
    +
    +

    + + Module with kernels for image processing + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + edgesKernel + + +

    +
    +
    +
    + Full Usage: + edgesKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + embossKernel + + +

    +
    +
    +
    + Full Usage: + embossKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + gaussianBlur7x7Kernel + + +

    +
    +
    +
    + Full Usage: + gaussianBlur7x7Kernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + gaussianBlurKernel + + +

    +
    +
    +
    + Full Usage: + gaussianBlurKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + sharpenKernel + + +

    +
    +
    +
    + Full Usage: + sharpenKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-main.html b/temp/watch-docs/Reference/imageprocessing-main.html new file mode 100644 index 00000000..f0525836 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-main.html @@ -0,0 +1,291 @@ + + + + + + Main (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Main Module +

    + +
    +
    +

    + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + main argv + + +

    +
    +
    +
    + Full Usage: + main argv +
    +
    + Parameters: +
      + + + argv + + : + string[] + +
      +
    +
    + + Returns: + int + +
    +
    +
    +
    +
    +
    +
    + + argv + + : + string[] +
    +
    +
    +
    +
    + + Returns: + + int +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-myimage-myimage.html b/temp/watch-docs/Reference/imageprocessing-myimage-myimage.html new file mode 100644 index 00000000..ed09f6f4 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-myimage-myimage.html @@ -0,0 +1,540 @@ + + + + + + MyImage (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + MyImage Type +

    + +
    +
    +

    + + Type to represent images + +

    +
    +
    +
    +
    +
    +
    +
    +

    + Record fields +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Record Field + + Description +
    +
    + +

    + + + Data + + +

    +
    +
    +
    + Full Usage: + Data +
    +
    + + Field type: + byte array + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + byte array +
    +
    +
    +
    +
    + +

    + + + Height + + +

    +
    +
    +
    + Full Usage: + Height +
    +
    + + Field type: + int + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + int +
    +
    +
    +
    +
    + +

    + + + Name + + +

    +
    +
    +
    + Full Usage: + Name +
    +
    + + Field type: + string + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + string +
    +
    +
    +
    +
    + +

    + + + Width + + +

    +
    +
    +
    + Full Usage: + Width +
    +
    + + Field type: + int + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + int +
    +
    +
    +
    +
    +
    +
    +

    + Constructors +

    + + + + + + + + + + + + + +
    + Constructor + + Description +
    +
    + +

    + + + MyImage(data, width, height, name) + + +

    +
    +
    +
    + Full Usage: + MyImage(data, width, height, name) +
    +
    + Parameters: +
      + + + data + + : + byte array + +
      + + + width + + : + int + +
      + + + height + + : + int + +
      + + + name + + : + string + +
      +
    +
    + + Returns: + MyImage + +
    +
    +
    +
    +
    +
    +
    + + data + + : + byte array +
    +
    +
    + + width + + : + int +
    +
    +
    + + height + + : + int +
    +
    +
    + + name + + : + string +
    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-myimage.html b/temp/watch-docs/Reference/imageprocessing-myimage.html new file mode 100644 index 00000000..cff5e35e --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-myimage.html @@ -0,0 +1,451 @@ + + + + + + MyImage (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + MyImage Module +

    + +
    +
    +

    + +

    +
    +
    +
    +

    + Types +

    + + + + + + + + + + + + + +
    + Type + + Description +
    +

    + + + MyImage + + +

    +
    +
    + + + + + + +

    + + Type to represent images + +

    +
    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + loadAsImage file + + +

    +
    +
    +
    + Full Usage: + loadAsImage file +
    +
    + Parameters: +
      + + + file + + : + string + +
      +
    +
    + + Returns: + MyImage + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Load image as MyImage type + +

    +
    +
    +
    +
    + + file + + : + string +
    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +
    +
    +
    +
    + +

    + + + saveImage image file + + +

    +
    +
    +
    + Full Usage: + saveImage image file +
    +
    + Parameters: +
      + + + image + + : + MyImage + +
      + + + file + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Save MyImage in a specific directory + +

    +
    +
    +
    +
    + + image + + : + MyImage +
    +
    +
    + + file + + : + string +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types-agentstatus.html b/temp/watch-docs/Reference/imageprocessing-types-agentstatus.html new file mode 100644 index 00000000..3876aa0f --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types-agentstatus.html @@ -0,0 +1,322 @@ + + + + + + AgentStatus (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + AgentStatus Type +

    + +
    +
    +

    + + Type for determining the status of an agent + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Off + + +

    +
    +
    +
    + Full Usage: + Off +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + On + + +

    +
    +
    +
    + Full Usage: + On +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types-devices.html b/temp/watch-docs/Reference/imageprocessing-types-devices.html new file mode 100644 index 00000000..97be7dec --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types-devices.html @@ -0,0 +1,390 @@ + + + + + + Devices (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Devices Type +

    + +
    +
    +

    + + Type for defining the executor of transformations + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Amd + + +

    +
    +
    +
    + Full Usage: + Amd +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + AnyGpu + + +

    +
    +
    +
    + Full Usage: + AnyGpu +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Intel + + +

    +
    +
    +
    + Full Usage: + Intel +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Nvidia + + +

    +
    +
    +
    + Full Usage: + Nvidia +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types-mirrordirection.html b/temp/watch-docs/Reference/imageprocessing-types-mirrordirection.html new file mode 100644 index 00000000..40f45355 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types-mirrordirection.html @@ -0,0 +1,322 @@ + + + + + + MirrorDirection (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + MirrorDirection Type +

    + +
    +
    +

    + + Type for determining the direction of image reflection + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Horizontal + + +

    +
    +
    +
    + Full Usage: + Horizontal +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Vertical + + +

    +
    +
    +
    + Full Usage: + Vertical +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types-modifications.html b/temp/watch-docs/Reference/imageprocessing-types-modifications.html new file mode 100644 index 00000000..0a28cf47 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types-modifications.html @@ -0,0 +1,594 @@ + + + + + + Modifications (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Modifications Type +

    + +
    +
    +

    + + Type for determining the applied image transformation + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + ClockwiseRotation + + +

    +
    +
    +
    + Full Usage: + ClockwiseRotation +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + CounterClockwiseRotation + + +

    +
    +
    +
    + Full Usage: + CounterClockwiseRotation +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Edges + + +

    +
    +
    +
    + Full Usage: + Edges +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Emboss + + +

    +
    +
    +
    + Full Usage: + Emboss +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + FishEye + + +

    +
    +
    +
    + Full Usage: + FishEye +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Gauss5x5 + + +

    +
    +
    +
    + Full Usage: + Gauss5x5 +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Gauss7x7 + + +

    +
    +
    +
    + Full Usage: + Gauss7x7 +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + MirrorHorizontal + + +

    +
    +
    +
    + Full Usage: + MirrorHorizontal +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + MirrorVertical + + +

    +
    +
    +
    + Full Usage: + MirrorVertical +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Sharpen + + +

    +
    +
    +
    + Full Usage: + Sharpen +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types-msg.html b/temp/watch-docs/Reference/imageprocessing-types-msg.html new file mode 100644 index 00000000..b83f1669 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types-msg.html @@ -0,0 +1,436 @@ + + + + + + Msg (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Msg Type +

    + +
    +
    +

    + + Type to define a message to be forwarded between agents + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + EOS AsyncReplyChannel<unit> + + +

    +
    +
    +
    + Full Usage: + EOS AsyncReplyChannel<unit> +
    +
    + Parameters: + +
    +
    +
    +
    +
    +
    +
    + + Item + + : + AsyncReplyChannel<unit> +
    +
    +
    +
    +
    + +

    + + + Img MyImage + + +

    +
    +
    +
    + Full Usage: + Img MyImage +
    +
    + Parameters: + +
    +
    +
    +
    +
    +
    +
    + + Item + + : + MyImage +
    +
    +
    +
    +
    + +

    + + + Message string + + +

    +
    +
    +
    + Full Usage: + Message string +
    +
    + Parameters: +
      + + + Item + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + Item + + : + string +
    +
    +
    +
    +
    + +

    + + + Path string + + +

    +
    +
    +
    + Full Usage: + Path string +
    +
    + Parameters: +
      + + + Item + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + Item + + : + string +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types-side.html b/temp/watch-docs/Reference/imageprocessing-types-side.html new file mode 100644 index 00000000..73b8ebee --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types-side.html @@ -0,0 +1,322 @@ + + + + + + Side (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Side Type +

    + +
    +
    +

    + + Type for determining the rotation side of the image + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Left + + +

    +
    +
    +
    + Full Usage: + Left +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Right + + +

    +
    +
    +
    + Full Usage: + Right +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-types.html b/temp/watch-docs/Reference/imageprocessing-types.html new file mode 100644 index 00000000..a9c655d2 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing-types.html @@ -0,0 +1,416 @@ + + + + + + Types (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Types Module +

    + +
    +
    +

    + + Module with necessary algebraic types + +

    +
    +
    +
    +

    + Types +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Type + + Description +
    +

    + + + AgentStatus + + +

    +
    +
    + + + + + + +

    + + Type for determining the status of an agent + +

    +
    +
    +

    + + + Devices + + +

    +
    +
    + + + + + + +

    + + Type for defining the executor of transformations + +

    +
    +
    +

    + + + MirrorDirection + + +

    +
    +
    + + + + + + +

    + + Type for determining the direction of image reflection + +

    +
    +
    +

    + + + Modifications + + +

    +
    +
    + + + + + + +

    + + Type for determining the applied image transformation + +

    +
    +
    +

    + + + Msg + + +

    +
    +
    + + + + + + +

    + + Type to define a message to be forwarded between agents + +

    +
    +
    +

    + + + Side + + +

    +
    +
    + + + + + + +

    + + Type for determining the rotation side of the image + +

    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing.html b/temp/watch-docs/Reference/imageprocessing.html new file mode 100644 index 00000000..2fc44926 --- /dev/null +++ b/temp/watch-docs/Reference/imageprocessing.html @@ -0,0 +1,516 @@ + + + + + + ImageProcessing + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + ImageProcessing Namespace +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Modules + + Description +
    +

    + + + Agents + + +

    +
    +
    + + + + + + +

    + + Module with implementation of agents for image processing + +

    +
    +
    +

    + + + Arguments + + +

    +
    +
    + + + + + + +

    + + Module with implementation of work via console commands + +

    +
    +
    +

    + + + CpuProcessing + + +

    +
    +
    + + + + + + +

    + + Module with functions for image processing on the CPU + +

    +
    +
    +

    + + + GpuKernels + + +

    +
    +
    + + + + + + +

    + + Module with kernels for image processing on the GPU + +

    +
    +
    +

    + + + GpuProcessing + + +

    +
    +
    + + + + + + +

    + + Module with functions for image processing on the GPU + +

    +
    +
    +

    + + + ImageArrayProcessing + + +

    +
    +
    + + + + + + +

    + + Module with implementation of processing array of images + +

    +
    +
    +

    + + + Kernels + + +

    +
    +
    + + + + + + +

    + + Module with kernels for image processing + +

    +
    +
    +

    + + + Main + + +

    +
    +
    + + + + + + +

    + +

    +
    +
    +

    + + + MyImage + + +

    +
    +
    + + + + + + +

    + +

    +
    +
    +

    + + + Types + + +

    +
    +
    + + + + + + +

    + + Module with necessary algebraic types + +

    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/index.html b/temp/watch-docs/Reference/index.html new file mode 100644 index 00000000..a03747c2 --- /dev/null +++ b/temp/watch-docs/Reference/index.html @@ -0,0 +1,210 @@ + + + + + + ImageProcessing (API Reference) + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + API Reference +

    +

    + Available Namespaces: +

    + + + + + + + + + + + + + +
    + Namespace + + Description +
    + + ImageProcessing + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/_menu-item_template.html b/temp/watch-docs/_menu-item_template.html new file mode 100644 index 00000000..dc1b656a --- /dev/null +++ b/temp/watch-docs/_menu-item_template.html @@ -0,0 +1 @@ +
  • {{fsdocs-menu-item-content}}
  • \ No newline at end of file diff --git a/temp/watch-docs/_menu_template.html b/temp/watch-docs/_menu_template.html new file mode 100644 index 00000000..066716c9 --- /dev/null +++ b/temp/watch-docs/_menu_template.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/temp/watch-docs/content/fsdocs-custom.css b/temp/watch-docs/content/fsdocs-custom.css new file mode 100644 index 00000000..c2da89ad --- /dev/null +++ b/temp/watch-docs/content/fsdocs-custom.css @@ -0,0 +1,15 @@ +.fsharp-icon-logo { + width: 25px; + margin-top: -2px; + -webkit-filter: grayscale(100%) brightness(1) invert(1); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%) brightness(1) invert(1); +} + + +body .navbar .dropdown-menu .active .bi { + display: block !important; +} + +nav.navbar .dropdown-item img.fsharp-icon-logo { + margin-right: 0px; +} \ No newline at end of file diff --git a/temp/watch-docs/content/fsdocs-dark.css b/temp/watch-docs/content/fsdocs-dark.css new file mode 100644 index 00000000..001b6530 --- /dev/null +++ b/temp/watch-docs/content/fsdocs-dark.css @@ -0,0 +1,50 @@ +@import url('https://raw.githubusercontent.com/tonsky/FiraCode/fixed/distr/fira_code.css'); +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +:root { + --fsdocs-text-color:#d1d1d1; + --fsdocs-pre-border-color: #000000; + --fsdocs-pre-border-color-top: #070707; + --fsdocs-pre-background-color: #1E1E1E; + --fsdocs-pre-color: #e2e2e2; + --fsdocs-table-pre-background-color: #1d1d1d; + --fsdocs-table-pre-color: #c9c9c9; + + --fsdocs-code-strings-color: #ea9a75; + --fsdocs-code-printf-color: #E0C57F; + --fsdocs-code-escaped-color: #EA8675; + --fsdocs-code-identifiers-color: var(--fsdocs-text-color); + --fsdocs-code-module-color: #43AEC6; + --fsdocs-code-reference-color: #6a8dd8; + --fsdocs-code-value-color: #43AEC6; + --fsdocs-code-interface-color: #43AEC6; + --fsdocs-code-typearg-color: #43AEC6; + --fsdocs-code-disposable-color: #2f798a; + --fsdocs-code-property-color: #43AEC6; + --fsdocs-code-punctuation-color: #43AEC6; + --fsdocs-code-punctuation2-color: #e1e1e1; + --fsdocs-code-function-color: #e1e1e1; + --fsdocs-code-function2-color: #43AEC6; + --fsdocs-code-activepattern-color: #4ec9b0; + --fsdocs-code-unioncase-color: #4ec9b0; + --fsdocs-code-enumeration-color: #4ec9b0; + --fsdocs-code-keywords-color: #2248c4; + --fsdocs-code-comment-color: #329215; + --fsdocs-code-operators-color: #af75c1; + --fsdocs-code-numbers-color: #96C71D; + --fsdocs-code-linenumbers-color: #80b0b0; + --fsdocs-code-mutable-color: #997f0c; + --fsdocs-code-inactive-color: #808080; + --fsdocs-code-preprocessor-color: #af75c1; + --fsdocs-code-fsioutput-color: #808080; + --fsdocs-code-tooltip-color: #d1d1d1; +} + + +.fsdocs-source-link img { + -webkit-filter: grayscale(100%) brightness(1) invert(1); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%) brightness(1) invert(1); +} \ No newline at end of file diff --git a/temp/watch-docs/content/fsdocs-default.css b/temp/watch-docs/content/fsdocs-default.css new file mode 100644 index 00000000..bf73bfa5 --- /dev/null +++ b/temp/watch-docs/content/fsdocs-default.css @@ -0,0 +1,613 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono:wght@400;500;600&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: 'Hind Vadodara', sans-serif; + /* padding-top: 0px; + padding-bottom: 40px; +*/ +} + +blockquote { + margin: 0 1em 0 0.25em; + margin-top: 0px; + margin-right: 1em; + margin-bottom: 0px; + margin-left: 0.25em; + padding: 0 .75em 0 1em; + border-left: 1px solid #777; + border-right: 0px solid #777; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} + + .masthead .muted a { + text-decoration: none; + color: #999999; + } + + .masthead ul, .masthead li { + margin-bottom: 0px; + } + + .masthead .nav li { + margin-top: 15px; + font-size: 110%; + } + + .masthead h3 { + margin-top: 15px; + margin-bottom: 5px; + font-size: 170%; + } + +/*-------------------------------------------------------------------------- + Formatting fsdocs-content +/*--------------------------------------------------------------------------*/ + +/* Change font sizes for headings etc. */ +#fsdocs-content h1 { + margin: 30px 0px 15px 0px; + /* font-weight: 400; */ + font-size: 2rem; + letter-spacing: 1.78px; + line-height: 2.5rem; + font-weight: 400; +} + +#fsdocs-content h2 { + font-size: 1.6rem; + margin: 20px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content h3 { + font-size: 1.2rem; + margin: 15px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content hr { + margin: 0px 0px 20px 0px; +} + +#fsdocs-content li { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + margin: 0px 0px 15px 0px; +} + +#fsdocs-content p { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: #262626; +} + +#fsdocs-content a { + color: #4974D1; +} +/* remove the default bootstrap bold on dt elements */ +#fsdocs-content dt { + font-weight: normal; +} + + + +/*-------------------------------------------------------------------------- + Formatting tables in fsdocs-content, using learn.microsoft.com tables +/*--------------------------------------------------------------------------*/ + +#fsdocs-content .table { + table-layout: auto; + width: 100%; + font-size: 0.875rem; +} + + #fsdocs-content .table caption { + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 2px; + text-transform: uppercase; + padding: 1.125rem; + border-width: 0 0 1px; + border-style: solid; + border-color: #e3e3e3; + text-align: right; + } + + #fsdocs-content .table td, + #fsdocs-content .table th { + display: table-cell; + word-wrap: break-word; + padding: 0.75rem 1rem 0.75rem 0rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #e3e3e3; + border-right: 0; + border-left: 0; + border-bottom: 0; + border-style: solid; + } + + /* suppress the top line on inner lists such as tables of exceptions */ + #fsdocs-content .table .fsdocs-exception-list td, + #fsdocs-content .table .fsdocs-exception-list th { + border-top: 0 + } + + #fsdocs-content .table td p:first-child, + #fsdocs-content .table th p:first-child { + margin-top: 0; + } + + #fsdocs-content .table td.nowrap, + #fsdocs-content .table th.nowrap { + white-space: nowrap; + } + + #fsdocs-content .table td.is-narrow, + #fsdocs-content .table th.is-narrow { + width: 15%; + } + + #fsdocs-content .table th:not([scope='row']) { + border-top: 0; + border-bottom: 1px; + } + + #fsdocs-content .table > caption + thead > tr:first-child > td, + #fsdocs-content .table > colgroup + thead > tr:first-child > td, + #fsdocs-content .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + #fsdocs-content .table table-striped > tbody > tr:nth-of-type(odd) { + background-color: var(--box-shadow-light); + } + + #fsdocs-content .table.min { + width: unset; + } + + #fsdocs-content .table.is-left-aligned td:first-child, + #fsdocs-content .table.is-left-aligned th:first-child { + padding-left: 0; + } + + #fsdocs-content .table.is-left-aligned td:first-child a, + #fsdocs-content .table.is-left-aligned th:first-child a { + outline-offset: -0.125rem; + } + +@media screen and (max-width: 767px), screen and (min-resolution: 120dpi) and (max-width: 767.9px) { + #fsdocs-content .table.is-stacked-mobile td:nth-child(1) { + display: block; + width: 100%; + padding: 1rem 0; + } + + #fsdocs-content .table.is-stacked-mobile td:not(:nth-child(1)) { + display: block; + border-width: 0; + padding: 0 0 1rem; + } +} + +#fsdocs-content .table.has-inner-borders th, +#fsdocs-content .table.has-inner-borders td { + border-right: 1px solid #e3e3e3; +} + + #fsdocs-content .table.has-inner-borders th:last-child, + #fsdocs-content .table.has-inner-borders td:last-child { + border-right: none; + } + +.fsdocs-entity-list .fsdocs-entity-name { + width: 25%; + font-weight: bold; +} + +.fsdocs-member-list .fsdocs-member-usage { + width: 35%; +} + +/*-------------------------------------------------------------------------- + Formatting xmldoc sections in fsdocs-content +/*--------------------------------------------------------------------------*/ + +.fsdocs-summary { + display: inline; +} + +.fsdocs-xmldoc, .fsdocs-entity-xmldoc, .fsdocs-member-xmldoc { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: #262626; +} + +.fsdocs-xmldoc h1 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h2 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h3 { + font-size: 1.1rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-member-xmldoc details[open] summary + * { + margin-top: 1rem; +} + +/* #fsdocs-nav .searchbox { + margin-top: 30px; + margin-bottom: 30px; +} */ + +#fsdocs-nav img.logo{ + width:90%; + /* height:140px; */ + /* margin:10px 0px 0px 20px; */ + margin-top:40px; + border-style:none; +} + +#fsdocs-nav input{ + /* margin-left: 20px; */ + margin-right: 20px; + margin-top: 20px; + margin-bottom: 20px; + width: 93%; + -webkit-border-radius: 0; + border-radius: 0; +} + +#fsdocs-nav { + /* margin-left: -5px; */ + /* width: 90%; */ + font-size:0.95rem; +} + +#fsdocs-nav li.nav-header{ + /* margin-left: -5px; */ + /* width: 90%; */ + padding-left: 0; + color: #262626; + text-transform: none; + font-size:16px; + margin-top: 9px; + font-weight: bold; +} + +#fsdocs-nav a{ + padding-left: 0; + color: #6c6c6d; + /* margin-left: 5px; */ + /* width: 90%; */ +} + +/*-------------------------------------------------------------------------- + Formatting pre and code sections in fsdocs-content (code highlighting is + further below) +/*--------------------------------------------------------------------------*/ + +#fsdocs-content code { + /* font-size: 0.83rem; */ + font: 0.85rem 'Roboto Mono', monospace; + background-color: #f7f7f900; + border: 0px; + padding: 0px; + /* word-wrap: break-word; */ + /* white-space: pre; */ +} + +/* omitted */ +#fsdocs-content span.omitted { + background: #3c4e52; + border-radius: 5px; + color: #808080; + padding: 0px 0px 1px 0px; +} + +#fsdocs-content pre .fssnip code { + font: 0.86rem 'Roboto Mono', monospace; +} + +#fsdocs-content table.pre, +#fsdocs-content pre.fssnip, +#fsdocs-content pre { + line-height: 13pt; + border: 0px solid #d8d8d8; + border-top: 0px solid #e3e3e3; + border-collapse: separate; + white-space: pre; + font: 0.86rem 'Roboto Mono', monospace; + width: 100%; + margin: 10px 0px 20px 0px; + background-color: #f3f4f7; + padding: 10px; + border-radius: 5px; + color: #8e0e2b; + max-width: none; + box-sizing: border-box; +} + +#fsdocs-content pre.fssnip code { + font: 0.86rem 'Roboto Mono', monospace; + font-weight: 600; +} + +#fsdocs-content table.pre { + background-color: #fff7ed; +} + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border-radius: 0px; + width: 100%; + background-color: #fff7ed; + color: #837b79; +} + +#fsdocs-content table.pre td { + padding: 0px; + white-space: normal; + margin: 0px; + width: 100%; +} + +#fsdocs-content table.pre td.lines { + width: 30px; +} + + +#fsdocs-content pre { + word-wrap: inherit; +} + +.fsdocs-example-header { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 700; + color: #262626; +} + +/*-------------------------------------------------------------------------- + Formatting github source links +/*--------------------------------------------------------------------------*/ + +.fsdocs-source-link { + float: right; + text-decoration: none; +} + + .fsdocs-source-link img { + border-style: none; + margin-left: 10px; + width: auto; + height: 1.4em; + } + + .fsdocs-source-link .hover { + display: none; + } + + .fsdocs-source-link:hover .hover { + display: block; + } + + .fsdocs-source-link .normal { + display: block; + } + + .fsdocs-source-link:hover .normal { + display: none; + } + +/*-------------------------------------------------------------------------- + Formatting logo +/*--------------------------------------------------------------------------*/ + +#fsdocs-logo { + width:140px; + height:140px; + margin:10px 0px 0px 0px; + border-style:none; +} + +/*-------------------------------------------------------------------------- + +/*--------------------------------------------------------------------------*/ + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border: none; +} + +/*-------------------------------------------------------------------------- + Remove formatting from links +/*--------------------------------------------------------------------------*/ + +#fsdocs-content h1 a, +#fsdocs-content h1 a:hover, +#fsdocs-content h1 a:focus, +#fsdocs-content h2 a, +#fsdocs-content h2 a:hover, +#fsdocs-content h2 a:focus, +#fsdocs-content h3 a, +#fsdocs-content h3 a:hover, +#fsdocs-content h3 a:focus, +#fsdocs-content h4 a, +#fsdocs-content h4 a:hover, #fsdocs-content +#fsdocs-content h4 a:focus, +#fsdocs-content h5 a, +#fsdocs-content h5 a:hover, +#fsdocs-content h5 a:focus, +#fsdocs-content h6 a, +#fsdocs-content h6 a:hover, +#fsdocs-content h6 a:focus { + color: #262626; + text-decoration: none; + text-decoration-style: none; + /* outline: none */ +} + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +.fsdocs-param-name, +.fsdocs-return-name, +.fsdocs-param { + font-weight: 900; + font-size: 0.85rem; + font-family: 'Roboto Mono', monospace; +} +/* strings --- and stlyes for other string related formats */ +#fsdocs-content span.s { + color: #dd1144; +} +/* printf formatters */ +#fsdocs-content span.pf { + color: #E0C57F; +} +/* escaped chars */ +#fsdocs-content span.e { + color: #EA8675; +} + +/* identifiers --- and styles for more specific identifier types */ +#fsdocs-content span.id { + color: #262626; +} +/* module */ +#fsdocs-content span.m { + color: #009999; +} +/* reference type */ +#fsdocs-content span.rt { + color: #4974D1; +} +/* value type */ +#fsdocs-content span.vt { + color: #43AEC6; +} +/* interface */ +#fsdocs-content span.if { + color: #43AEC6; +} +/* type argument */ +#fsdocs-content span.ta { + color: #43AEC6; +} +/* disposable */ +#fsdocs-content span.d { + color: #43AEC6; +} +/* property */ +#fsdocs-content span.prop { + color: #43AEC6; +} +/* punctuation */ +#fsdocs-content span.p { + color: #43AEC6; +} +#fsdocs-content span.pn { + color: #262626; +} +/* function */ +#fsdocs-content span.f { + color: #e1e1e1; +} +#fsdocs-content span.fn { + color: #990000; +} +/* active pattern */ +#fsdocs-content span.pat { + color: #4ec9b0; +} +/* union case */ +#fsdocs-content span.u { + color: #4ec9b0; +} +/* enumeration */ +#fsdocs-content span.e { + color: #4ec9b0; +} +/* keywords */ +#fsdocs-content span.k { + color: #b68015; + /* font-weight: bold; */ +} +/* comment */ +#fsdocs-content span.c { + color: #808080; + font-weight: 400; + font-style: italic; +} +/* operators */ +#fsdocs-content span.o { + color: #af75c1; +} +/* numbers */ +#fsdocs-content span.n { + color: #009999; +} +/* line number */ +#fsdocs-content span.l { + color: #80b0b0; +} +/* mutable var or ref cell */ +#fsdocs-content span.v { + color: #d1d1d1; + font-weight: bold; +} +/* inactive code */ +#fsdocs-content span.inactive { + color: #808080; +} +/* preprocessor */ +#fsdocs-content span.prep { + color: #af75c1; +} +/* fsi output */ +#fsdocs-content span.fsi { + color: #808080; +} + +/* tool tip */ +div.fsdocs-tip { + background: #475b5f; + border-radius: 4px; + font: 0.85rem 'Roboto Mono', monospace; + padding: 6px 8px 6px 8px; + display: none; + color: #d1d1d1; + pointer-events: none; +} + + div.fsdocs-tip code { + color: #d1d1d1; + font: 0.85rem 'Roboto Mono', monospace; + } + diff --git a/temp/watch-docs/content/fsdocs-light.css b/temp/watch-docs/content/fsdocs-light.css new file mode 100644 index 00000000..474512dc --- /dev/null +++ b/temp/watch-docs/content/fsdocs-light.css @@ -0,0 +1,43 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +:root { + --fsdocs-text-color:#262626; + --fsdocs-pre-border-color: #d8d8d8; + --fsdocs-pre-border-color-top: #e3e3e3; + --fsdocs-pre-background-color: #f3f4f7; + --fsdocs-pre-color: #8e0e2b; + --fsdocs-table-pre-background-color: #fff7ed; + --fsdocs-table-pre-color: #837b79; + + --fsdocs-code-strings-color: #dd1144; + --fsdocs-code-printf-color: #E0C57F; + --fsdocs-code-escaped-color: #EA8675; + --fsdocs-code-identifiers-color: var(--fsdocs-text-color); + --fsdocs-code-module-color: #009999; + --fsdocs-code-reference-color: #4974D1; + --fsdocs-code-value-color: #43AEC6; + --fsdocs-code-interface-color: #43AEC6; + --fsdocs-code-typearg-color: #43AEC6; + --fsdocs-code-disposable-color: #43AEC6; + --fsdocs-code-property-color: #43AEC6; + --fsdocs-code-punctuation-color: #43AEC6; + --fsdocs-code-punctuation2-color: #var(--fsdocs-text-color); + --fsdocs-code-function-color: #e1e1e1; + --fsdocs-code-function2-color: #990000; + --fsdocs-code-activepattern-color: #4ec9b0; + --fsdocs-code-unioncase-color: #4ec9b0; + --fsdocs-code-enumeration-color: #4ec9b0; + --fsdocs-code-keywords-color: #b68015; + --fsdocs-code-comment-color: #808080; + --fsdocs-code-operators-color: #af75c1; + --fsdocs-code-numbers-color: #009999; + --fsdocs-code-linenumbers-color: #80b0b0; + --fsdocs-code-mutable-color: #d1d1d1; + --fsdocs-code-inactive-color: #808080; + --fsdocs-code-preprocessor-color: #af75c1; + --fsdocs-code-fsioutput-color: #808080; + --fsdocs-code-tooltip-color: #d1d1d1; +} \ No newline at end of file diff --git a/temp/watch-docs/content/fsdocs-main.css b/temp/watch-docs/content/fsdocs-main.css new file mode 100644 index 00000000..a1748d2f --- /dev/null +++ b/temp/watch-docs/content/fsdocs-main.css @@ -0,0 +1,604 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: 'Hind Vadodara', sans-serif; + /* padding-top: 0px; + padding-bottom: 40px; +*/ +} + +blockquote { + margin: 0 1em 0 0.25em; + margin-top: 0px; + margin-right: 1em; + margin-bottom: 0px; + margin-left: 0.25em; + padding: 0 .75em 0 1em; + border-left: 1px solid #777; + border-right: 0px solid #777; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} + + .masthead .muted a { + text-decoration: none; + color: #999999; + } + + .masthead ul, .masthead li { + margin-bottom: 0px; + } + + .masthead .nav li { + margin-top: 15px; + font-size: 110%; + } + + .masthead h3 { + margin-top: 15px; + margin-bottom: 5px; + font-size: 170%; + } + +/*-------------------------------------------------------------------------- + Formatting fsdocs-content +/*--------------------------------------------------------------------------*/ + +/* Change font sizes for headings etc. */ +#fsdocs-content h1 { + margin: 30px 0px 15px 0px; + /* font-weight: 400; */ + font-size: 2rem; + letter-spacing: 1.78px; + line-height: 2.5rem; + font-weight: 400; +} + +#fsdocs-content h2 { + font-size: 1.6rem; + margin: 20px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content h3 { + font-size: 1.2rem; + margin: 15px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content hr { + margin: 0px 0px 20px 0px; +} + +#fsdocs-content li { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + margin: 0px 0px 15px 0px; +} + +#fsdocs-content p { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: var(--fsdocs-text-color);; +} + +#fsdocs-content a:not(.btn) { + color: #4974D1; +} +/* remove the default bootstrap bold on dt elements */ +#fsdocs-content dt { + font-weight: normal; +} + + + +/*-------------------------------------------------------------------------- + Formatting tables in fsdocs-content, using learn.microsoft.com tables +/*--------------------------------------------------------------------------*/ + +#fsdocs-content .table { + table-layout: auto; + width: 100%; + font-size: 0.875rem; +} + + #fsdocs-content .table caption { + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 2px; + text-transform: uppercase; + padding: 1.125rem; + border-width: 0 0 1px; + border-style: solid; + border-color: #e3e3e3; + text-align: right; + } + + #fsdocs-content .table td, + #fsdocs-content .table th { + display: table-cell; + word-wrap: break-word; + padding: 0.75rem 1rem 0.75rem 0rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #e3e3e3; + border-right: 0; + border-left: 0; + border-bottom: 0; + border-style: solid; + } + + /* suppress the top line on inner lists such as tables of exceptions */ + #fsdocs-content .table .fsdocs-exception-list td, + #fsdocs-content .table .fsdocs-exception-list th { + border-top: 0 + } + + #fsdocs-content .table td p:first-child, + #fsdocs-content .table th p:first-child { + margin-top: 0; + } + + #fsdocs-content .table td.nowrap, + #fsdocs-content .table th.nowrap { + white-space: nowrap; + } + + #fsdocs-content .table td.is-narrow, + #fsdocs-content .table th.is-narrow { + width: 15%; + } + + #fsdocs-content .table th:not([scope='row']) { + border-top: 0; + border-bottom: 1px; + } + + #fsdocs-content .table > caption + thead > tr:first-child > td, + #fsdocs-content .table > colgroup + thead > tr:first-child > td, + #fsdocs-content .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + #fsdocs-content .table table-striped > tbody > tr:nth-of-type(odd) { + background-color: var(--box-shadow-light); + } + + #fsdocs-content .table.min { + width: unset; + } + + #fsdocs-content .table.is-left-aligned td:first-child, + #fsdocs-content .table.is-left-aligned th:first-child { + padding-left: 0; + } + + #fsdocs-content .table.is-left-aligned td:first-child a, + #fsdocs-content .table.is-left-aligned th:first-child a { + outline-offset: -0.125rem; + } + +@media screen and (max-width: 767px), screen and (min-resolution: 120dpi) and (max-width: 767.9px) { + #fsdocs-content .table.is-stacked-mobile td:nth-child(1) { + display: block; + width: 100%; + padding: 1rem 0; + } + + #fsdocs-content .table.is-stacked-mobile td:not(:nth-child(1)) { + display: block; + border-width: 0; + padding: 0 0 1rem; + } +} + +#fsdocs-content .table.has-inner-borders th, +#fsdocs-content .table.has-inner-borders td { + border-right: 1px solid #e3e3e3; +} + + #fsdocs-content .table.has-inner-borders th:last-child, + #fsdocs-content .table.has-inner-borders td:last-child { + border-right: none; + } + +.fsdocs-entity-list .fsdocs-entity-name { + width: 25%; + font-weight: bold; +} + +.fsdocs-member-list .fsdocs-member-usage { + width: 35%; +} + +/*-------------------------------------------------------------------------- + Formatting xmldoc sections in fsdocs-content +/*--------------------------------------------------------------------------*/ + +.fsdocs-xmldoc, .fsdocs-entity-xmldoc, .fsdocs-member-xmldoc { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: var(--fsdocs-text-color);; +} + +.fsdocs-xmldoc h1 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h2 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h3 { + font-size: 1.1rem; + margin: 10px 0px 0px 0px; +} + +/* #fsdocs-nav .searchbox { + margin-top: 30px; + margin-bottom: 30px; +} */ + +#fsdocs-nav img.logo{ + width:90%; + /* height:140px; */ + /* margin:10px 0px 0px 20px; */ + margin-top:40px; + border-style:none; +} + +#fsdocs-nav input{ + /* margin-left: 20px; */ + margin-right: 20px; + margin-top: 20px; + margin-bottom: 20px; + width: 93%; + -webkit-border-radius: 0; + border-radius: 0; +} + +#fsdocs-nav { + /* margin-left: -5px; */ + /* width: 90%; */ + font-size:0.95rem; +} + +#fsdocs-nav li.nav-header{ + /* margin-left: -5px; */ + /* width: 90%; */ + padding-left: 0; + color: var(--fsdocs-text-color);; + text-transform: none; + font-size:16px; + margin-top: 9px; + font-weight: bold; +} + +#fsdocs-nav a{ + padding-left: 0; + color: #6c6c6d; + /* margin-left: 5px; */ + /* width: 90%; */ +} + +/*-------------------------------------------------------------------------- + Formatting pre and code sections in fsdocs-content (code highlighting is + further below) +/*--------------------------------------------------------------------------*/ + +#fsdocs-content code { + /* font-size: 0.83rem; */ + font: 0.85rem 'Roboto Mono', monospace; + background-color: #f7f7f900; + border: 0px; + padding: 0px; + /* word-wrap: break-word; */ + /* white-space: pre; */ +} + +/* omitted */ +#fsdocs-content span.omitted { + background: #3c4e52; + border-radius: 5px; + color: #808080; + padding: 0px 0px 1px 0px; +} + +#fsdocs-content pre .fssnip code { + font: 0.86rem 'Roboto Mono', monospace; +} + +#fsdocs-content table.pre, +#fsdocs-content pre.fssnip, +#fsdocs-content pre { + line-height: 13pt; + border: 0px solid var(--fsdocs-pre-border-color); + border-top: 0px solid var(--fsdocs-pre-border-color-top); + border-collapse: separate; + white-space: pre; + font: 0.86rem 'Roboto Mono', monospace; + width: 100%; + margin: 10px 0px 20px 0px; + background-color: var(--fsdocs-pre-background-color); + padding: 10px; + border-radius: 5px; + color: var(--fsdocs-pre-color); + max-width: none; + box-sizing: border-box; +} + +#fsdocs-content pre.fssnip code { + font: 0.86rem 'Roboto Mono', monospace; + font-weight: 600; +} + +#fsdocs-content table.pre { + background-color: var(--fsdocs-table-pre-background-color);; +} + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border-radius: 0px; + width: 100%; + background-color: var(--fsdocs-table-pre-background-color); + color: var(--fsdocs-table-pre-color); +} + +#fsdocs-content table.pre td { + padding: 0px; + white-space: normal; + margin: 0px; + width: 100%; +} + +#fsdocs-content table.pre td.lines { + width: 30px; +} + + +#fsdocs-content pre { + word-wrap: inherit; +} + +.fsdocs-example-header { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 700; + color: var(--fsdocs-text-color);; +} + +/*-------------------------------------------------------------------------- + Formatting github source links +/*--------------------------------------------------------------------------*/ + +.fsdocs-source-link { + float: right; + text-decoration: none; +} + + .fsdocs-source-link img { + border-style: none; + margin-left: 10px; + width: auto; + height: 1.4em; + } + + .fsdocs-source-link .hover { + display: none; + } + + .fsdocs-source-link:hover .hover { + display: block; + } + + .fsdocs-source-link .normal { + display: block; + } + + .fsdocs-source-link:hover .normal { + display: none; + } + +/*-------------------------------------------------------------------------- + Formatting logo +/*--------------------------------------------------------------------------*/ + +#fsdocs-logo { + width:40px; + height:40px; + margin:10px 0px 0px 0px; + border-style:none; +} + +/*-------------------------------------------------------------------------- + +/*--------------------------------------------------------------------------*/ + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border: none; +} + +/*-------------------------------------------------------------------------- + Remove formatting from links +/*--------------------------------------------------------------------------*/ + +#fsdocs-content h1 a, +#fsdocs-content h1 a:hover, +#fsdocs-content h1 a:focus, +#fsdocs-content h2 a, +#fsdocs-content h2 a:hover, +#fsdocs-content h2 a:focus, +#fsdocs-content h3 a, +#fsdocs-content h3 a:hover, +#fsdocs-content h3 a:focus, +#fsdocs-content h4 a, +#fsdocs-content h4 a:hover, #fsdocs-content +#fsdocs-content h4 a:focus, +#fsdocs-content h5 a, +#fsdocs-content h5 a:hover, +#fsdocs-content h5 a:focus, +#fsdocs-content h6 a, +#fsdocs-content h6 a:hover, +#fsdocs-content h6 a:focus { + color: var(--fsdocs-text-color);; + text-decoration: none; + text-decoration-style: none; + /* outline: none */ +} + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +.fsdocs-param-name, +.fsdocs-return-name, +.fsdocs-param { + font-weight: 900; + font-size: 0.85rem; + font-family: 'Roboto Mono', monospace; +} +/* strings --- and stlyes for other string related formats */ +#fsdocs-content span.s { + color: var(--fsdocs-code-strings-color); +} +/* printf formatters */ +#fsdocs-content span.pf { + color: var(--fsdocs-code-printf-color); +} +/* escaped chars */ +#fsdocs-content span.e { + color: var(--fsdocs-code-escaped-color); +} + +/* identifiers --- and styles for more specific identifier types */ +#fsdocs-content span.id { + color: var(--fsdocs-identifiers-color);; +} +/* module */ +#fsdocs-content span.m { + color:var(--fsdocs-code-module-color); +} +/* reference type */ +#fsdocs-content span.rt { + color: var(--fsdocs-code-reference-color); +} +/* value type */ +#fsdocs-content span.vt { + color: var(--fsdocs-code-value-color); +} +/* interface */ +#fsdocs-content span.if { + color: var(--fsdocs-code-interface-color); +} +/* type argument */ +#fsdocs-content span.ta { + color: var(--fsdocs-code-typearg-color); +} +/* disposable */ +#fsdocs-content span.d { + color: var(--fsdocs-code-disposable-color); +} +/* property */ +#fsdocs-content span.prop { + color: var(--fsdocs-code-property-color); +} +/* punctuation */ +#fsdocs-content span.p { + color: var(--fsdocs-code-punctuation-color); +} +#fsdocs-content span.pn { + color: var(--fsdocs-code-punctuation2-color); +} +/* function */ +#fsdocs-content span.f { + color: var(--fsdocs-code-function-color); +} +#fsdocs-content span.fn { + color: var(--fsdocs-code-function2-color); +} +/* active pattern */ +#fsdocs-content span.pat { + color: var(--fsdocs-code-activepattern-color); +} +/* union case */ +#fsdocs-content span.u { + color: var(--fsdocs-code-unioncase-color); +} +/* enumeration */ +#fsdocs-content span.e { + color: var(--fsdocs-code-enumeration-color); +} +/* keywords */ +#fsdocs-content span.k { + color: var(--fsdocs-code-keywords-color); + /* font-weight: bold; */ +} +/* comment */ +#fsdocs-content span.c { + color: var(--fsdocs-code-comment-color); + font-weight: 400; + font-style: italic; +} +/* operators */ +#fsdocs-content span.o { + color: var(--fsdocs-code-operators-color); +} +/* numbers */ +#fsdocs-content span.n { + color: var(--fsdocs-code-numbers-color); +} +/* line number */ +#fsdocs-content span.l { + color: var(--fsdocs-code-linenumbers-color); +} +/* mutable var or ref cell */ +#fsdocs-content span.v { + color: var(--fsdocs-code-mutable-color); + font-weight: bold; +} +/* inactive code */ +#fsdocs-content span.inactive { + color: var(--fsdocs-code-inactive-color); +} +/* preprocessor */ +#fsdocs-content span.prep { + color: var(--fsdocs-code-preprocessor-color); +} +/* fsi output */ +#fsdocs-content span.fsi { + color: var(--fsdocs-code-fsioutput-color); +} + +/* tool tip */ +div.fsdocs-tip { + background: #475b5f; + border-radius: 4px; + font: 0.85rem 'Roboto Mono', monospace; + padding: 6px 8px 6px 8px; + display: none; + color: var(--fsdocs-code-tooltip-color); + pointer-events: none; +} + + div.fsdocs-tip code { + color: var(--fsdocs-code-tooltip-color); + font: 0.85rem 'Roboto Mono', monospace; + } \ No newline at end of file diff --git a/temp/watch-docs/content/fsdocs-search.js b/temp/watch-docs/content/fsdocs-search.js new file mode 100644 index 00000000..3d543cf3 --- /dev/null +++ b/temp/watch-docs/content/fsdocs-search.js @@ -0,0 +1,84 @@ +var lunrIndex, pagesIndex; + +function endsWith(str, suffix) { + return str.indexOf(suffix, str.length - suffix.length) !== -1; +} + +// Initialize lunrjs using our generated index file +function initLunr() { + if (!endsWith(fsdocs_search_baseurl,"/")){ + fsdocs_search_baseurl = fsdocs_search_baseurl+'/' + }; + + // First retrieve the index file + $.getJSON(fsdocs_search_baseurl +"index.json") + .done(function(index) { + pagesIndex = index; + // Set up lunrjs by declaring the fields we use + // Also provide their boost level for the ranking + lunrIndex = lunr(function() { + this.ref("uri"); + this.field('title', { + boost: 15 + }); + this.field('tags', { + boost: 10 + }); + this.field("content", { + boost: 5 + }); + + this.pipeline.remove(lunr.stemmer); + this.searchPipeline.remove(lunr.stemmer); + + // Feed lunr with each file and let lunr actually index them + pagesIndex.forEach(function(page) { + this.add(page); + }, this); + }) + }) + .fail(function(jqxhr, textStatus, error) { + var err = textStatus + ", " + error; + console.error("Error getting Hugo index file:", err); + }); +} + +/** + * Trigger a search in lunr and transform the result + * + * @param {String} query + * @return {Array} results + */ +function search(queryTerm) { + // Find the item in our index corresponding to the lunr one to have more info + return lunrIndex.search(queryTerm+"^100"+" "+queryTerm+"*^10"+" "+"*"+queryTerm+"^10"+" "+queryTerm+"~2^1").map(function(result) { + return pagesIndex.filter(function(page) { + return page.uri === result.ref; + })[0]; + }); +} + +// Let's get started +initLunr(); + +$( document ).ready(function() { + var searchList = new autoComplete({ + /* selector for the search box element */ + minChars: 1, + selector: $("#search-by").get(0), + /* source is the callback to perform the search */ + source: function(term, response) { + response(search(term)); + }, + /* renderItem displays individual search results */ + renderItem: function(item, search) { + search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); + return '
    ' + item.title.replace(re, "$1") + '
    '; + }, + /* onSelect callback fires when a search suggestion is chosen */ + onSelect: function(e, term, item) { + location.href = item.getAttribute('data-uri'); + } + }); +}); diff --git a/temp/watch-docs/content/fsdocs-tips.js b/temp/watch-docs/content/fsdocs-tips.js new file mode 100644 index 00000000..bcd04cb1 --- /dev/null +++ b/temp/watch-docs/content/fsdocs-tips.js @@ -0,0 +1,54 @@ +var currentTip = null; +var currentTipElement = null; + +function hideTip(evt, name, unique) { + var el = document.getElementById(name); + el.style.display = "none"; + currentTip = null; +} + +function findPos(obj) { + // no idea why, but it behaves differently in webbrowser component + if (window.location.search == "?inapp") + return [obj.offsetLeft + 10, obj.offsetTop + 30]; + + var curleft = 0; + var curtop = obj.offsetHeight; + while (obj) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + return [curleft, curtop]; +} + +function hideUsingEsc(e) { + if (!e) { e = event; } + hideTip(e, currentTipElement, currentTip); +} + +function showTip(evt, name, unique, owner) { + document.onkeydown = hideUsingEsc; + if (currentTip == unique) return; + currentTip = unique; + currentTipElement = name; + + var pos = findPos(owner ? owner : (evt.srcElement ? evt.srcElement : evt.target)); + var posx = pos[0]; + var posy = pos[1]; + + var el = document.getElementById(name); + var parent = (document.documentElement == null) ? document.body : document.documentElement; + el.style.position = "absolute"; + el.style.left = posx + "px"; + el.style.top = posy + "px"; + el.style.display = "block"; +} +function Clipboard_CopyTo(value) { + var tempInput = document.createElement("input"); + tempInput.value = value; + document.body.appendChild(tempInput); + tempInput.select(); + document.execCommand("copy"); + document.body.removeChild(tempInput); +} \ No newline at end of file diff --git a/temp/watch-docs/content/img/copy-md-hover.png b/temp/watch-docs/content/img/copy-md-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..b14e94129a15d575b23e6298d364c4272593c1a8 GIT binary patch literal 2886 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 literal 0 HcmV?d00001 diff --git a/temp/watch-docs/content/img/copy-md.png b/temp/watch-docs/content/img/copy-md.png new file mode 100644 index 0000000000000000000000000000000000000000..72de73815f7f422e1f359a1e8c10b5ea5680cbf1 GIT binary patch literal 3351 zcmb_edoo!c$iPrl~c*hp!5a{YEy*|xH4s3q9w!~|{f zfRaE%m45U4$n*U?t|50AX7Z|CyTn(v^UB~!rO^w@b?7)}q?zi6FZgC&MTOgSSQ?&nr+cvig#)-Q@`P)bU5JG`_R_PY0-`AtRcekyUiM^vZ9bi z@`5H58+_Hg!@r)g?~y;Wlz;WmtMT%lt68VIeAU##;omO(viqZ&RsS#QA>_t`raJES zU%REghK;Nz)~kw%e})Wwok<;0IYz*H3LW-~tSnTxsnwY`$K@^#3k+XZoI}mFh{5EV92!rqNNFbRVS#qoC#mJNYr`5?Bgn~x(jC7(hl&IU8TBgu#JI1&9EO)K#lnzuU!e40mI zMj$Xz`Wx!zkd;I3H-sda6CxlQOuIcSfw4dPK(Cn+2ZVadC*TO6Z+sI2nXR1^c(Qrt z*)6hD#Y{~o#U^Lg!X_{gy!<}HYEePa8O?g++Gv%$)338ebMSBLTegrrW8emC2iV*U zg=`N)>c>ir*O>;wP;Wbi|V_;;Wr0Pr7~hXLRpV2Vi=fm5R zsQ%M2o3nB9x<}GATO6EB4*JfHQw0Xsts-NFSAo%^<(vI-}p6agK8XcoLBaC-h?8+z zYTc{9(tQs^)@HO5Rtr3MIc?)wRKE+-O1NVo!NEp7y}jRcATm8ugA?b$n|ak>)`gCn zxAJ|U67I_BD$0ce?|FukIzL&NSC{ogzhfY5VdBzzkE+Jp9V1bIb0wKCSfJME1PJ4~ z9cN!Oej=P#o-nplaBCy|J)2FTP&Cr$iU|*js74ON52a~zR}mL(xLbQFl`9Xh*YC+} zC8IqBth@0{OjFZ!7|Z+m2BO)Y#bhBAN4>Hy z`oZvC&#L|=st$eHRcgzPLMCGnUv$R0YZuPV>Y_&hjW-^kX9_xf#$`4dOuHV2AM;4$ z+(|31o+=aIo)#1oobC0sa8~7b?YQ@x&}D%Dgjs&j=ZB9mVyI@?dMT^5?2;&cWa)hCrUfA>jK|66zgVVww0AucUiP_yKiq=Q{EGfqu0# z($Qy6mP^s3{mQ^AOB1I*^?WF(Z=mUD`o>zVKVh*sfbne!%Ix!^(P znc-Cz{Bhec4_=vEt+i@KTkb*csC{gNAAWUy!&XE@T>uPQp__aP z`=TWIo?o8wf$3=nrl86eyLrXD{qN8M;WZWhpht1u_{RE&y}a{rFOy>m(Y#$b zOlKTrlUAZd&(a~7*k-W3F(RhHrvcB4YR(MmzqlyNi!#iRWN~vA0qir((ueAXac4N0Kbp^j_Hni2C^vox6E0$;l-* zvMIkTrP0U! z{^h#h{S+>jyWBTm)tkXPr^Co12`&FFMYMyI@n}0nMq{cE#Spq9uu%Ze?)XX8gK_^WBn>HSHuyhji62 zA>v(Z%LUsoJyHQpskh~&N!7x$AyaDE*6~mIfPPDu%9XUb!EaxPQE~Om&Ajy&y2%o8 zIx)JUJo0~fuT^=EOW+TaFGIDZ8O2xndAh*$qN7x%0!Y|&y?od0p_1oF+ofu zND!Zpfni(GWP~d-L_jlG-9heF=xiwf6QLYd290zRTvj2I*}GtwD>kl26|Oqg9LM2f zAPih`iK*d#B87lF+&4g^hD#&0!`kyF4{kpPs!c1h7a*^RP-BjM!&^_7Oq5d;^?A>3 zpV_4-?`4n8KpsQZH-cpjNn^Xv%$>1;7d5;?f~*&dmaj?zlxq%L*kk?d`(Muf&F}w% zUP-n@DXH^g4=PFlprOFJxSFIN2tGmw@c`(;f#gXb3<5x`NxF)?5sTdm&cQH`VUOiR zBw?t|ogf~D`7g|MCy0For3CsNeIpK+A)^m~SQ+wE0YCzX2ovi4353%eIGKPkej`CY zhcB$U#@c#Ebu literal 0 HcmV?d00001 diff --git a/temp/watch-docs/content/img/copy-xml-hover.png b/temp/watch-docs/content/img/copy-xml-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..60fea167af78e3854feeae0f86d5b0291c473237 GIT binary patch literal 3192 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 ByA%Kb literal 0 HcmV?d00001 diff --git a/temp/watch-docs/content/img/copy-xml.png b/temp/watch-docs/content/img/copy-xml.png new file mode 100644 index 0000000000000000000000000000000000000000..e5606b907bc27d4e4df733971aa952a118f89a09 GIT binary patch literal 3486 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 literal 0 HcmV?d00001 diff --git a/temp/watch-docs/content/navbar-fixed-left.css b/temp/watch-docs/content/navbar-fixed-left.css new file mode 100644 index 00000000..28e4c574 --- /dev/null +++ b/temp/watch-docs/content/navbar-fixed-left.css @@ -0,0 +1,91 @@ +/* CSS for Bootstrap 5 Fixed Left Sidebar Navigation */ + + + +@media (min-width: 992px){ + + body { + padding-left: 300px; + padding-right: 60px; + } + + #fsdocs-logo { + width:140px; + height:140px; + margin:10px 0px 0px 0px; + border-style:none; + } + + + nav.navbar { + position: fixed; + left: 0; + width: 300px; + bottom: 0; + top: 0; + overflow-y: auto; + overflow-x: hidden; + display: block; + border-right: 1px solid #cecece; + } + + nav.navbar>.container { + flex-direction: column; + padding: 0; + } + + nav.navbar .navbar-nav { + flex-direction: column; + } + nav.navbar .navbar-collapse { + width: 100%; + } + + nav.navbar .navbar-nav { + width: 100%; + } + + nav.navbar .navbar-nav .dropdown-menu { + position: static; + display: block; + } + + nav.navbar .dropdown { + margin-bottom: 5px; + font-size: 14px; + } + + nav.navbar .dropdown-item { + white-space: normal; + font-size: 14px; + vertical-align: middle; + } + + nav.navbar .dropdown-item img { + margin-right: 5px; + } + + nav.navbar .dropdown-toggle { + cursor: default; + } + + nav.navbar .dropdown-menu { + border-radius: 0; + border-left: 0; + border-right: 0; + } + + nav.navbar .dropdown-toggle:not(#bd-theme)::after { + display: none; + } + + .dropdown-menu[data-bs-popper] { + top: auto; + left: auto; + margin-top: auto; + } + + .nav-link:focus, .nav-link:hover { + color: auto; + } +} \ No newline at end of file diff --git a/temp/watch-docs/content/navbar-fixed-right.css b/temp/watch-docs/content/navbar-fixed-right.css new file mode 100644 index 00000000..ad6cef83 --- /dev/null +++ b/temp/watch-docs/content/navbar-fixed-right.css @@ -0,0 +1,78 @@ +body { + padding-top: 90px; +} + +@media (min-width: 768px) { + body { + padding-top: 0; + } +} + +@media (min-width: 768px) { + body { + margin-right: 252px; + } +} + +.navbar { + overflow-y: auto; + overflow-x: hidden; + box-shadow: none; +} +.navbar.fixed-right { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1030; +} +.navbar-nav .nav-link { + padding-top: 0.3rem; + padding-bottom: 0.3rem; +} +@media (min-width: 768px) { + .navbar.fixed-right { + bottom: 0; + width: 252px; + flex-flow: column nowrap; + align-items: flex-start; + } + + .navbar.fixed-right .navbar-collapse { + flex-grow: 0; + flex-direction: column; + width: 100%; + } + + .navbar.fixed-right .navbar-collapse .navbar-nav { + flex-direction: column; + width: 100%; + } + + .navbar.fixed-right .navbar-collapse .navbar-nav .nav-item { + width: 100%; + } + + .navbar.fixed-right .navbar-collapse .navbar-nav .nav-item .dropdown-menu { + top: 0; + } +} + +@media (min-width: 768px) { + .navbar.fixed-right { + left: auto; + } + + .navbar.fixed-right .navbar-nav .nav-item .dropdown-toggle:after { + border-top: 0.3em solid transparent; + border-left: none; + border-bottom: 0.3em solid transparent; + border-right: 0.3em solid; + vertical-align: baseline; + } + + .navbar.fixed-right .navbar-nav .nav-item .dropdown-menu { + left: auto; + right: 100%; + } +} diff --git a/temp/watch-docs/content/theme-toggle.js b/temp/watch-docs/content/theme-toggle.js new file mode 100644 index 00000000..c208c082 --- /dev/null +++ b/temp/watch-docs/content/theme-toggle.js @@ -0,0 +1,68 @@ +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ + +(() => { + 'use strict' + + const storedTheme = localStorage.getItem('theme') + + const getPreferredTheme = () => { + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = function (theme) { + const fsdocsTheme = document.getElementById("fsdocs-theme") + const re = /fsdocs-.*.css/ + if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute('data-bs-theme', 'dark') + fsdocsTheme.setAttribute("href", fsdocsTheme.getAttribute("href").replace(re,"fsdocs-dark.css")) + + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + + fsdocsTheme.setAttribute("href", fsdocsTheme.getAttribute("href").replace(re,`fsdocs-${theme}.css`)) + } + } + + setTheme(getPreferredTheme()) + + const showActiveTheme = theme => { + const activeThemeIcon = document.getElementById('theme-icon-active') + const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) + const svgOfActiveBtn = btnToActive.querySelector('i').getAttribute('class') + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + element.classList.remove('active') + }) + + btnToActive.classList.add('active') + activeThemeIcon.setAttribute('class', svgOfActiveBtn) + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + if (storedTheme !== 'light' || storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document.querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + localStorage.setItem('theme', theme) + setTheme(theme) + showActiveTheme(theme) + }) + }) + }) +})() \ No newline at end of file diff --git "a/temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" "b/temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" new file mode 100644 index 00000000..c208c082 --- /dev/null +++ "b/temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" @@ -0,0 +1,68 @@ +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ + +(() => { + 'use strict' + + const storedTheme = localStorage.getItem('theme') + + const getPreferredTheme = () => { + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = function (theme) { + const fsdocsTheme = document.getElementById("fsdocs-theme") + const re = /fsdocs-.*.css/ + if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute('data-bs-theme', 'dark') + fsdocsTheme.setAttribute("href", fsdocsTheme.getAttribute("href").replace(re,"fsdocs-dark.css")) + + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + + fsdocsTheme.setAttribute("href", fsdocsTheme.getAttribute("href").replace(re,`fsdocs-${theme}.css`)) + } + } + + setTheme(getPreferredTheme()) + + const showActiveTheme = theme => { + const activeThemeIcon = document.getElementById('theme-icon-active') + const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) + const svgOfActiveBtn = btnToActive.querySelector('i').getAttribute('class') + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + element.classList.remove('active') + }) + + btnToActive.classList.add('active') + activeThemeIcon.setAttribute('class', svgOfActiveBtn) + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + if (storedTheme !== 'light' || storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document.querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + localStorage.setItem('theme', theme) + setTheme(theme) + showActiveTheme(theme) + }) + }) + }) +})() \ No newline at end of file diff --git a/temp/watch-docs/index.html b/temp/watch-docs/index.html new file mode 100644 index 00000000..85c1e509 --- /dev/null +++ b/temp/watch-docs/index.html @@ -0,0 +1,233 @@ + + + + + + LeonidLodygin.ImageProcessing + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    LeonidLodygin.ImageProcessing

    +
    +

    What is ImageProcessing?

    +

    A library for image processing using GPGPU and agents for parallel computing.

    +
    +
    +
    +
    +
    +
    Tutorials
    +

    Takes you by the hand through a series of steps to create your first library.

    +
    + +
    +
    +
    +
    +
    +
    How-To Guides
    +

    Guides you through the steps involved in addressing key problems and use-cases.

    +
    + +
    +
    +
    +
    +
    +
    Explanations
    +

    Discusses key topics and concepts at a fairly high level and provide useful background information and explanation..

    +
    + +
    +
    +
    +
    +
    +
    Reference
    +

    Contain technical references.

    +
    + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/index.json b/temp/watch-docs/index.json new file mode 100644 index 00000000..a1389e86 --- /dev/null +++ b/temp/watch-docs/index.json @@ -0,0 +1 @@ +[{"uri":"http://localhost:8901/reference/imageprocessing.html","title":"ImageProcessing","content":"Agents \nArguments \nCpuProcessing \nGpuKernels \nGpuProcessing \nImageArrayProcessing \nKernels \nMain \nMyImage \nTypes"},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html","title":"Agents","content":"Agents \n\n Module with implementation of agents for image processing\n \nAgents.listAllFiles \nlistAllFiles \nAgents.outFile \noutFile \nAgents.imgSaver \nimgSaver \nAgents.imgProcessor \nimgProcessor \nAgents.msgLogger \nmsgLogger \nAgents.superAgent \nsuperAgent \nAgents.superImageProcessing \nsuperImageProcessing"},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#listAllFiles","title":"Agents.listAllFiles","content":"Agents.listAllFiles \nlistAllFiles \n\n List of all files in directory\n "},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#outFile","title":"Agents.outFile","content":"Agents.outFile \noutFile \n\n Creation of path to save the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#imgSaver","title":"Agents.imgSaver","content":"Agents.imgSaver \nimgSaver \n\n Agent for saving images\n "},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#imgProcessor","title":"Agents.imgProcessor","content":"Agents.imgProcessor \nimgProcessor \n\n Agent for image processing\n "},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#msgLogger","title":"Agents.msgLogger","content":"Agents.msgLogger \nmsgLogger \n\n Agent for logging\n "},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#superAgent","title":"Agents.superAgent","content":"Agents.superAgent \nsuperAgent \n\n Agent with the ability to process and save the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-agents.html#superImageProcessing","title":"Agents.superImageProcessing","content":"Agents.superImageProcessing \nsuperImageProcessing \n\n Image processing using superAgents\n "},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html","title":"Arguments","content":"Arguments \n\n Module with implementation of work via console commands\n \nArguments.CliArguments \nCliArguments \nArguments.first \nfirst \nArguments.second \nsecond \nArguments.third \nthird \nArguments.fourth \nfourth \nArguments.modificationParser \nmodificationParser \nArguments.modificationGpuParser \nmodificationGpuParser \nArguments.deviceParser \ndeviceParser"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#first","title":"Arguments.first","content":"Arguments.first \nfirst \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#second","title":"Arguments.second","content":"Arguments.second \nsecond \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#third","title":"Arguments.third","content":"Arguments.third \nthird \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#fourth","title":"Arguments.fourth","content":"Arguments.fourth \nfourth \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#modificationParser","title":"Arguments.modificationParser","content":"Arguments.modificationParser \nmodificationParser \n\n Parsing of CPU modification\n "},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#modificationGpuParser","title":"Arguments.modificationGpuParser","content":"Arguments.modificationGpuParser \nmodificationGpuParser \n\n Parsing of GPU modification\n "},{"uri":"http://localhost:8901/reference/imageprocessing-arguments.html#deviceParser","title":"Arguments.deviceParser","content":"Arguments.deviceParser \ndeviceParser \n\n Parsing of device\n "},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html","title":"CliArguments","content":"CliArguments \n \nCliArguments.InputPath \nInputPath \nCliArguments.OutputPath \nOutputPath \nCliArguments.Agents \nAgents \nCliArguments.SuperAgents \nSuperAgents \nCliArguments.Modifications \nModifications \nCliArguments.GpGpu \nGpGpu"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html#InputPath","title":"CliArguments.InputPath","content":"CliArguments.InputPath \nInputPath \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html#OutputPath","title":"CliArguments.OutputPath","content":"CliArguments.OutputPath \nOutputPath \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html#Agents","title":"CliArguments.Agents","content":"CliArguments.Agents \nAgents \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html#SuperAgents","title":"CliArguments.SuperAgents","content":"CliArguments.SuperAgents \nSuperAgents \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html#Modifications","title":"CliArguments.Modifications","content":"CliArguments.Modifications \nModifications \n"},{"uri":"http://localhost:8901/reference/imageprocessing-arguments-cliarguments.html#GpGpu","title":"CliArguments.GpGpu","content":"CliArguments.GpGpu \nGpGpu \n"},{"uri":"http://localhost:8901/reference/imageprocessing-cpuprocessing.html","title":"CpuProcessing","content":"CpuProcessing \n\n Module with functions for image processing on the CPU\n \nCpuProcessing.applyFilter \napplyFilter \nCpuProcessing.rotate \nrotate \nCpuProcessing.mirror \nmirror \nCpuProcessing.fishEye \nfishEye"},{"uri":"http://localhost:8901/reference/imageprocessing-cpuprocessing.html#applyFilter","title":"CpuProcessing.applyFilter","content":"CpuProcessing.applyFilter \napplyFilter \n\n Filter application\n "},{"uri":"http://localhost:8901/reference/imageprocessing-cpuprocessing.html#rotate","title":"CpuProcessing.rotate","content":"CpuProcessing.rotate \nrotate \n\n Rotate of image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-cpuprocessing.html#mirror","title":"CpuProcessing.mirror","content":"CpuProcessing.mirror \nmirror \n\n Image Reflection\n "},{"uri":"http://localhost:8901/reference/imageprocessing-cpuprocessing.html#fishEye","title":"CpuProcessing.fishEye","content":"CpuProcessing.fishEye \nfishEye \n\n Applying \u0022FishEye\u0022 to an image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html","title":"GpuKernels","content":"GpuKernels \n\n Module with kernels for image processing on the GPU\n \nGpuKernels.applyFilterKernel \napplyFilterKernel \nGpuKernels.applyFilterProcessor \napplyFilterProcessor \nGpuKernels.rotateKernel \nrotateKernel \nGpuKernels.rotateKernelProcessor \nrotateKernelProcessor \nGpuKernels.mirrorKernel \nmirrorKernel \nGpuKernels.mirrorKernelProcessor \nmirrorKernelProcessor \nGpuKernels.fishEyeKernel \nfishEyeKernel \nGpuKernels.fishEyeKernelProcessor \nfishEyeKernelProcessor"},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#applyFilterKernel","title":"GpuKernels.applyFilterKernel","content":"GpuKernels.applyFilterKernel \napplyFilterKernel \n\n Compilation of kernel to apply filter to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#applyFilterProcessor","title":"GpuKernels.applyFilterProcessor","content":"GpuKernels.applyFilterProcessor \napplyFilterProcessor \n\n Asynchronous application of the filter kernel to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#rotateKernel","title":"GpuKernels.rotateKernel","content":"GpuKernels.rotateKernel \nrotateKernel \n\n Compilation of kernel to rotate the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#rotateKernelProcessor","title":"GpuKernels.rotateKernelProcessor","content":"GpuKernels.rotateKernelProcessor \nrotateKernelProcessor \n\n Asynchronous application of the rotation kernel to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#mirrorKernel","title":"GpuKernels.mirrorKernel","content":"GpuKernels.mirrorKernel \nmirrorKernel \n\n Compilation of kernel to reflect the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#mirrorKernelProcessor","title":"GpuKernels.mirrorKernelProcessor","content":"GpuKernels.mirrorKernelProcessor \nmirrorKernelProcessor \n\n Asynchronous application of the reflection kernel to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#fishEyeKernel","title":"GpuKernels.fishEyeKernel","content":"GpuKernels.fishEyeKernel \nfishEyeKernel \n\n Compilation of kernel to apply FishEye to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpukernels.html#fishEyeKernelProcessor","title":"GpuKernels.fishEyeKernelProcessor","content":"GpuKernels.fishEyeKernelProcessor \nfishEyeKernelProcessor \n\n Asynchronous application of the fisheye kernel to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpuprocessing.html","title":"GpuProcessing","content":"GpuProcessing \n\n Module with functions for image processing on the GPU\n \nGpuProcessing.applyFilter \napplyFilter \nGpuProcessing.rotate \nrotate \nGpuProcessing.mirror \nmirror \nGpuProcessing.fishEye \nfishEye"},{"uri":"http://localhost:8901/reference/imageprocessing-gpuprocessing.html#applyFilter","title":"GpuProcessing.applyFilter","content":"GpuProcessing.applyFilter \napplyFilter \n\n Filter application\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpuprocessing.html#rotate","title":"GpuProcessing.rotate","content":"GpuProcessing.rotate \nrotate \n\n Rotate of image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpuprocessing.html#mirror","title":"GpuProcessing.mirror","content":"GpuProcessing.mirror \nmirror \n\n Reflection of image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-gpuprocessing.html#fishEye","title":"GpuProcessing.fishEye","content":"GpuProcessing.fishEye \nfishEye \n\n Applying fisheye filter to the image\n "},{"uri":"http://localhost:8901/reference/imageprocessing-imagearrayprocessing.html","title":"ImageArrayProcessing","content":"ImageArrayProcessing \n\n Module with implementation of processing array of images\n \nImageArrayProcessing.extensions \nextensions \nImageArrayProcessing.listAllFiles \nlistAllFiles \nImageArrayProcessing.arrayOfImagesProcessing \narrayOfImagesProcessing"},{"uri":"http://localhost:8901/reference/imageprocessing-imagearrayprocessing.html#extensions","title":"ImageArrayProcessing.extensions","content":"ImageArrayProcessing.extensions \nextensions \n"},{"uri":"http://localhost:8901/reference/imageprocessing-imagearrayprocessing.html#listAllFiles","title":"ImageArrayProcessing.listAllFiles","content":"ImageArrayProcessing.listAllFiles \nlistAllFiles \n\n List of all files in directory with correct extensions\n "},{"uri":"http://localhost:8901/reference/imageprocessing-imagearrayprocessing.html#arrayOfImagesProcessing","title":"ImageArrayProcessing.arrayOfImagesProcessing","content":"ImageArrayProcessing.arrayOfImagesProcessing \narrayOfImagesProcessing \n\n Processing array of images\n "},{"uri":"http://localhost:8901/reference/imageprocessing-kernels.html","title":"Kernels","content":"Kernels \n\n Module with kernels for image processing\n \nKernels.gaussianBlurKernel \ngaussianBlurKernel \nKernels.edgesKernel \nedgesKernel \nKernels.gaussianBlur7x7Kernel \ngaussianBlur7x7Kernel \nKernels.sharpenKernel \nsharpenKernel \nKernels.embossKernel \nembossKernel"},{"uri":"http://localhost:8901/reference/imageprocessing-kernels.html#gaussianBlurKernel","title":"Kernels.gaussianBlurKernel","content":"Kernels.gaussianBlurKernel \ngaussianBlurKernel \n"},{"uri":"http://localhost:8901/reference/imageprocessing-kernels.html#edgesKernel","title":"Kernels.edgesKernel","content":"Kernels.edgesKernel \nedgesKernel \n"},{"uri":"http://localhost:8901/reference/imageprocessing-kernels.html#gaussianBlur7x7Kernel","title":"Kernels.gaussianBlur7x7Kernel","content":"Kernels.gaussianBlur7x7Kernel \ngaussianBlur7x7Kernel \n"},{"uri":"http://localhost:8901/reference/imageprocessing-kernels.html#sharpenKernel","title":"Kernels.sharpenKernel","content":"Kernels.sharpenKernel \nsharpenKernel \n"},{"uri":"http://localhost:8901/reference/imageprocessing-kernels.html#embossKernel","title":"Kernels.embossKernel","content":"Kernels.embossKernel \nembossKernel \n"},{"uri":"http://localhost:8901/reference/imageprocessing-main.html","title":"Main","content":"Main \n \nMain.main \nmain"},{"uri":"http://localhost:8901/reference/imageprocessing-main.html#main","title":"Main.main","content":"Main.main \nmain \n"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage.html","title":"MyImage","content":"MyImage \n \nMyImage.MyImage \nMyImage \nMyImage.loadAsImage \nloadAsImage \nMyImage.saveImage \nsaveImage"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage.html#loadAsImage","title":"MyImage.loadAsImage","content":"MyImage.loadAsImage \nloadAsImage \n\n Load image as MyImage type\n "},{"uri":"http://localhost:8901/reference/imageprocessing-myimage.html#saveImage","title":"MyImage.saveImage","content":"MyImage.saveImage \nsaveImage \n\n Save MyImage in a specific directory\n "},{"uri":"http://localhost:8901/reference/imageprocessing-myimage-myimage.html","title":"MyImage","content":"MyImage \n\n Type to represent images\n \nMyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \nMyImage.Data \nData \nMyImage.Width \nWidth \nMyImage.Height \nHeight \nMyImage.Name \nName"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage-myimage.html#\u0060\u0060.ctor\u0060\u0060","title":"MyImage.\u0060\u0060.ctor\u0060\u0060","content":"MyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \n"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage-myimage.html#Data","title":"MyImage.Data","content":"MyImage.Data \nData \n"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage-myimage.html#Width","title":"MyImage.Width","content":"MyImage.Width \nWidth \n"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage-myimage.html#Height","title":"MyImage.Height","content":"MyImage.Height \nHeight \n"},{"uri":"http://localhost:8901/reference/imageprocessing-myimage-myimage.html#Name","title":"MyImage.Name","content":"MyImage.Name \nName \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types.html","title":"Types","content":"Types \n\n Module with necessary algebraic types\n \nTypes.AgentStatus \nAgentStatus \nTypes.Devices \nDevices \nTypes.MirrorDirection \nMirrorDirection \nTypes.Modifications \nModifications \nTypes.Msg \nMsg \nTypes.Side \nSide"},{"uri":"http://localhost:8901/reference/imageprocessing-types-agentstatus.html","title":"AgentStatus","content":"AgentStatus \n\n Type for determining the status of an agent\n \nAgentStatus.On \nOn \nAgentStatus.Off \nOff"},{"uri":"http://localhost:8901/reference/imageprocessing-types-agentstatus.html#On","title":"AgentStatus.On","content":"AgentStatus.On \nOn \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-agentstatus.html#Off","title":"AgentStatus.Off","content":"AgentStatus.Off \nOff \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-devices.html","title":"Devices","content":"Devices \n\n Type for defining the executor of transformations\n \nDevices.AnyGpu \nAnyGpu \nDevices.Nvidia \nNvidia \nDevices.Amd \nAmd \nDevices.Intel \nIntel"},{"uri":"http://localhost:8901/reference/imageprocessing-types-devices.html#AnyGpu","title":"Devices.AnyGpu","content":"Devices.AnyGpu \nAnyGpu \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-devices.html#Nvidia","title":"Devices.Nvidia","content":"Devices.Nvidia \nNvidia \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-devices.html#Amd","title":"Devices.Amd","content":"Devices.Amd \nAmd \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-devices.html#Intel","title":"Devices.Intel","content":"Devices.Intel \nIntel \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-mirrordirection.html","title":"MirrorDirection","content":"MirrorDirection \n\n Type for determining the direction of image reflection\n \nMirrorDirection.Vertical \nVertical \nMirrorDirection.Horizontal \nHorizontal"},{"uri":"http://localhost:8901/reference/imageprocessing-types-mirrordirection.html#Vertical","title":"MirrorDirection.Vertical","content":"MirrorDirection.Vertical \nVertical \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-mirrordirection.html#Horizontal","title":"MirrorDirection.Horizontal","content":"MirrorDirection.Horizontal \nHorizontal \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html","title":"Modifications","content":"Modifications \n\n Type for determining the applied image transformation\n \nModifications.Gauss5x5 \nGauss5x5 \nModifications.Gauss7x7 \nGauss7x7 \nModifications.Edges \nEdges \nModifications.Sharpen \nSharpen \nModifications.Emboss \nEmboss \nModifications.ClockwiseRotation \nClockwiseRotation \nModifications.CounterClockwiseRotation \nCounterClockwiseRotation \nModifications.MirrorVertical \nMirrorVertical \nModifications.MirrorHorizontal \nMirrorHorizontal \nModifications.FishEye \nFishEye"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#Gauss5x5","title":"Modifications.Gauss5x5","content":"Modifications.Gauss5x5 \nGauss5x5 \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#Gauss7x7","title":"Modifications.Gauss7x7","content":"Modifications.Gauss7x7 \nGauss7x7 \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#Edges","title":"Modifications.Edges","content":"Modifications.Edges \nEdges \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#Sharpen","title":"Modifications.Sharpen","content":"Modifications.Sharpen \nSharpen \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#Emboss","title":"Modifications.Emboss","content":"Modifications.Emboss \nEmboss \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#ClockwiseRotation","title":"Modifications.ClockwiseRotation","content":"Modifications.ClockwiseRotation \nClockwiseRotation \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#CounterClockwiseRotation","title":"Modifications.CounterClockwiseRotation","content":"Modifications.CounterClockwiseRotation \nCounterClockwiseRotation \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#MirrorVertical","title":"Modifications.MirrorVertical","content":"Modifications.MirrorVertical \nMirrorVertical \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#MirrorHorizontal","title":"Modifications.MirrorHorizontal","content":"Modifications.MirrorHorizontal \nMirrorHorizontal \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-modifications.html#FishEye","title":"Modifications.FishEye","content":"Modifications.FishEye \nFishEye \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-msg.html","title":"Msg","content":"Msg \n\n Type to define a message to be forwarded between agents\n \nMsg.Img \nImg \nMsg.Path \nPath \nMsg.EOS \nEOS \nMsg.Message \nMessage"},{"uri":"http://localhost:8901/reference/imageprocessing-types-msg.html#Img","title":"Msg.Img","content":"Msg.Img \nImg \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-msg.html#Path","title":"Msg.Path","content":"Msg.Path \nPath \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-msg.html#EOS","title":"Msg.EOS","content":"Msg.EOS \nEOS \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-msg.html#Message","title":"Msg.Message","content":"Msg.Message \nMessage \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-side.html","title":"Side","content":"Side \n\n Type for determining the rotation side of the image\n \nSide.Right \nRight \nSide.Left \nLeft"},{"uri":"http://localhost:8901/reference/imageprocessing-types-side.html#Right","title":"Side.Right","content":"Side.Right \nRight \n"},{"uri":"http://localhost:8901/reference/imageprocessing-types-side.html#Left","title":"Side.Left","content":"Side.Left \nLeft \n"},{"uri":"http://localhost:8901/index.html","title":"LeonidLodygin.ImageProcessing\r\n","content":"# LeonidLodygin.ImageProcessing\r\n\r\n---\r\n\r\n## What is ImageProcessing?\r\n\r\nA library for image processing using GPGPU and agents for parallel computing. \r\n\r\n---\r\n\r\n\u003Cdiv class=\u0022row row-cols-1 row-cols-md-2\u0022\u003E\r\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003ETutorials\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003ETakes you by the hand through a series of steps to create your first library. \u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}Tutorials/0-toc.html\u0022 class=\u0022btn btn-primary\u0022\u003EGet started\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003EHow-To Guides\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003EGuides you through the steps involved in addressing key problems and use-cases. \u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}/How_Tos/0-toc.html\u0022 class=\u0022btn btn-primary\u0022\u003ELearn Usecases\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022col mb-4 mb-md-0\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003EExplanations\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003EDiscusses key topics and concepts at a fairly high level and provide useful background information and explanation..\u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}Explanations/0-toc.html\u0022 class=\u0022btn btn-primary\u0022\u003EDive Deeper\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022col\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003EReference\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003EContain technical references.\u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}/Reference/0-toc.html\u0022 class=\u0022btn btn-primary\u0022\u003ERead References\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n\u003C/div\u003E"}] \ No newline at end of file From 7a974bc4e63aaae27268fa6eee6c5390e4ead602 Mon Sep 17 00:00:00 2001 From: LeonidLodygin Date: Tue, 19 Dec 2023 18:26:07 +0300 Subject: [PATCH 12/27] Build docs --- .fsdocs/cache | 6 +- docs/Dockerfile | 29 + docs/Explanations/Structure.html | 183 +++ docs/How_Tos/Code.html | 222 +++ docs/NuGet.config | 14 + docs/Tutorials/Tutorial.html | 224 +++ docs/_menu-item_template.html | 1 + docs/_menu_template.html | 9 + docs/content/fsdocs-custom.css | 15 + docs/content/fsdocs-dark.css | 50 + docs/content/fsdocs-default.css | 613 ++++++++ docs/content/fsdocs-light.css | 43 + docs/content/fsdocs-main.css | 604 ++++++++ docs/content/fsdocs-search.js | 84 + docs/content/fsdocs-tips.js | 54 + docs/content/img/copy-md-hover.png | Bin 0 -> 2886 bytes docs/content/img/copy-md.png | Bin 0 -> 3351 bytes docs/content/img/copy-xml-hover.png | Bin 0 -> 3192 bytes docs/content/img/copy-xml.png | Bin 0 -> 3486 bytes docs/content/img/github-hover.png | Bin 0 -> 7695 bytes docs/content/img/github.png | Bin 0 -> 7642 bytes docs/content/navbar-fixed-left.css | 91 ++ docs/content/navbar-fixed-right.css | 78 + .../content/theme-toggle.js | 0 docs/coverage/ImageProcessing_Agents.html | 274 ---- docs/coverage/ImageProcessing_Arguments.html | 186 --- .../ImageProcessing_CpuProcessing.html | 210 --- docs/coverage/ImageProcessing_GpuKernels.html | 295 ---- .../ImageProcessing_GpuProcessing.html | 264 ---- .../ImageProcessing_ImageArrayProcessing.html | 161 -- docs/coverage/ImageProcessing_Kernels.html | 79 - docs/coverage/ImageProcessing_Main.html | 161 -- docs/coverage/ImageProcessing_MyImage.html | 140 -- docs/coverage/class.js | 221 --- docs/coverage/icon_cube.svg | 2 - docs/coverage/icon_cube_dark.svg | 1 - docs/coverage/icon_down-dir_active.svg | 2 - docs/coverage/icon_down-dir_active_dark.svg | 1 - docs/coverage/icon_fork.svg | 2 - docs/coverage/icon_fork_dark.svg | 1 - docs/coverage/icon_info-circled.svg | 2 - docs/coverage/icon_info-circled_dark.svg | 2 - docs/coverage/icon_minus.svg | 2 - docs/coverage/icon_minus_dark.svg | 1 - docs/coverage/icon_plus.svg | 2 - docs/coverage/icon_plus_dark.svg | 1 - docs/coverage/icon_search-minus.svg | 2 - docs/coverage/icon_search-minus_dark.svg | 1 - docs/coverage/icon_search-plus.svg | 2 - docs/coverage/icon_search-plus_dark.svg | 1 - docs/coverage/icon_sponsor.svg | 2 - docs/coverage/icon_star.svg | 2 - docs/coverage/icon_star_dark.svg | 2 - docs/coverage/icon_up-dir.svg | 2 - docs/coverage/icon_up-dir_active.svg | 2 - docs/coverage/icon_wrench.svg | 2 - docs/coverage/icon_wrench_dark.svg | 1 - docs/coverage/index.htm | 203 --- docs/coverage/index.html | 203 --- docs/coverage/main.js | 359 ----- docs/coverage/report.css | 564 ------- docs/index.html | 218 +++ docs/index.json | 1 + docs/reference/imageprocessing-agents.html | 1021 +++++++++++++ ...mageprocessing-arguments-cliarguments.html | 522 +++++++ docs/reference/imageprocessing-arguments.html | 1032 +++++++++++++ .../imageprocessing-cpuprocessing.html | 671 ++++++++ .../reference/imageprocessing-gpukernels.html | 1351 +++++++++++++++++ .../imageprocessing-gpuprocessing.html | 941 ++++++++++++ .../imageprocessing-imagearrayprocessing.html | 496 ++++++ docs/reference/imageprocessing-kernels.html | 426 ++++++ docs/reference/imageprocessing-main.html | 292 ++++ .../imageprocessing-myimage-myimage.html | 539 +++++++ docs/reference/imageprocessing-myimage.html | 452 ++++++ .../imageprocessing-types-agentstatus.html | 321 ++++ .../imageprocessing-types-devices.html | 389 +++++ ...imageprocessing-types-mirrordirection.html | 321 ++++ .../imageprocessing-types-modifications.html | 593 ++++++++ docs/reference/imageprocessing-types-msg.html | 435 ++++++ .../reference/imageprocessing-types-side.html | 321 ++++ docs/reference/imageprocessing-types.html | 415 +++++ docs/reference/imageprocessing.html | 519 +++++++ docs/reference/index.html | 209 +++ docsSrc/Explanations/Structure.md | 10 + docsSrc/How_Tos/Code.md | 78 + docsSrc/Tutorials/Tutorial.md | 66 + docsSrc/index.md | 27 +- images/Structure.png | Bin 0 -> 36300 bytes src/ImageProcessing/Main.fs | 3 + src/ImageProcessing/MyImage.fs | 5 +- temp/watch-docs/Explanations/Structure.html | 210 +++ ...1\203\320\274\320\265\320\275\321\202.txt" | 0 temp/watch-docs/How_Tos/Code.html | 240 +++ .../Reference/imageprocessing-agents.html | 19 +- ...mageprocessing-arguments-cliarguments.html | 19 +- .../Reference/imageprocessing-arguments.html | 19 +- .../imageprocessing-cpuprocessing.html | 19 +- .../Reference/imageprocessing-gpukernels.html | 19 +- .../imageprocessing-gpuprocessing.html | 19 +- .../imageprocessing-imagearrayprocessing.html | 19 +- .../Reference/imageprocessing-kernels.html | 19 +- .../Reference/imageprocessing-main.html | 21 +- .../imageprocessing-myimage-myimage.html | 19 +- .../Reference/imageprocessing-myimage.html | 27 +- .../imageprocessing-types-agentstatus.html | 19 +- .../imageprocessing-types-devices.html | 19 +- ...imageprocessing-types-mirrordirection.html | 19 +- .../imageprocessing-types-modifications.html | 19 +- .../Reference/imageprocessing-types-msg.html | 19 +- .../Reference/imageprocessing-types-side.html | 19 +- .../Reference/imageprocessing-types.html | 19 +- .../watch-docs/Reference/imageprocessing.html | 27 +- temp/watch-docs/Reference/index.html | 19 +- temp/watch-docs/Tutorials/Tutorial.html | 242 +++ temp/watch-docs/index.html | 49 +- temp/watch-docs/index.json | 2 +- 116 files changed, 15061 insertions(+), 3432 deletions(-) create mode 100644 docs/Dockerfile create mode 100644 docs/Explanations/Structure.html create mode 100644 docs/How_Tos/Code.html create mode 100644 docs/NuGet.config create mode 100644 docs/Tutorials/Tutorial.html create mode 100644 docs/_menu-item_template.html create mode 100644 docs/_menu_template.html create mode 100644 docs/content/fsdocs-custom.css create mode 100644 docs/content/fsdocs-dark.css create mode 100644 docs/content/fsdocs-default.css create mode 100644 docs/content/fsdocs-light.css create mode 100644 docs/content/fsdocs-main.css create mode 100644 docs/content/fsdocs-search.js create mode 100644 docs/content/fsdocs-tips.js create mode 100644 docs/content/img/copy-md-hover.png create mode 100644 docs/content/img/copy-md.png create mode 100644 docs/content/img/copy-xml-hover.png create mode 100644 docs/content/img/copy-xml.png create mode 100644 docs/content/img/github-hover.png create mode 100644 docs/content/img/github.png create mode 100644 docs/content/navbar-fixed-left.css create mode 100644 docs/content/navbar-fixed-right.css rename "temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" => docs/content/theme-toggle.js (100%) delete mode 100644 docs/coverage/ImageProcessing_Agents.html delete mode 100644 docs/coverage/ImageProcessing_Arguments.html delete mode 100644 docs/coverage/ImageProcessing_CpuProcessing.html delete mode 100644 docs/coverage/ImageProcessing_GpuKernels.html delete mode 100644 docs/coverage/ImageProcessing_GpuProcessing.html delete mode 100644 docs/coverage/ImageProcessing_ImageArrayProcessing.html delete mode 100644 docs/coverage/ImageProcessing_Kernels.html delete mode 100644 docs/coverage/ImageProcessing_Main.html delete mode 100644 docs/coverage/ImageProcessing_MyImage.html delete mode 100644 docs/coverage/class.js delete mode 100644 docs/coverage/icon_cube.svg delete mode 100644 docs/coverage/icon_cube_dark.svg delete mode 100644 docs/coverage/icon_down-dir_active.svg delete mode 100644 docs/coverage/icon_down-dir_active_dark.svg delete mode 100644 docs/coverage/icon_fork.svg delete mode 100644 docs/coverage/icon_fork_dark.svg delete mode 100644 docs/coverage/icon_info-circled.svg delete mode 100644 docs/coverage/icon_info-circled_dark.svg delete mode 100644 docs/coverage/icon_minus.svg delete mode 100644 docs/coverage/icon_minus_dark.svg delete mode 100644 docs/coverage/icon_plus.svg delete mode 100644 docs/coverage/icon_plus_dark.svg delete mode 100644 docs/coverage/icon_search-minus.svg delete mode 100644 docs/coverage/icon_search-minus_dark.svg delete mode 100644 docs/coverage/icon_search-plus.svg delete mode 100644 docs/coverage/icon_search-plus_dark.svg delete mode 100644 docs/coverage/icon_sponsor.svg delete mode 100644 docs/coverage/icon_star.svg delete mode 100644 docs/coverage/icon_star_dark.svg delete mode 100644 docs/coverage/icon_up-dir.svg delete mode 100644 docs/coverage/icon_up-dir_active.svg delete mode 100644 docs/coverage/icon_wrench.svg delete mode 100644 docs/coverage/icon_wrench_dark.svg delete mode 100644 docs/coverage/index.htm delete mode 100644 docs/coverage/index.html delete mode 100644 docs/coverage/main.js delete mode 100644 docs/coverage/report.css create mode 100644 docs/index.html create mode 100644 docs/index.json create mode 100644 docs/reference/imageprocessing-agents.html create mode 100644 docs/reference/imageprocessing-arguments-cliarguments.html create mode 100644 docs/reference/imageprocessing-arguments.html create mode 100644 docs/reference/imageprocessing-cpuprocessing.html create mode 100644 docs/reference/imageprocessing-gpukernels.html create mode 100644 docs/reference/imageprocessing-gpuprocessing.html create mode 100644 docs/reference/imageprocessing-imagearrayprocessing.html create mode 100644 docs/reference/imageprocessing-kernels.html create mode 100644 docs/reference/imageprocessing-main.html create mode 100644 docs/reference/imageprocessing-myimage-myimage.html create mode 100644 docs/reference/imageprocessing-myimage.html create mode 100644 docs/reference/imageprocessing-types-agentstatus.html create mode 100644 docs/reference/imageprocessing-types-devices.html create mode 100644 docs/reference/imageprocessing-types-mirrordirection.html create mode 100644 docs/reference/imageprocessing-types-modifications.html create mode 100644 docs/reference/imageprocessing-types-msg.html create mode 100644 docs/reference/imageprocessing-types-side.html create mode 100644 docs/reference/imageprocessing-types.html create mode 100644 docs/reference/imageprocessing.html create mode 100644 docs/reference/index.html create mode 100644 docsSrc/Explanations/Structure.md create mode 100644 docsSrc/How_Tos/Code.md create mode 100644 docsSrc/Tutorials/Tutorial.md create mode 100644 images/Structure.png create mode 100644 temp/watch-docs/Explanations/Structure.html create mode 100644 "temp/watch-docs/Explanations/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" create mode 100644 temp/watch-docs/How_Tos/Code.html create mode 100644 temp/watch-docs/Tutorials/Tutorial.html diff --git a/.fsdocs/cache b/.fsdocs/cache index 12fe5936..688618a7 100644 --- a/.fsdocs/cache +++ b/.fsdocs/cache @@ -1,5 +1,5 @@ -@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item1http://localhost:8901/@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1lC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0\LeonidLodygin.ImageProcessing.dll@m_Item2^heado-o:C:\Users\Леонид\ImageProcessing\src\ImageProcessing\obj\Debug\net7.0\LeonidLodygin.ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head --define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head8--doc:obj\Debug\net7.0\LeonidLodygin.ImageProcessing.xml^tail^head --optimize-^tail^head --tailcalls-^tail^headO-r:C:\Users\Леонид\.nuget\packages\argu\6.1.1\lib\netstandard2.0\Argu.dll^tail^heado-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.ast\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.AST.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Core.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.printer\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Printer.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.shared\2.0.3\lib\net7.0\Brahma.FSharp.OpenCL.Shared.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.translator\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Translator.dll^tail^headU-r:C:\Users\Леонид\.nuget\packages\expecto\9.0.4\lib\netstandard2.0\Expecto.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\expecto.fscheck\9.0.4\lib\netstandard2.0\Expecto.FsCheck.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\extraconstraints.fody\1.14.0\lib\netstandard1.4\ExtraConstraints.dll^tail^headV-r:C:\Users\Леонид\.nuget\packages\fscheck\2.14.3\lib\netstandard2.0\FsCheck.dll^tail^head]-r:C:\Users\Леонид\.nuget\packages\fsharp.core\6.0.0\lib\netstandard2.1\FSharp.Core.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\fsharp.quotations.evaluator\2.1.0\lib\netstandard2.0\FSharp.Quotations.Evaluator.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\fsharpx.collections\3.1.0\lib\netstandard2.0\FSharpx.Collections.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\fsharpx.text.structuredformat\3.1.0\lib\netstandard2.0\FSharpx.Text.StructuredFormat.dll^tail^head{-r:C:\Users\Леонид\.nuget\packages\microsoft.build.framework\16.10.0\lib\netstandard2.0\Microsoft.Build.Framework.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.CSharp.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.Core.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Primitives.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Registry.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\microsoft.win32.systemevents\7.0.0\lib\net7.0\Microsoft.Win32.SystemEvents.dll^tail^head\-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Mdb.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Pdb.dll^tail^headb-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Rocks.dll^tail^headX-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\mscorlib.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\netstandard.dll^tail^headn-r:C:\Users\Леонид\.nuget\packages\sixlabors.imagesharp\2.1.3\lib\netcoreapp3.1\SixLabors.ImageSharp.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.AppContext.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Buffers.dll^tail^head[-r:C:\Users\Леонид\.nuget\packages\system.codedom\7.0.0\lib\net7.0\System.CodeDom.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Concurrent.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Immutable.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.NonGeneric.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Specialized.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Annotations.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.DataAnnotations.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.EventBasedAsync.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Primitives.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.TypeConverter.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.configuration.configurationmanager\7.0.0\lib\net7.0\System.Configuration.ConfigurationManager.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Configuration.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Console.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Core.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.Common.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.DataSetExtensions.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Contracts.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Debug.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.DiagnosticSource.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.diagnostics.eventlog\7.0.0\lib\net7.0\System.Diagnostics.EventLog.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.FileVersionInfo.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Process.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.StackTrace.dll^tail^headz-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tools.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TraceSource.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tracing.dll^tail^headV-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.dll^tail^headi-r:C:\Users\Леонид\.nuget\packages\system.drawing.common\7.0.0\lib\net7.0\System.Drawing.Common.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.Primitives.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Dynamic.Runtime.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Asn1.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Tar.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Calendars.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Extensions.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.Brotli.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.FileSystem.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.ZipFile.dll^tail^headY-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.AccessControl.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.DriveInfo.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Primitives.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Watcher.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.IsolatedStorage.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.MemoryMappedFiles.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.AccessControl.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.UnmanagedMemoryStream.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Expressions.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Parallel.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Queryable.dll^tail^head]-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Memory.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.Json.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.HttpListener.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Mail.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NameResolution.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NetworkInformation.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Ping.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Primitives.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Quic.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Requests.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Security.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.ServicePoint.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Sockets.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebClient.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebHeaderCollection.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebProxy.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.Client.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.Vectors.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ObjectModel.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.DispatchProxy.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.ILGeneration.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.Lightweight.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Extensions.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Metadata.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.TypeExtensions.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Reader.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.ResourceManager.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Writer.dll^tail^headv-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Extensions.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Handles.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.dll^tail^heady-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.JavaScript.dll^tail^head-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Intrinsics.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Loader.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Numerics.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Formatters.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Json.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Xml.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.AccessControl.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Claims.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Algorithms.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Cng.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Csp.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Encoding.dll^tail^headt-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.OpenSsl.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Primitives.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.security.cryptography.protecteddata\7.0.0\lib\net7.0\System.Security.Cryptography.ProtectedData.dll^tail^head}-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.X509Certificates.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.security.permissions\7.0.0\lib\net7.0\System.Security.Permissions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.Windows.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.SecureString.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceModel.Web.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceProcess.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.CodePages.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.Extensions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encodings.Web.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Json.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.RegularExpressions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Channels.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Overlapped.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Dataflow.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Extensions.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Parallel.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Thread.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.ThreadPool.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Timer.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.Local.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ValueTuple.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.HttpUtility.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Windows.dll^tail^headq-r:C:\Users\Леонид\.nuget\packages\system.windows.extensions\7.0.0\lib\net7.0\System.Windows.Extensions.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.ReaderWriter.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Serialization.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XDocument.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlDocument.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlSerializer.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.XDocument.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\WindowsBase.dll^tail^headY-r:C:\Users\Леонид\.nuget\packages\yc.opencl.net\2.0.3\lib\net7.0\YC.OpenCL.NET.dll^tail^head--target:library^tail^head+--nowarn:IL2121,NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head --fullpaths^tail^head --flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value0https://github.com/LeonidLodygin/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item1/https://LeonidLodygin.github.io/ImageProcessing@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1lC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0\LeonidLodygin.ImageProcessing.dll@m_Item2^heado-o:C:\Users\Леонид\ImageProcessing\src\ImageProcessing\obj\Debug\net7.0\LeonidLodygin.ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head --define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head8--doc:obj\Debug\net7.0\LeonidLodygin.ImageProcessing.xml^tail^head --optimize-^tail^head --tailcalls-^tail^headO-r:C:\Users\Леонид\.nuget\packages\argu\6.1.1\lib\netstandard2.0\Argu.dll^tail^heado-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.ast\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.AST.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Core.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.printer\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Printer.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.shared\2.0.3\lib\net7.0\Brahma.FSharp.OpenCL.Shared.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\brahma.fsharp.opencl.translator\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Translator.dll^tail^headU-r:C:\Users\Леонид\.nuget\packages\expecto\9.0.4\lib\netstandard2.0\Expecto.dll^tail^heade-r:C:\Users\Леонид\.nuget\packages\expecto.fscheck\9.0.4\lib\netstandard2.0\Expecto.FsCheck.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\extraconstraints.fody\1.14.0\lib\netstandard1.4\ExtraConstraints.dll^tail^headV-r:C:\Users\Леонид\.nuget\packages\fscheck\2.14.3\lib\netstandard2.0\FsCheck.dll^tail^head]-r:C:\Users\Леонид\.nuget\packages\fsharp.core\6.0.0\lib\netstandard2.1\FSharp.Core.dll^tail^head}-r:C:\Users\Леонид\.nuget\packages\fsharp.quotations.evaluator\2.1.0\lib\netstandard2.0\FSharp.Quotations.Evaluator.dll^tail^headm-r:C:\Users\Леонид\.nuget\packages\fsharpx.collections\3.1.0\lib\netstandard2.0\FSharpx.Collections.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\fsharpx.text.structuredformat\3.1.0\lib\netstandard2.0\FSharpx.Text.StructuredFormat.dll^tail^head{-r:C:\Users\Леонид\.nuget\packages\microsoft.build.framework\16.10.0\lib\netstandard2.0\Microsoft.Build.Framework.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.CSharp.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.Core.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.VisualBasic.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Primitives.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\Microsoft.Win32.Registry.dll^tail^headw-r:C:\Users\Леонид\.nuget\packages\microsoft.win32.systemevents\7.0.0\lib\net7.0\Microsoft.Win32.SystemEvents.dll^tail^head\-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Mdb.dll^tail^head`-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Pdb.dll^tail^headb-r:C:\Users\Леонид\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Rocks.dll^tail^headX-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\mscorlib.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\netstandard.dll^tail^headn-r:C:\Users\Леонид\.nuget\packages\sixlabors.imagesharp\2.1.3\lib\netcoreapp3.1\SixLabors.ImageSharp.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.AppContext.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Buffers.dll^tail^head[-r:C:\Users\Леонид\.nuget\packages\system.codedom\7.0.0\lib\net7.0\System.CodeDom.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Concurrent.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Immutable.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.NonGeneric.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Collections.Specialized.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Annotations.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.DataAnnotations.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.EventBasedAsync.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.Primitives.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ComponentModel.TypeConverter.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.configuration.configurationmanager\7.0.0\lib\net7.0\System.Configuration.ConfigurationManager.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Configuration.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Console.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Core.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.Common.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.DataSetExtensions.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Data.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Contracts.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Debug.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.DiagnosticSource.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.diagnostics.eventlog\7.0.0\lib\net7.0\System.Diagnostics.EventLog.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.FileVersionInfo.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Process.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.StackTrace.dll^tail^headz-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tools.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.TraceSource.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Diagnostics.Tracing.dll^tail^headV-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.dll^tail^headi-r:C:\Users\Леонид\.nuget\packages\system.drawing.common\7.0.0\lib\net7.0\System.Drawing.Common.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Drawing.Primitives.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Dynamic.Runtime.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Asn1.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Formats.Tar.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Calendars.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Globalization.Extensions.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.Brotli.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.FileSystem.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Compression.ZipFile.dll^tail^headY-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.AccessControl.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.DriveInfo.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Primitives.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.FileSystem.Watcher.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.IsolatedStorage.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.MemoryMappedFiles.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.AccessControl.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.Pipes.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.IO.UnmanagedMemoryStream.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Expressions.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Parallel.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Linq.Queryable.dll^tail^head]-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Memory.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Http.Json.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.HttpListener.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Mail.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NameResolution.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.NetworkInformation.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Ping.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Primitives.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Quic.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Requests.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Security.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.ServicePoint.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.Sockets.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebClient.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebHeaderCollection.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebProxy.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.Client.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Net.WebSockets.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Numerics.Vectors.dll^tail^headb-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ObjectModel.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.DispatchProxy.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.dll^tail^heads-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.ILGeneration.dll^tail^headr-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Emit.Lightweight.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Extensions.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Metadata.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Reflection.TypeExtensions.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Reader.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.ResourceManager.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Resources.Writer.dll^tail^headv-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Extensions.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Handles.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.dll^tail^heady-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.JavaScript.dll^tail^head-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Intrinsics.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Loader.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Numerics.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Formatters.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Json.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Primitives.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Runtime.Serialization.Xml.dll^tail^headm-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.AccessControl.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Claims.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Algorithms.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Cng.dll^tail^headp-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Csp.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.dll^tail^headu-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Encoding.dll^tail^headt-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.OpenSsl.dll^tail^headw-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.Primitives.dll^tail^head-r:C:\Users\Леонид\.nuget\packages\system.security.cryptography.protecteddata\7.0.0\lib\net7.0\System.Security.Cryptography.ProtectedData.dll^tail^head}-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Cryptography.X509Certificates.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.dll^tail^headu-r:C:\Users\Леонид\.nuget\packages\system.security.permissions\7.0.0\lib\net7.0\System.Security.Permissions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.Principal.Windows.dll^tail^headl-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Security.SecureString.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceModel.Web.dll^tail^heade-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ServiceProcess.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.CodePages.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encoding.Extensions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Encodings.Web.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.Json.dll^tail^headn-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Text.RegularExpressions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Channels.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Overlapped.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Dataflow.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.dll^tail^headq-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Extensions.dll^tail^heado-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Tasks.Parallel.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Thread.dll^tail^headk-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.ThreadPool.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Threading.Timer.dll^tail^headc-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.dll^tail^headi-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Transactions.Local.dll^tail^heada-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.ValueTuple.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Web.HttpUtility.dll^tail^head^-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Windows.dll^tail^headq-r:C:\Users\Леонид\.nuget\packages\system.windows.extensions\7.0.0\lib\net7.0\System.Windows.Extensions.dll^tail^headZ-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.dll^tail^head_-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Linq.dll^tail^headg-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.ReaderWriter.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.Serialization.dll^tail^headd-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XDocument.dll^tail^headf-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlDocument.dll^tail^headh-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XmlSerializer.dll^tail^head`-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.dll^tail^headj-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\System.Xml.XPath.XDocument.dll^tail^head[-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.3\ref\net7.0\WindowsBase.dll^tail^headY-r:C:\Users\Леонид\.nuget\packages\yc.opencl.net\2.0.3\lib\net7.0\YC.OpenCL.NET.dll^tail^head--target:library^tail^head+--nowarn:IL2121,NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head --fullpaths^tail^head --flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value0https://github.com/LeonidLodygin/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2/https://LeonidLodygin.github.io/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2;https://LeonidLodygin.github.io/ImageProcessingimg/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_item fsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Mhttps://github.com/LeonidLodygin/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 -f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Dhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ehttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headJC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2"http://localhost:8901/img/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2/https://LeonidLodygin.github.io/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Dhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ehttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headJC:\Users\Леонид\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2/https://LeonidLodygin.github.io/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2 LeonidLodygin^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2;https://LeonidLodygin.github.io/ImageProcessingimg/logo.png^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_item fsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Mhttps://github.com/LeonidLodygin/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 -f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2http://localhost:8901/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Dhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ehttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^valuehttp://localhost:8901/@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string/https://LeonidLodygin.github.io/ImageProcessing^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-repository-link^string0https://github.com/LeonidLodygin/ImageProcessing^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^stringDhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^stringfsdocs-release-notes-link^stringGhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^stringfsdocs-license-link^stringEhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headPC:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4cH@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTime MhXH \ No newline at end of file +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item21https://github.com/LeonidLodygin/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item2/https://LeonidLodygin.github.io/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item20https://github.com/LeonidLodygin/ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Dhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ghttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ehttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^value/https://LeonidLodygin.github.io/ImageProcessing@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string/https://LeonidLodygin.github.io/ImageProcessing^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-repository-link^string0https://github.com/LeonidLodygin/ImageProcessing^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^stringDhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/README.md^stringfsdocs-release-notes-link^stringGhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/CHANGELOG.md^stringfsdocs-license-link^stringEhttps://github.com/LeonidLodygin/ImageProcessing/blob/main/LICENSE.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headPC:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4cH@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTime MhXH \ No newline at end of file diff --git a/docs/Dockerfile b/docs/Dockerfile new file mode 100644 index 00000000..989c9abb --- /dev/null +++ b/docs/Dockerfile @@ -0,0 +1,29 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 + +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get -y install python3 python3-pip python3-dev ipython3 + +RUN python3 -m pip install --no-cache-dir notebook jupyterlab + +ARG NB_USER=fsdocs-user +ARG NB_UID=1000 +ENV USER ${NB_USER} +ENV NB_UID ${NB_UID} +ENV HOME /home/${NB_USER} + +RUN adduser --disabled-password \ + --gecos "Default user" \ + --uid ${NB_UID} \ + ${NB_USER} + +COPY . ${HOME} +USER root +RUN chown -R ${NB_UID} ${HOME} +USER ${NB_USER} + +ENV PATH="${PATH}:$HOME/.dotnet/tools/" + +RUN dotnet tool install --global Microsoft.dotnet-interactive --version 1.0.410202 + +RUN dotnet-interactive jupyter install diff --git a/docs/Explanations/Structure.html b/docs/Explanations/Structure.html new file mode 100644 index 00000000..31debbb5 --- /dev/null +++ b/docs/Explanations/Structure.html @@ -0,0 +1,183 @@ + + + + + + Structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/How_Tos/Code.html b/docs/How_Tos/Code.html new file mode 100644 index 00000000..020c37eb --- /dev/null +++ b/docs/How_Tos/Code.html @@ -0,0 +1,222 @@ + + + + + + How to code + + + + + + + + + + + + + + + + + + + + + + +
    + +

    How to code

    +

    In this tutorial, we will look at how to work with the ImageProcessing library using code rather than console commands.

    +

    Installing ImageProcessing

    +
    > dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0
    +
    + +

    Load your image using the loadAsImage function from the MyImage module.

    +
    > let image = loadAsImage "path to the image"
    +
    +

    For CPU and GPU the list of transforms is identical, decide what you want to process your image on and select the appropriate function to process from the CpuProcessing module or the GpuProcessing module respectively.

    +

    In the case of CPU processing:

    +

    Apply the fisheye filter to the uploaded image.

    +
    > let newImage = fishEye image
    +
    +

    Don't forget to save the processed image using the saveImage function from the MyImage module!

    +
    > let newImage = saveImage "path"
    +
    +

    In the case of GPU processing:

    +

    In the case of GPU processing, you have to go through a few extra steps to achieve your goal:

    +

    Prepare OpenCl context and queue(from Brahma.FSharp module):

    +
    > let clContext = ClContext(ClDevice.GetFirstAppropriateDevice(device))
    +> let queue = clContext.QueueProvider.CreateQueue()
    +
    +

    Compile the kernel to apply the filter using the fishEyeKernel function from the GpuKernels module:

    +
    > let fishKernel = fishEyeKernel clContext
    +
    +

    Process the image using the fishEye function from the GpuProcessing module:

    +
    let newImage = fishEye fishKernel clContext 64 queue image
    +
    +

    Don't forget to save the new image:

    +
    > let newImage = saveImage "path"
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/NuGet.config b/docs/NuGet.config new file mode 100644 index 00000000..cf1ace51 --- /dev/null +++ b/docs/NuGet.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/Tutorials/Tutorial.html b/docs/Tutorials/Tutorial.html new file mode 100644 index 00000000..63fa8bd1 --- /dev/null +++ b/docs/Tutorials/Tutorial.html @@ -0,0 +1,224 @@ + + + + + + Get Started + + + + + + + + + + + + + + + + + + + + + + +
    + +

    Get Started

    +

    In this tutorial we will look at how to get started with the ImageProcessing library and process your first images.

    +

    Installing ImageProcessing

    +
    > dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0
    +
    +

    Processing of images

    +

    Prepare your images

    +

    Decide on the image you want to process. You can also process several images at once, in which case specify the path to the directory with your images.

    +

    In the command line parameter "-i" use the path to the image, for "-o" use the path where you want to save the image. +

    +

    Choose the desired modifications

    +

    Decide on the modifications you want to apply to the image. Here is a complete list of available modifications:

    +
      +
    • Gauss5x5
    • +
    • Gauss7x7
    • +
    • Edges
    • +
    • Sharpen
    • +
    • Emboss
    • +
    • ClockwiseRotation
    • +
    • CounterClockwiseRotation
    • +
    • MirrorVertical
    • +
    • MirrorHorizontal
    • +
    • FishEye
    • +
    +

    Use the selected modification or modification list for the "-mod" parameter.

    +

    CPU or GPU processing?

    +

    By default, all processing will be done at the expense of the CPU. If you want to process images using GPGPU, use the "-gpu" parameter (if the device has a video card):

    +
      +
    • AnyGpu
    • +
    • Nvidia
    • +
    • Amd
    • +
    • Intel
    • +
    +

    How many logical cores does your system have?

    +

    In the case of processing a large number of images, it would be logical to utilize the parallel processing power of your device. To do this, use the "-ag" or "-sag" parameter. The "-ag" parameter will split image processing and saving tasks into two separate computational threads. The "-sag" parameter will allocate the number of threads you need to process and save images independently. For this parameter you should specify the number of threads you need.

    +

    Let's start processing!

    +

    The end result may look like the following:

    +
    > dotnet run -i *input path* -o *output path* -mod FishEye -gpu AnyGpu
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_menu-item_template.html b/docs/_menu-item_template.html new file mode 100644 index 00000000..dc1b656a --- /dev/null +++ b/docs/_menu-item_template.html @@ -0,0 +1 @@ +
  • {{fsdocs-menu-item-content}}
  • \ No newline at end of file diff --git a/docs/_menu_template.html b/docs/_menu_template.html new file mode 100644 index 00000000..066716c9 --- /dev/null +++ b/docs/_menu_template.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/docs/content/fsdocs-custom.css b/docs/content/fsdocs-custom.css new file mode 100644 index 00000000..c2da89ad --- /dev/null +++ b/docs/content/fsdocs-custom.css @@ -0,0 +1,15 @@ +.fsharp-icon-logo { + width: 25px; + margin-top: -2px; + -webkit-filter: grayscale(100%) brightness(1) invert(1); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%) brightness(1) invert(1); +} + + +body .navbar .dropdown-menu .active .bi { + display: block !important; +} + +nav.navbar .dropdown-item img.fsharp-icon-logo { + margin-right: 0px; +} \ No newline at end of file diff --git a/docs/content/fsdocs-dark.css b/docs/content/fsdocs-dark.css new file mode 100644 index 00000000..001b6530 --- /dev/null +++ b/docs/content/fsdocs-dark.css @@ -0,0 +1,50 @@ +@import url('https://raw.githubusercontent.com/tonsky/FiraCode/fixed/distr/fira_code.css'); +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +:root { + --fsdocs-text-color:#d1d1d1; + --fsdocs-pre-border-color: #000000; + --fsdocs-pre-border-color-top: #070707; + --fsdocs-pre-background-color: #1E1E1E; + --fsdocs-pre-color: #e2e2e2; + --fsdocs-table-pre-background-color: #1d1d1d; + --fsdocs-table-pre-color: #c9c9c9; + + --fsdocs-code-strings-color: #ea9a75; + --fsdocs-code-printf-color: #E0C57F; + --fsdocs-code-escaped-color: #EA8675; + --fsdocs-code-identifiers-color: var(--fsdocs-text-color); + --fsdocs-code-module-color: #43AEC6; + --fsdocs-code-reference-color: #6a8dd8; + --fsdocs-code-value-color: #43AEC6; + --fsdocs-code-interface-color: #43AEC6; + --fsdocs-code-typearg-color: #43AEC6; + --fsdocs-code-disposable-color: #2f798a; + --fsdocs-code-property-color: #43AEC6; + --fsdocs-code-punctuation-color: #43AEC6; + --fsdocs-code-punctuation2-color: #e1e1e1; + --fsdocs-code-function-color: #e1e1e1; + --fsdocs-code-function2-color: #43AEC6; + --fsdocs-code-activepattern-color: #4ec9b0; + --fsdocs-code-unioncase-color: #4ec9b0; + --fsdocs-code-enumeration-color: #4ec9b0; + --fsdocs-code-keywords-color: #2248c4; + --fsdocs-code-comment-color: #329215; + --fsdocs-code-operators-color: #af75c1; + --fsdocs-code-numbers-color: #96C71D; + --fsdocs-code-linenumbers-color: #80b0b0; + --fsdocs-code-mutable-color: #997f0c; + --fsdocs-code-inactive-color: #808080; + --fsdocs-code-preprocessor-color: #af75c1; + --fsdocs-code-fsioutput-color: #808080; + --fsdocs-code-tooltip-color: #d1d1d1; +} + + +.fsdocs-source-link img { + -webkit-filter: grayscale(100%) brightness(1) invert(1); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%) brightness(1) invert(1); +} \ No newline at end of file diff --git a/docs/content/fsdocs-default.css b/docs/content/fsdocs-default.css new file mode 100644 index 00000000..bf73bfa5 --- /dev/null +++ b/docs/content/fsdocs-default.css @@ -0,0 +1,613 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono:wght@400;500;600&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: 'Hind Vadodara', sans-serif; + /* padding-top: 0px; + padding-bottom: 40px; +*/ +} + +blockquote { + margin: 0 1em 0 0.25em; + margin-top: 0px; + margin-right: 1em; + margin-bottom: 0px; + margin-left: 0.25em; + padding: 0 .75em 0 1em; + border-left: 1px solid #777; + border-right: 0px solid #777; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} + + .masthead .muted a { + text-decoration: none; + color: #999999; + } + + .masthead ul, .masthead li { + margin-bottom: 0px; + } + + .masthead .nav li { + margin-top: 15px; + font-size: 110%; + } + + .masthead h3 { + margin-top: 15px; + margin-bottom: 5px; + font-size: 170%; + } + +/*-------------------------------------------------------------------------- + Formatting fsdocs-content +/*--------------------------------------------------------------------------*/ + +/* Change font sizes for headings etc. */ +#fsdocs-content h1 { + margin: 30px 0px 15px 0px; + /* font-weight: 400; */ + font-size: 2rem; + letter-spacing: 1.78px; + line-height: 2.5rem; + font-weight: 400; +} + +#fsdocs-content h2 { + font-size: 1.6rem; + margin: 20px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content h3 { + font-size: 1.2rem; + margin: 15px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content hr { + margin: 0px 0px 20px 0px; +} + +#fsdocs-content li { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + margin: 0px 0px 15px 0px; +} + +#fsdocs-content p { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: #262626; +} + +#fsdocs-content a { + color: #4974D1; +} +/* remove the default bootstrap bold on dt elements */ +#fsdocs-content dt { + font-weight: normal; +} + + + +/*-------------------------------------------------------------------------- + Formatting tables in fsdocs-content, using learn.microsoft.com tables +/*--------------------------------------------------------------------------*/ + +#fsdocs-content .table { + table-layout: auto; + width: 100%; + font-size: 0.875rem; +} + + #fsdocs-content .table caption { + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 2px; + text-transform: uppercase; + padding: 1.125rem; + border-width: 0 0 1px; + border-style: solid; + border-color: #e3e3e3; + text-align: right; + } + + #fsdocs-content .table td, + #fsdocs-content .table th { + display: table-cell; + word-wrap: break-word; + padding: 0.75rem 1rem 0.75rem 0rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #e3e3e3; + border-right: 0; + border-left: 0; + border-bottom: 0; + border-style: solid; + } + + /* suppress the top line on inner lists such as tables of exceptions */ + #fsdocs-content .table .fsdocs-exception-list td, + #fsdocs-content .table .fsdocs-exception-list th { + border-top: 0 + } + + #fsdocs-content .table td p:first-child, + #fsdocs-content .table th p:first-child { + margin-top: 0; + } + + #fsdocs-content .table td.nowrap, + #fsdocs-content .table th.nowrap { + white-space: nowrap; + } + + #fsdocs-content .table td.is-narrow, + #fsdocs-content .table th.is-narrow { + width: 15%; + } + + #fsdocs-content .table th:not([scope='row']) { + border-top: 0; + border-bottom: 1px; + } + + #fsdocs-content .table > caption + thead > tr:first-child > td, + #fsdocs-content .table > colgroup + thead > tr:first-child > td, + #fsdocs-content .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + #fsdocs-content .table table-striped > tbody > tr:nth-of-type(odd) { + background-color: var(--box-shadow-light); + } + + #fsdocs-content .table.min { + width: unset; + } + + #fsdocs-content .table.is-left-aligned td:first-child, + #fsdocs-content .table.is-left-aligned th:first-child { + padding-left: 0; + } + + #fsdocs-content .table.is-left-aligned td:first-child a, + #fsdocs-content .table.is-left-aligned th:first-child a { + outline-offset: -0.125rem; + } + +@media screen and (max-width: 767px), screen and (min-resolution: 120dpi) and (max-width: 767.9px) { + #fsdocs-content .table.is-stacked-mobile td:nth-child(1) { + display: block; + width: 100%; + padding: 1rem 0; + } + + #fsdocs-content .table.is-stacked-mobile td:not(:nth-child(1)) { + display: block; + border-width: 0; + padding: 0 0 1rem; + } +} + +#fsdocs-content .table.has-inner-borders th, +#fsdocs-content .table.has-inner-borders td { + border-right: 1px solid #e3e3e3; +} + + #fsdocs-content .table.has-inner-borders th:last-child, + #fsdocs-content .table.has-inner-borders td:last-child { + border-right: none; + } + +.fsdocs-entity-list .fsdocs-entity-name { + width: 25%; + font-weight: bold; +} + +.fsdocs-member-list .fsdocs-member-usage { + width: 35%; +} + +/*-------------------------------------------------------------------------- + Formatting xmldoc sections in fsdocs-content +/*--------------------------------------------------------------------------*/ + +.fsdocs-summary { + display: inline; +} + +.fsdocs-xmldoc, .fsdocs-entity-xmldoc, .fsdocs-member-xmldoc { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: #262626; +} + +.fsdocs-xmldoc h1 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h2 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h3 { + font-size: 1.1rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-member-xmldoc details[open] summary + * { + margin-top: 1rem; +} + +/* #fsdocs-nav .searchbox { + margin-top: 30px; + margin-bottom: 30px; +} */ + +#fsdocs-nav img.logo{ + width:90%; + /* height:140px; */ + /* margin:10px 0px 0px 20px; */ + margin-top:40px; + border-style:none; +} + +#fsdocs-nav input{ + /* margin-left: 20px; */ + margin-right: 20px; + margin-top: 20px; + margin-bottom: 20px; + width: 93%; + -webkit-border-radius: 0; + border-radius: 0; +} + +#fsdocs-nav { + /* margin-left: -5px; */ + /* width: 90%; */ + font-size:0.95rem; +} + +#fsdocs-nav li.nav-header{ + /* margin-left: -5px; */ + /* width: 90%; */ + padding-left: 0; + color: #262626; + text-transform: none; + font-size:16px; + margin-top: 9px; + font-weight: bold; +} + +#fsdocs-nav a{ + padding-left: 0; + color: #6c6c6d; + /* margin-left: 5px; */ + /* width: 90%; */ +} + +/*-------------------------------------------------------------------------- + Formatting pre and code sections in fsdocs-content (code highlighting is + further below) +/*--------------------------------------------------------------------------*/ + +#fsdocs-content code { + /* font-size: 0.83rem; */ + font: 0.85rem 'Roboto Mono', monospace; + background-color: #f7f7f900; + border: 0px; + padding: 0px; + /* word-wrap: break-word; */ + /* white-space: pre; */ +} + +/* omitted */ +#fsdocs-content span.omitted { + background: #3c4e52; + border-radius: 5px; + color: #808080; + padding: 0px 0px 1px 0px; +} + +#fsdocs-content pre .fssnip code { + font: 0.86rem 'Roboto Mono', monospace; +} + +#fsdocs-content table.pre, +#fsdocs-content pre.fssnip, +#fsdocs-content pre { + line-height: 13pt; + border: 0px solid #d8d8d8; + border-top: 0px solid #e3e3e3; + border-collapse: separate; + white-space: pre; + font: 0.86rem 'Roboto Mono', monospace; + width: 100%; + margin: 10px 0px 20px 0px; + background-color: #f3f4f7; + padding: 10px; + border-radius: 5px; + color: #8e0e2b; + max-width: none; + box-sizing: border-box; +} + +#fsdocs-content pre.fssnip code { + font: 0.86rem 'Roboto Mono', monospace; + font-weight: 600; +} + +#fsdocs-content table.pre { + background-color: #fff7ed; +} + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border-radius: 0px; + width: 100%; + background-color: #fff7ed; + color: #837b79; +} + +#fsdocs-content table.pre td { + padding: 0px; + white-space: normal; + margin: 0px; + width: 100%; +} + +#fsdocs-content table.pre td.lines { + width: 30px; +} + + +#fsdocs-content pre { + word-wrap: inherit; +} + +.fsdocs-example-header { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 700; + color: #262626; +} + +/*-------------------------------------------------------------------------- + Formatting github source links +/*--------------------------------------------------------------------------*/ + +.fsdocs-source-link { + float: right; + text-decoration: none; +} + + .fsdocs-source-link img { + border-style: none; + margin-left: 10px; + width: auto; + height: 1.4em; + } + + .fsdocs-source-link .hover { + display: none; + } + + .fsdocs-source-link:hover .hover { + display: block; + } + + .fsdocs-source-link .normal { + display: block; + } + + .fsdocs-source-link:hover .normal { + display: none; + } + +/*-------------------------------------------------------------------------- + Formatting logo +/*--------------------------------------------------------------------------*/ + +#fsdocs-logo { + width:140px; + height:140px; + margin:10px 0px 0px 0px; + border-style:none; +} + +/*-------------------------------------------------------------------------- + +/*--------------------------------------------------------------------------*/ + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border: none; +} + +/*-------------------------------------------------------------------------- + Remove formatting from links +/*--------------------------------------------------------------------------*/ + +#fsdocs-content h1 a, +#fsdocs-content h1 a:hover, +#fsdocs-content h1 a:focus, +#fsdocs-content h2 a, +#fsdocs-content h2 a:hover, +#fsdocs-content h2 a:focus, +#fsdocs-content h3 a, +#fsdocs-content h3 a:hover, +#fsdocs-content h3 a:focus, +#fsdocs-content h4 a, +#fsdocs-content h4 a:hover, #fsdocs-content +#fsdocs-content h4 a:focus, +#fsdocs-content h5 a, +#fsdocs-content h5 a:hover, +#fsdocs-content h5 a:focus, +#fsdocs-content h6 a, +#fsdocs-content h6 a:hover, +#fsdocs-content h6 a:focus { + color: #262626; + text-decoration: none; + text-decoration-style: none; + /* outline: none */ +} + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +.fsdocs-param-name, +.fsdocs-return-name, +.fsdocs-param { + font-weight: 900; + font-size: 0.85rem; + font-family: 'Roboto Mono', monospace; +} +/* strings --- and stlyes for other string related formats */ +#fsdocs-content span.s { + color: #dd1144; +} +/* printf formatters */ +#fsdocs-content span.pf { + color: #E0C57F; +} +/* escaped chars */ +#fsdocs-content span.e { + color: #EA8675; +} + +/* identifiers --- and styles for more specific identifier types */ +#fsdocs-content span.id { + color: #262626; +} +/* module */ +#fsdocs-content span.m { + color: #009999; +} +/* reference type */ +#fsdocs-content span.rt { + color: #4974D1; +} +/* value type */ +#fsdocs-content span.vt { + color: #43AEC6; +} +/* interface */ +#fsdocs-content span.if { + color: #43AEC6; +} +/* type argument */ +#fsdocs-content span.ta { + color: #43AEC6; +} +/* disposable */ +#fsdocs-content span.d { + color: #43AEC6; +} +/* property */ +#fsdocs-content span.prop { + color: #43AEC6; +} +/* punctuation */ +#fsdocs-content span.p { + color: #43AEC6; +} +#fsdocs-content span.pn { + color: #262626; +} +/* function */ +#fsdocs-content span.f { + color: #e1e1e1; +} +#fsdocs-content span.fn { + color: #990000; +} +/* active pattern */ +#fsdocs-content span.pat { + color: #4ec9b0; +} +/* union case */ +#fsdocs-content span.u { + color: #4ec9b0; +} +/* enumeration */ +#fsdocs-content span.e { + color: #4ec9b0; +} +/* keywords */ +#fsdocs-content span.k { + color: #b68015; + /* font-weight: bold; */ +} +/* comment */ +#fsdocs-content span.c { + color: #808080; + font-weight: 400; + font-style: italic; +} +/* operators */ +#fsdocs-content span.o { + color: #af75c1; +} +/* numbers */ +#fsdocs-content span.n { + color: #009999; +} +/* line number */ +#fsdocs-content span.l { + color: #80b0b0; +} +/* mutable var or ref cell */ +#fsdocs-content span.v { + color: #d1d1d1; + font-weight: bold; +} +/* inactive code */ +#fsdocs-content span.inactive { + color: #808080; +} +/* preprocessor */ +#fsdocs-content span.prep { + color: #af75c1; +} +/* fsi output */ +#fsdocs-content span.fsi { + color: #808080; +} + +/* tool tip */ +div.fsdocs-tip { + background: #475b5f; + border-radius: 4px; + font: 0.85rem 'Roboto Mono', monospace; + padding: 6px 8px 6px 8px; + display: none; + color: #d1d1d1; + pointer-events: none; +} + + div.fsdocs-tip code { + color: #d1d1d1; + font: 0.85rem 'Roboto Mono', monospace; + } + diff --git a/docs/content/fsdocs-light.css b/docs/content/fsdocs-light.css new file mode 100644 index 00000000..474512dc --- /dev/null +++ b/docs/content/fsdocs-light.css @@ -0,0 +1,43 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +:root { + --fsdocs-text-color:#262626; + --fsdocs-pre-border-color: #d8d8d8; + --fsdocs-pre-border-color-top: #e3e3e3; + --fsdocs-pre-background-color: #f3f4f7; + --fsdocs-pre-color: #8e0e2b; + --fsdocs-table-pre-background-color: #fff7ed; + --fsdocs-table-pre-color: #837b79; + + --fsdocs-code-strings-color: #dd1144; + --fsdocs-code-printf-color: #E0C57F; + --fsdocs-code-escaped-color: #EA8675; + --fsdocs-code-identifiers-color: var(--fsdocs-text-color); + --fsdocs-code-module-color: #009999; + --fsdocs-code-reference-color: #4974D1; + --fsdocs-code-value-color: #43AEC6; + --fsdocs-code-interface-color: #43AEC6; + --fsdocs-code-typearg-color: #43AEC6; + --fsdocs-code-disposable-color: #43AEC6; + --fsdocs-code-property-color: #43AEC6; + --fsdocs-code-punctuation-color: #43AEC6; + --fsdocs-code-punctuation2-color: #var(--fsdocs-text-color); + --fsdocs-code-function-color: #e1e1e1; + --fsdocs-code-function2-color: #990000; + --fsdocs-code-activepattern-color: #4ec9b0; + --fsdocs-code-unioncase-color: #4ec9b0; + --fsdocs-code-enumeration-color: #4ec9b0; + --fsdocs-code-keywords-color: #b68015; + --fsdocs-code-comment-color: #808080; + --fsdocs-code-operators-color: #af75c1; + --fsdocs-code-numbers-color: #009999; + --fsdocs-code-linenumbers-color: #80b0b0; + --fsdocs-code-mutable-color: #d1d1d1; + --fsdocs-code-inactive-color: #808080; + --fsdocs-code-preprocessor-color: #af75c1; + --fsdocs-code-fsioutput-color: #808080; + --fsdocs-code-tooltip-color: #d1d1d1; +} \ No newline at end of file diff --git a/docs/content/fsdocs-main.css b/docs/content/fsdocs-main.css new file mode 100644 index 00000000..a1748d2f --- /dev/null +++ b/docs/content/fsdocs-main.css @@ -0,0 +1,604 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind+Vadodara&family=Roboto+Mono&display=swap'); +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: 'Hind Vadodara', sans-serif; + /* padding-top: 0px; + padding-bottom: 40px; +*/ +} + +blockquote { + margin: 0 1em 0 0.25em; + margin-top: 0px; + margin-right: 1em; + margin-bottom: 0px; + margin-left: 0.25em; + padding: 0 .75em 0 1em; + border-left: 1px solid #777; + border-right: 0px solid #777; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} + + .masthead .muted a { + text-decoration: none; + color: #999999; + } + + .masthead ul, .masthead li { + margin-bottom: 0px; + } + + .masthead .nav li { + margin-top: 15px; + font-size: 110%; + } + + .masthead h3 { + margin-top: 15px; + margin-bottom: 5px; + font-size: 170%; + } + +/*-------------------------------------------------------------------------- + Formatting fsdocs-content +/*--------------------------------------------------------------------------*/ + +/* Change font sizes for headings etc. */ +#fsdocs-content h1 { + margin: 30px 0px 15px 0px; + /* font-weight: 400; */ + font-size: 2rem; + letter-spacing: 1.78px; + line-height: 2.5rem; + font-weight: 400; +} + +#fsdocs-content h2 { + font-size: 1.6rem; + margin: 20px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content h3 { + font-size: 1.2rem; + margin: 15px 0px 10px 0px; + font-weight: 400; +} + +#fsdocs-content hr { + margin: 0px 0px 20px 0px; +} + +#fsdocs-content li { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + margin: 0px 0px 15px 0px; +} + +#fsdocs-content p { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: var(--fsdocs-text-color);; +} + +#fsdocs-content a:not(.btn) { + color: #4974D1; +} +/* remove the default bootstrap bold on dt elements */ +#fsdocs-content dt { + font-weight: normal; +} + + + +/*-------------------------------------------------------------------------- + Formatting tables in fsdocs-content, using learn.microsoft.com tables +/*--------------------------------------------------------------------------*/ + +#fsdocs-content .table { + table-layout: auto; + width: 100%; + font-size: 0.875rem; +} + + #fsdocs-content .table caption { + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 2px; + text-transform: uppercase; + padding: 1.125rem; + border-width: 0 0 1px; + border-style: solid; + border-color: #e3e3e3; + text-align: right; + } + + #fsdocs-content .table td, + #fsdocs-content .table th { + display: table-cell; + word-wrap: break-word; + padding: 0.75rem 1rem 0.75rem 0rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #e3e3e3; + border-right: 0; + border-left: 0; + border-bottom: 0; + border-style: solid; + } + + /* suppress the top line on inner lists such as tables of exceptions */ + #fsdocs-content .table .fsdocs-exception-list td, + #fsdocs-content .table .fsdocs-exception-list th { + border-top: 0 + } + + #fsdocs-content .table td p:first-child, + #fsdocs-content .table th p:first-child { + margin-top: 0; + } + + #fsdocs-content .table td.nowrap, + #fsdocs-content .table th.nowrap { + white-space: nowrap; + } + + #fsdocs-content .table td.is-narrow, + #fsdocs-content .table th.is-narrow { + width: 15%; + } + + #fsdocs-content .table th:not([scope='row']) { + border-top: 0; + border-bottom: 1px; + } + + #fsdocs-content .table > caption + thead > tr:first-child > td, + #fsdocs-content .table > colgroup + thead > tr:first-child > td, + #fsdocs-content .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + #fsdocs-content .table table-striped > tbody > tr:nth-of-type(odd) { + background-color: var(--box-shadow-light); + } + + #fsdocs-content .table.min { + width: unset; + } + + #fsdocs-content .table.is-left-aligned td:first-child, + #fsdocs-content .table.is-left-aligned th:first-child { + padding-left: 0; + } + + #fsdocs-content .table.is-left-aligned td:first-child a, + #fsdocs-content .table.is-left-aligned th:first-child a { + outline-offset: -0.125rem; + } + +@media screen and (max-width: 767px), screen and (min-resolution: 120dpi) and (max-width: 767.9px) { + #fsdocs-content .table.is-stacked-mobile td:nth-child(1) { + display: block; + width: 100%; + padding: 1rem 0; + } + + #fsdocs-content .table.is-stacked-mobile td:not(:nth-child(1)) { + display: block; + border-width: 0; + padding: 0 0 1rem; + } +} + +#fsdocs-content .table.has-inner-borders th, +#fsdocs-content .table.has-inner-borders td { + border-right: 1px solid #e3e3e3; +} + + #fsdocs-content .table.has-inner-borders th:last-child, + #fsdocs-content .table.has-inner-borders td:last-child { + border-right: none; + } + +.fsdocs-entity-list .fsdocs-entity-name { + width: 25%; + font-weight: bold; +} + +.fsdocs-member-list .fsdocs-member-usage { + width: 35%; +} + +/*-------------------------------------------------------------------------- + Formatting xmldoc sections in fsdocs-content +/*--------------------------------------------------------------------------*/ + +.fsdocs-xmldoc, .fsdocs-entity-xmldoc, .fsdocs-member-xmldoc { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 500; + color: var(--fsdocs-text-color);; +} + +.fsdocs-xmldoc h1 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h2 { + font-size: 1.2rem; + margin: 10px 0px 0px 0px; +} + +.fsdocs-xmldoc h3 { + font-size: 1.1rem; + margin: 10px 0px 0px 0px; +} + +/* #fsdocs-nav .searchbox { + margin-top: 30px; + margin-bottom: 30px; +} */ + +#fsdocs-nav img.logo{ + width:90%; + /* height:140px; */ + /* margin:10px 0px 0px 20px; */ + margin-top:40px; + border-style:none; +} + +#fsdocs-nav input{ + /* margin-left: 20px; */ + margin-right: 20px; + margin-top: 20px; + margin-bottom: 20px; + width: 93%; + -webkit-border-radius: 0; + border-radius: 0; +} + +#fsdocs-nav { + /* margin-left: -5px; */ + /* width: 90%; */ + font-size:0.95rem; +} + +#fsdocs-nav li.nav-header{ + /* margin-left: -5px; */ + /* width: 90%; */ + padding-left: 0; + color: var(--fsdocs-text-color);; + text-transform: none; + font-size:16px; + margin-top: 9px; + font-weight: bold; +} + +#fsdocs-nav a{ + padding-left: 0; + color: #6c6c6d; + /* margin-left: 5px; */ + /* width: 90%; */ +} + +/*-------------------------------------------------------------------------- + Formatting pre and code sections in fsdocs-content (code highlighting is + further below) +/*--------------------------------------------------------------------------*/ + +#fsdocs-content code { + /* font-size: 0.83rem; */ + font: 0.85rem 'Roboto Mono', monospace; + background-color: #f7f7f900; + border: 0px; + padding: 0px; + /* word-wrap: break-word; */ + /* white-space: pre; */ +} + +/* omitted */ +#fsdocs-content span.omitted { + background: #3c4e52; + border-radius: 5px; + color: #808080; + padding: 0px 0px 1px 0px; +} + +#fsdocs-content pre .fssnip code { + font: 0.86rem 'Roboto Mono', monospace; +} + +#fsdocs-content table.pre, +#fsdocs-content pre.fssnip, +#fsdocs-content pre { + line-height: 13pt; + border: 0px solid var(--fsdocs-pre-border-color); + border-top: 0px solid var(--fsdocs-pre-border-color-top); + border-collapse: separate; + white-space: pre; + font: 0.86rem 'Roboto Mono', monospace; + width: 100%; + margin: 10px 0px 20px 0px; + background-color: var(--fsdocs-pre-background-color); + padding: 10px; + border-radius: 5px; + color: var(--fsdocs-pre-color); + max-width: none; + box-sizing: border-box; +} + +#fsdocs-content pre.fssnip code { + font: 0.86rem 'Roboto Mono', monospace; + font-weight: 600; +} + +#fsdocs-content table.pre { + background-color: var(--fsdocs-table-pre-background-color);; +} + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border-radius: 0px; + width: 100%; + background-color: var(--fsdocs-table-pre-background-color); + color: var(--fsdocs-table-pre-color); +} + +#fsdocs-content table.pre td { + padding: 0px; + white-space: normal; + margin: 0px; + width: 100%; +} + +#fsdocs-content table.pre td.lines { + width: 30px; +} + + +#fsdocs-content pre { + word-wrap: inherit; +} + +.fsdocs-example-header { + font-size: 1.0rem; + line-height: 1.375rem; + letter-spacing: 0.01px; + font-weight: 700; + color: var(--fsdocs-text-color);; +} + +/*-------------------------------------------------------------------------- + Formatting github source links +/*--------------------------------------------------------------------------*/ + +.fsdocs-source-link { + float: right; + text-decoration: none; +} + + .fsdocs-source-link img { + border-style: none; + margin-left: 10px; + width: auto; + height: 1.4em; + } + + .fsdocs-source-link .hover { + display: none; + } + + .fsdocs-source-link:hover .hover { + display: block; + } + + .fsdocs-source-link .normal { + display: block; + } + + .fsdocs-source-link:hover .normal { + display: none; + } + +/*-------------------------------------------------------------------------- + Formatting logo +/*--------------------------------------------------------------------------*/ + +#fsdocs-logo { + width:40px; + height:40px; + margin:10px 0px 0px 0px; + border-style:none; +} + +/*-------------------------------------------------------------------------- + +/*--------------------------------------------------------------------------*/ + +#fsdocs-content table.pre pre { + padding: 0px; + margin: 0px; + border: none; +} + +/*-------------------------------------------------------------------------- + Remove formatting from links +/*--------------------------------------------------------------------------*/ + +#fsdocs-content h1 a, +#fsdocs-content h1 a:hover, +#fsdocs-content h1 a:focus, +#fsdocs-content h2 a, +#fsdocs-content h2 a:hover, +#fsdocs-content h2 a:focus, +#fsdocs-content h3 a, +#fsdocs-content h3 a:hover, +#fsdocs-content h3 a:focus, +#fsdocs-content h4 a, +#fsdocs-content h4 a:hover, #fsdocs-content +#fsdocs-content h4 a:focus, +#fsdocs-content h5 a, +#fsdocs-content h5 a:hover, +#fsdocs-content h5 a:focus, +#fsdocs-content h6 a, +#fsdocs-content h6 a:hover, +#fsdocs-content h6 a:focus { + color: var(--fsdocs-text-color);; + text-decoration: none; + text-decoration-style: none; + /* outline: none */ +} + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +.fsdocs-param-name, +.fsdocs-return-name, +.fsdocs-param { + font-weight: 900; + font-size: 0.85rem; + font-family: 'Roboto Mono', monospace; +} +/* strings --- and stlyes for other string related formats */ +#fsdocs-content span.s { + color: var(--fsdocs-code-strings-color); +} +/* printf formatters */ +#fsdocs-content span.pf { + color: var(--fsdocs-code-printf-color); +} +/* escaped chars */ +#fsdocs-content span.e { + color: var(--fsdocs-code-escaped-color); +} + +/* identifiers --- and styles for more specific identifier types */ +#fsdocs-content span.id { + color: var(--fsdocs-identifiers-color);; +} +/* module */ +#fsdocs-content span.m { + color:var(--fsdocs-code-module-color); +} +/* reference type */ +#fsdocs-content span.rt { + color: var(--fsdocs-code-reference-color); +} +/* value type */ +#fsdocs-content span.vt { + color: var(--fsdocs-code-value-color); +} +/* interface */ +#fsdocs-content span.if { + color: var(--fsdocs-code-interface-color); +} +/* type argument */ +#fsdocs-content span.ta { + color: var(--fsdocs-code-typearg-color); +} +/* disposable */ +#fsdocs-content span.d { + color: var(--fsdocs-code-disposable-color); +} +/* property */ +#fsdocs-content span.prop { + color: var(--fsdocs-code-property-color); +} +/* punctuation */ +#fsdocs-content span.p { + color: var(--fsdocs-code-punctuation-color); +} +#fsdocs-content span.pn { + color: var(--fsdocs-code-punctuation2-color); +} +/* function */ +#fsdocs-content span.f { + color: var(--fsdocs-code-function-color); +} +#fsdocs-content span.fn { + color: var(--fsdocs-code-function2-color); +} +/* active pattern */ +#fsdocs-content span.pat { + color: var(--fsdocs-code-activepattern-color); +} +/* union case */ +#fsdocs-content span.u { + color: var(--fsdocs-code-unioncase-color); +} +/* enumeration */ +#fsdocs-content span.e { + color: var(--fsdocs-code-enumeration-color); +} +/* keywords */ +#fsdocs-content span.k { + color: var(--fsdocs-code-keywords-color); + /* font-weight: bold; */ +} +/* comment */ +#fsdocs-content span.c { + color: var(--fsdocs-code-comment-color); + font-weight: 400; + font-style: italic; +} +/* operators */ +#fsdocs-content span.o { + color: var(--fsdocs-code-operators-color); +} +/* numbers */ +#fsdocs-content span.n { + color: var(--fsdocs-code-numbers-color); +} +/* line number */ +#fsdocs-content span.l { + color: var(--fsdocs-code-linenumbers-color); +} +/* mutable var or ref cell */ +#fsdocs-content span.v { + color: var(--fsdocs-code-mutable-color); + font-weight: bold; +} +/* inactive code */ +#fsdocs-content span.inactive { + color: var(--fsdocs-code-inactive-color); +} +/* preprocessor */ +#fsdocs-content span.prep { + color: var(--fsdocs-code-preprocessor-color); +} +/* fsi output */ +#fsdocs-content span.fsi { + color: var(--fsdocs-code-fsioutput-color); +} + +/* tool tip */ +div.fsdocs-tip { + background: #475b5f; + border-radius: 4px; + font: 0.85rem 'Roboto Mono', monospace; + padding: 6px 8px 6px 8px; + display: none; + color: var(--fsdocs-code-tooltip-color); + pointer-events: none; +} + + div.fsdocs-tip code { + color: var(--fsdocs-code-tooltip-color); + font: 0.85rem 'Roboto Mono', monospace; + } \ No newline at end of file diff --git a/docs/content/fsdocs-search.js b/docs/content/fsdocs-search.js new file mode 100644 index 00000000..3d543cf3 --- /dev/null +++ b/docs/content/fsdocs-search.js @@ -0,0 +1,84 @@ +var lunrIndex, pagesIndex; + +function endsWith(str, suffix) { + return str.indexOf(suffix, str.length - suffix.length) !== -1; +} + +// Initialize lunrjs using our generated index file +function initLunr() { + if (!endsWith(fsdocs_search_baseurl,"/")){ + fsdocs_search_baseurl = fsdocs_search_baseurl+'/' + }; + + // First retrieve the index file + $.getJSON(fsdocs_search_baseurl +"index.json") + .done(function(index) { + pagesIndex = index; + // Set up lunrjs by declaring the fields we use + // Also provide their boost level for the ranking + lunrIndex = lunr(function() { + this.ref("uri"); + this.field('title', { + boost: 15 + }); + this.field('tags', { + boost: 10 + }); + this.field("content", { + boost: 5 + }); + + this.pipeline.remove(lunr.stemmer); + this.searchPipeline.remove(lunr.stemmer); + + // Feed lunr with each file and let lunr actually index them + pagesIndex.forEach(function(page) { + this.add(page); + }, this); + }) + }) + .fail(function(jqxhr, textStatus, error) { + var err = textStatus + ", " + error; + console.error("Error getting Hugo index file:", err); + }); +} + +/** + * Trigger a search in lunr and transform the result + * + * @param {String} query + * @return {Array} results + */ +function search(queryTerm) { + // Find the item in our index corresponding to the lunr one to have more info + return lunrIndex.search(queryTerm+"^100"+" "+queryTerm+"*^10"+" "+"*"+queryTerm+"^10"+" "+queryTerm+"~2^1").map(function(result) { + return pagesIndex.filter(function(page) { + return page.uri === result.ref; + })[0]; + }); +} + +// Let's get started +initLunr(); + +$( document ).ready(function() { + var searchList = new autoComplete({ + /* selector for the search box element */ + minChars: 1, + selector: $("#search-by").get(0), + /* source is the callback to perform the search */ + source: function(term, response) { + response(search(term)); + }, + /* renderItem displays individual search results */ + renderItem: function(item, search) { + search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); + return '
    ' + item.title.replace(re, "$1") + '
    '; + }, + /* onSelect callback fires when a search suggestion is chosen */ + onSelect: function(e, term, item) { + location.href = item.getAttribute('data-uri'); + } + }); +}); diff --git a/docs/content/fsdocs-tips.js b/docs/content/fsdocs-tips.js new file mode 100644 index 00000000..bcd04cb1 --- /dev/null +++ b/docs/content/fsdocs-tips.js @@ -0,0 +1,54 @@ +var currentTip = null; +var currentTipElement = null; + +function hideTip(evt, name, unique) { + var el = document.getElementById(name); + el.style.display = "none"; + currentTip = null; +} + +function findPos(obj) { + // no idea why, but it behaves differently in webbrowser component + if (window.location.search == "?inapp") + return [obj.offsetLeft + 10, obj.offsetTop + 30]; + + var curleft = 0; + var curtop = obj.offsetHeight; + while (obj) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + return [curleft, curtop]; +} + +function hideUsingEsc(e) { + if (!e) { e = event; } + hideTip(e, currentTipElement, currentTip); +} + +function showTip(evt, name, unique, owner) { + document.onkeydown = hideUsingEsc; + if (currentTip == unique) return; + currentTip = unique; + currentTipElement = name; + + var pos = findPos(owner ? owner : (evt.srcElement ? evt.srcElement : evt.target)); + var posx = pos[0]; + var posy = pos[1]; + + var el = document.getElementById(name); + var parent = (document.documentElement == null) ? document.body : document.documentElement; + el.style.position = "absolute"; + el.style.left = posx + "px"; + el.style.top = posy + "px"; + el.style.display = "block"; +} +function Clipboard_CopyTo(value) { + var tempInput = document.createElement("input"); + tempInput.value = value; + document.body.appendChild(tempInput); + tempInput.select(); + document.execCommand("copy"); + document.body.removeChild(tempInput); +} \ No newline at end of file diff --git a/docs/content/img/copy-md-hover.png b/docs/content/img/copy-md-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..b14e94129a15d575b23e6298d364c4272593c1a8 GIT binary patch literal 2886 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 literal 0 HcmV?d00001 diff --git a/docs/content/img/copy-md.png b/docs/content/img/copy-md.png new file mode 100644 index 0000000000000000000000000000000000000000..72de73815f7f422e1f359a1e8c10b5ea5680cbf1 GIT binary patch literal 3351 zcmb_edoo!c$iPrl~c*hp!5a{YEy*|xH4s3q9w!~|{f zfRaE%m45U4$n*U?t|50AX7Z|CyTn(v^UB~!rO^w@b?7)}q?zi6FZgC&MTOgSSQ?&nr+cvig#)-Q@`P)bU5JG`_R_PY0-`AtRcekyUiM^vZ9bi z@`5H58+_Hg!@r)g?~y;Wlz;WmtMT%lt68VIeAU##;omO(viqZ&RsS#QA>_t`raJES zU%REghK;Nz)~kw%e})Wwok<;0IYz*H3LW-~tSnTxsnwY`$K@^#3k+XZoI}mFh{5EV92!rqNNFbRVS#qoC#mJNYr`5?Bgn~x(jC7(hl&IU8TBgu#JI1&9EO)K#lnzuU!e40mI zMj$Xz`Wx!zkd;I3H-sda6CxlQOuIcSfw4dPK(Cn+2ZVadC*TO6Z+sI2nXR1^c(Qrt z*)6hD#Y{~o#U^Lg!X_{gy!<}HYEePa8O?g++Gv%$)338ebMSBLTegrrW8emC2iV*U zg=`N)>c>ir*O>;wP;Wbi|V_;;Wr0Pr7~hXLRpV2Vi=fm5R zsQ%M2o3nB9x<}GATO6EB4*JfHQw0Xsts-NFSAo%^<(vI-}p6agK8XcoLBaC-h?8+z zYTc{9(tQs^)@HO5Rtr3MIc?)wRKE+-O1NVo!NEp7y}jRcATm8ugA?b$n|ak>)`gCn zxAJ|U67I_BD$0ce?|FukIzL&NSC{ogzhfY5VdBzzkE+Jp9V1bIb0wKCSfJME1PJ4~ z9cN!Oej=P#o-nplaBCy|J)2FTP&Cr$iU|*js74ON52a~zR}mL(xLbQFl`9Xh*YC+} zC8IqBth@0{OjFZ!7|Z+m2BO)Y#bhBAN4>Hy z`oZvC&#L|=st$eHRcgzPLMCGnUv$R0YZuPV>Y_&hjW-^kX9_xf#$`4dOuHV2AM;4$ z+(|31o+=aIo)#1oobC0sa8~7b?YQ@x&}D%Dgjs&j=ZB9mVyI@?dMT^5?2;&cWa)hCrUfA>jK|66zgVVww0AucUiP_yKiq=Q{EGfqu0# z($Qy6mP^s3{mQ^AOB1I*^?WF(Z=mUD`o>zVKVh*sfbne!%Ix!^(P znc-Cz{Bhec4_=vEt+i@KTkb*csC{gNAAWUy!&XE@T>uPQp__aP z`=TWIo?o8wf$3=nrl86eyLrXD{qN8M;WZWhpht1u_{RE&y}a{rFOy>m(Y#$b zOlKTrlUAZd&(a~7*k-W3F(RhHrvcB4YR(MmzqlyNi!#iRWN~vA0qir((ueAXac4N0Kbp^j_Hni2C^vox6E0$;l-* zvMIkTrP0U! z{^h#h{S+>jyWBTm)tkXPr^Co12`&FFMYMyI@n}0nMq{cE#Spq9uu%Ze?)XX8gK_^WBn>HSHuyhji62 zA>v(Z%LUsoJyHQpskh~&N!7x$AyaDE*6~mIfPPDu%9XUb!EaxPQE~Om&Ajy&y2%o8 zIx)JUJo0~fuT^=EOW+TaFGIDZ8O2xndAh*$qN7x%0!Y|&y?od0p_1oF+ofu zND!Zpfni(GWP~d-L_jlG-9heF=xiwf6QLYd290zRTvj2I*}GtwD>kl26|Oqg9LM2f zAPih`iK*d#B87lF+&4g^hD#&0!`kyF4{kpPs!c1h7a*^RP-BjM!&^_7Oq5d;^?A>3 zpV_4-?`4n8KpsQZH-cpjNn^Xv%$>1;7d5;?f~*&dmaj?zlxq%L*kk?d`(Muf&F}w% zUP-n@DXH^g4=PFlprOFJxSFIN2tGmw@c`(;f#gXb3<5x`NxF)?5sTdm&cQH`VUOiR zBw?t|ogf~D`7g|MCy0For3CsNeIpK+A)^m~SQ+wE0YCzX2ovi4353%eIGKPkej`CY zhcB$U#@c#Ebu literal 0 HcmV?d00001 diff --git a/docs/content/img/copy-xml-hover.png b/docs/content/img/copy-xml-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..60fea167af78e3854feeae0f86d5b0291c473237 GIT binary patch literal 3192 zcmb_ecT^Kd9-f3yq=+t6L_rDC+u|W02m&hvDY__CFe>E`BW>vd0i-Nd5~KzKqM!yM zf)oQ15RpYGV&s582qjCe2`HiE;_kis^s_jcZ!neR7mW`0wD-}mb!J4+Ek89@Mm z2*S$ZX8<5v2mu0o-0E7;Q*W+u-`Cvy62jbEJ|M{7+xLza0Lt0X*~V5Krm~&a9Y#~H zz?S8w9+Vln9Fhq9qAFfy_Ef?(MEmuIP~mB~ie_fKUweC2=ktWLI^scMy!;kqYG&r~ z+)2fKEtOX(n-fiPt1HGU;}EkqJ*NqNvY&n#wNae9d8%18$>Xqv^qzpcvhK%x>|?lL z=8LGUtw^b9m*W0CgUCT#C%{`7eH5mg8ka8_eOK;G=UgksJOg$o3`)I{;+uCrUo*T@!{iPsdhgVal*BDIVBoCG?}mEC1Sy^Z~?+1_7wUw2xiC!s7guaOyG*Ri*e1bgk2A?zxUfe^otU^~~DX z_F;HMvj-A>G9^{uu$jR6m$EB<{`D4Ku5gJ1Qzv|l-jtsB(RxlV{#1#fa&={7s(|$? z!sy_Nht`U37|OqYj~={g5EVMhifD|Q?J@Q_-paxo%=XxF*YamVcMQePLc6VDAM^CP7q#^9;riIR9)JP4k;^-T)^I^mDN5m3>MJu!8!0`H!00CI(omui2 z1_>RVHHJd9W4Oj;{AMN}se!5qLSrmU!P0ID8Vs`!#~IXg8?wp8u|>sr6{;TfJq&60 zn%ZC5paU6>-MIcrT$byu_l3iY#DHZiUrVpZIlv0NDmhvLdUApGFv=d} zk}0AIV_#uy0zd&EQ(yoFq#tQWwqLQg+1;2~-cqagGPyhu2KpvpMUjyWU zB;;T7CDeGy=vEiS1j?|MskaAI6AVO6F~=MVUjVcNF#Y}yVc^hzfIr)irVY-pqkjDv zvArcnIkivjZr{3Cu}WP?Ld4k9Hp1+K^5PMBUzbOl7i-h(+zsc}i!icS&u42+n(&dq z`oVETo-J*|QfZ_mDS7O3{ou;gnTR}im{$18nO{)#o~avb%Y7I4#9Cen4ZU>kyEfg2hc}Ab)D1~0 z0oGgwB2>!e+ZJga-<(v;8Aps?)@LV^8n&1DS}T%=Y{{s2WN{9oQ||yoI-OV@gJaNm zv3Kp5PX-Jkeoe#TE@{*L=I&N(oS66Z1LCcYOuPa}NHr~D_$m5`AX=RQ;L)hbPn;yU zJ^u5@NDtbEQq{Unb@h3Ww169Uy>R>gPG^BK={!x2}z6F&}glKDrVFf?On;2^26>x(UCiYN5Zj#Q?6F6LgT zA7RmFBT`d2f2Im<>9z?)ihpu6u^o}q8^JL!+v$YNqkB78M5bE!*!RtvbmaXKMBA{J z4c;&@=uWGOfFNUGn%2yRj~wC>6F)9gnCN!v3RTb_GE^MGKb-N|zZWWB0| zK$xs#9!?Nf$kia;C&^Ml@Z|`_u7EvNl?N0)@ATLbT-L|S26Pe34sGT|L z!e{tUdcjO!2t{sJgdCPxu>TMB>xbSDG`PpVw3%25oyHB+51M$dUF&)yv_1##Ka1Sr z)WDT83igBD-S#L8Qs^?gpt@qjlA-tdKC!y>ba`de)%UTwt5pd%0~>WH9-hlW;A2b? zqeIMSC9hy|cCoo(`zoeCtALS1nzw&mw4aUe(Do*s>mGD$1~o0WmKUiDy<$ciyYRZ> z7gnv9^t0@d8TDBE$;auOK8}IA8|`MV5ZLK2xNg$kF>bgx>K1|uamUD|7ckfe%_C=S zySP%nq5Q6aVKNJ!UmL|&b(#@FI}!dtPKH$%<-Plc-OAb&l4HsFxr5==czBonT2n8A zI$*2kGyi#DGr68x%rGLj0d5qFb$fqZ+pYI9f{0u9ZL2O=3g&kTMQ!?UNB*{a9c%2v zz4h~W5u@U*Z~qeYHojg9z(sqRmgtKu zdLLJ-In@EJ{soiD6C`y`cGlpMbx`%7CQ#qGJg;Ilf@fOi|##* zRgL@^2ktGk-zG*>Ic1a!``c4$~Ea>^0}8 z)4$X)#G*{}1Lnx_CZ23_{Z+NsNte#-VYzQ)F~<@TC0Kr1^mtQWmt6MHk2t8!P&dNk zvi@>2myX_ic(9Xzunt`i!?cV{S%QOEWt<3ix9GZwl&D~gl4KvN=LlI14FcNMIGA)! z=opG>QfoP8?#~ zGeaKeG8^&HI+nD>cb``m$d!Hs|LV=KbfQGgeq3MUkS(WHVn4QQ;-y<<(^Kmi_n_H{ z-mee4BczZC$2dfXpijdvsCW^0}=1V;jIXmv{)8Fg@FBkt@!`g2|p38%? znZl0CZdfB*p!_n5+Sq!$Sa3J^SQfo#gzmJ~M(3=G6!w>>#|GYhzED9PRQW5|@BgLG zy1LGj`KiZ3D62Kn+R%R!VZP|BD@-_KR19cCrHRC9NfaN~(uF!VP);IKMsc9&U>my8 z0OEW+b@{X)GS`wbpr-^<(^0ly#!FltY7;$+&nqW`F&$`{9dADKQ*2;K$pfG-fovPi z1y%P{YiJl`0t#PQMg}Q>ht3u|19Q=Ua%24U63-&VxA$jvgQMkjpw7myQFkdMhP4+# zXJb8Y{K4bC)@P^RmR)lWp=g~7BxpH~u1ksLDX9UoHV}3XGCV8|@Af512+xk4>y{`- z1+53foX~_4O{~*$p~-4ekn{hW@&8)`z<~bggM?LBa~Sd#{5;Qvz=a!d5+o@i-R#zWa-5mnzC5kJ{k5Y3SB{{$;) ByA%Kb literal 0 HcmV?d00001 diff --git a/docs/content/img/copy-xml.png b/docs/content/img/copy-xml.png new file mode 100644 index 0000000000000000000000000000000000000000..e5606b907bc27d4e4df733971aa952a118f89a09 GIT binary patch literal 3486 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 literal 0 HcmV?d00001 diff --git a/docs/content/navbar-fixed-left.css b/docs/content/navbar-fixed-left.css new file mode 100644 index 00000000..28e4c574 --- /dev/null +++ b/docs/content/navbar-fixed-left.css @@ -0,0 +1,91 @@ +/* CSS for Bootstrap 5 Fixed Left Sidebar Navigation */ + + + +@media (min-width: 992px){ + + body { + padding-left: 300px; + padding-right: 60px; + } + + #fsdocs-logo { + width:140px; + height:140px; + margin:10px 0px 0px 0px; + border-style:none; + } + + + nav.navbar { + position: fixed; + left: 0; + width: 300px; + bottom: 0; + top: 0; + overflow-y: auto; + overflow-x: hidden; + display: block; + border-right: 1px solid #cecece; + } + + nav.navbar>.container { + flex-direction: column; + padding: 0; + } + + nav.navbar .navbar-nav { + flex-direction: column; + } + nav.navbar .navbar-collapse { + width: 100%; + } + + nav.navbar .navbar-nav { + width: 100%; + } + + nav.navbar .navbar-nav .dropdown-menu { + position: static; + display: block; + } + + nav.navbar .dropdown { + margin-bottom: 5px; + font-size: 14px; + } + + nav.navbar .dropdown-item { + white-space: normal; + font-size: 14px; + vertical-align: middle; + } + + nav.navbar .dropdown-item img { + margin-right: 5px; + } + + nav.navbar .dropdown-toggle { + cursor: default; + } + + nav.navbar .dropdown-menu { + border-radius: 0; + border-left: 0; + border-right: 0; + } + + nav.navbar .dropdown-toggle:not(#bd-theme)::after { + display: none; + } + + .dropdown-menu[data-bs-popper] { + top: auto; + left: auto; + margin-top: auto; + } + + .nav-link:focus, .nav-link:hover { + color: auto; + } +} \ No newline at end of file diff --git a/docs/content/navbar-fixed-right.css b/docs/content/navbar-fixed-right.css new file mode 100644 index 00000000..ad6cef83 --- /dev/null +++ b/docs/content/navbar-fixed-right.css @@ -0,0 +1,78 @@ +body { + padding-top: 90px; +} + +@media (min-width: 768px) { + body { + padding-top: 0; + } +} + +@media (min-width: 768px) { + body { + margin-right: 252px; + } +} + +.navbar { + overflow-y: auto; + overflow-x: hidden; + box-shadow: none; +} +.navbar.fixed-right { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1030; +} +.navbar-nav .nav-link { + padding-top: 0.3rem; + padding-bottom: 0.3rem; +} +@media (min-width: 768px) { + .navbar.fixed-right { + bottom: 0; + width: 252px; + flex-flow: column nowrap; + align-items: flex-start; + } + + .navbar.fixed-right .navbar-collapse { + flex-grow: 0; + flex-direction: column; + width: 100%; + } + + .navbar.fixed-right .navbar-collapse .navbar-nav { + flex-direction: column; + width: 100%; + } + + .navbar.fixed-right .navbar-collapse .navbar-nav .nav-item { + width: 100%; + } + + .navbar.fixed-right .navbar-collapse .navbar-nav .nav-item .dropdown-menu { + top: 0; + } +} + +@media (min-width: 768px) { + .navbar.fixed-right { + left: auto; + } + + .navbar.fixed-right .navbar-nav .nav-item .dropdown-toggle:after { + border-top: 0.3em solid transparent; + border-left: none; + border-bottom: 0.3em solid transparent; + border-right: 0.3em solid; + vertical-align: baseline; + } + + .navbar.fixed-right .navbar-nav .nav-item .dropdown-menu { + left: auto; + right: 100%; + } +} diff --git "a/temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" b/docs/content/theme-toggle.js similarity index 100% rename from "temp/watch-docs/content/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" rename to docs/content/theme-toggle.js diff --git a/docs/coverage/ImageProcessing_Agents.html b/docs/coverage/ImageProcessing_Agents.html deleted file mode 100644 index 0715bc9a..00000000 --- a/docs/coverage/ImageProcessing_Agents.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -ImageProcessing.Agents - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - - -
    Class:ImageProcessing.Agents
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Agents.fs
    Covered lines:0
    Uncovered lines:71
    Coverable lines:71
    Total lines:132
    Line coverage:0% (0 of 71)
    Covered branches:0
    Total branches:16
    Branch coverage:0% (0 of 16)
    Covered methods:0
    Total methods:23
    Method coverage:0% (0 of 23)
    -

    Metrics

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    listAllFiles(...)0%2100%
    outFile(...)0%2100%
    imgSaver(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%30530%
    imgProcessor(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%30530%
    msgLogger()0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%20430%
    superAgent(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%2100%
    Invoke(...)0%20430%
    superImageProcessing(...)0%90940%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Agents.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1/// <summary>
     2/// Module with implementation of agents for image processing
     3/// </summary>
     4module ImageProcessing.Agents
     5
     6open Types
     7open MyImage
     8
     9/// <summary>
     10/// List of all files in directory
     11/// </summary>
     12let listAllFiles dir =
     13    let files = System.IO.Directory.GetFiles dir
     014    List.ofArray files
     15
     16/// <summary>
     17/// Creation of path to save the image
     18/// </summary>
     019let outFile (imgName: string) (outDir: string) = System.IO.Path.Combine(outDir, imgName)
     20
     21/// <summary>
     22/// Agent for saving images
     23/// </summary>
     24/// <param name="outDir">Path to save</param>
     25/// <param name="logger">Logging Agent</param>
     26let imgSaver outDir (logger: MailboxProcessor<_>) =
     27
     028    MailboxProcessor.Start(fun inbox ->
     029        async {
     030            while true do
     031                let! msg = inbox.Receive()
     032
     033                match msg with
     034                | EOS ch ->
     035                    logger.Post(Message "Image saver is finished!")
     036                    ch.Reply()
     037                | Img img ->
     038                    logger.Post(Message $"Save: %A{img.Name}")
     039                    saveImage img (outFile img.Name outDir)
     040                | _ -> failwith "imgSaver received the wrong message"
     041        })
     42
     43/// <summary>
     44/// Agent for image processing
     45/// </summary>
     46/// <param name="filter">Filter for application</param>
     47/// <param name="imgSaver">Saving Agent</param>
     48/// <param name="logger">Logging Agent</param>
     49let imgProcessor filter (imgSaver: MailboxProcessor<_>) (logger: MailboxProcessor<_>) =
     50
     051    MailboxProcessor.Start(fun inbox ->
     052        async {
     053            while true do
     054                let! msg = inbox.Receive()
     055
     056                match msg with
     057                | EOS ch ->
     058                    logger.Post(Message "Image processor is ready to finish!")
     059                    imgSaver.PostAndReply Msg.EOS
     060                    logger.Post(Message "Image processor is finished!")
     061                    ch.Reply()
     062                | Img img ->
     063                    logger.Post(Message $"Filter: %A{img.Name}")
     064                    let filtered = filter img
     065                    imgSaver.Post(Img filtered)
     066                | _ -> failwith "imgProcessor received the wrong message"
     067        })
     68
     69/// <summary>
     70/// Agent for logging
     71/// </summary>
     72let msgLogger () =
     073    MailboxProcessor.Start(fun inbox ->
     074        async {
     075            while true do
     076                let! msg = inbox.Receive()
     077
     078                match msg with
     079                | EOS ch ->
     080                    printfn "msgLogger is finished!"
     081                    ch.Reply()
     082                | Message s -> printfn $"%s{s}"
     083                | _ -> failwith "msgLogger received the wrong message"
     084        })
     85
     86/// <summary>
     87/// Agent with the ability to process and save the image
     88/// </summary>
     89/// <param name="outputDir">Path to save</param>
     90/// <param name="conversion">Image transformation</param>
     91/// <param name="logger">Logging Agent</param>
     92let superAgent outputDir conversion (logger: MailboxProcessor<_>) =
     93
     094    MailboxProcessor.Start(fun inbox ->
     095        async {
     096            while true do
     097                let! msg = inbox.Receive()
     098
     099                match msg with
     0100                | EOS ch ->
     0101                    logger.Post(Message "SuperAgent is finished!")
     0102                    ch.Reply()
     0103                | Path inputPath ->
     0104                    let image = loadAsImage inputPath
     0105                    logger.Post(Message $"Filter: %A{image.Name}")
     0106                    let filtered = conversion image
     0107                    saveImage filtered (outFile image.Name outputDir)
     0108                    logger.Post(Message $"Save: %A{image.Name}")
     0109                | _ -> failwith "superAgent received the wrong message"
     0110        })
     111
     112/// <summary>
     113/// Image processing using superAgents
     114/// </summary>
     115/// <param name="inputDir">Path to image or images</param>
     116/// <param name="outputDir">Path to save</param>
     117/// <param name="conversion">Image transformation</param>
     118/// <param name="countOfAgents">Count of superAgents to processing</param>
     119let superImageProcessing inputDir outputDir conversion countOfAgents =
     0120    let filesToProcess = listAllFiles inputDir
     0121    let logger = msgLogger ()
     122
     0123    let superAgents =
     0124        Array.init countOfAgents (fun _ -> superAgent outputDir conversion logger)
     125
     0126    for file in filesToProcess do
     0127        (superAgents |> Array.minBy (fun p -> p.CurrentQueueLength)).Post(Path file)
     128
     0129    for agent in superAgents do
     0130        agent.PostAndReply EOS
     131
     0132    logger.PostAndReply EOS
    -
    -
    -
    -

    Methods/Properties

    -listAllFiles(System.String)
    -outFile(System.String,System.String)
    -imgSaver(System.String,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(ImageProcessing.Types/Msg)
    -imgProcessor(Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(ImageProcessing.Types/Msg)
    -msgLogger()
    -Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(ImageProcessing.Types/Msg)
    -superAgent(System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Control.FSharpMailboxProcessor`1<ImageProcessing.Types/Msg>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -Invoke(ImageProcessing.Types/Msg)
    -superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2<ImageProcessing.MyImage/MyImage,ImageProcessing.MyImage/MyImage>,System.Int32)
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Arguments.html b/docs/coverage/ImageProcessing_Arguments.html deleted file mode 100644 index 72bbb075..00000000 --- a/docs/coverage/ImageProcessing_Arguments.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -ImageProcessing.Arguments - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - - -
    Class:ImageProcessing.Arguments
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Arguments.fs
    Covered lines:22
    Uncovered lines:16
    Coverable lines:38
    Total lines:74
    Line coverage:57.8% (22 of 38)
    Covered branches:20
    Total branches:30
    Branch coverage:66.6% (20 of 30)
    Covered methods:2
    Total methods:8
    Method coverage:25% (2 of 8)
    -

    Metrics

    - - - - - - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    first(...)0%2100%
    second(...)0%2100%
    third(...)0%2100%
    fourth(...)0%2100%
    modificationParser(...)100%101010100%
    modificationGpuParser(...)100%101010100%
    deviceParser(...)0%20440%
    Argu.IArgParserTemplate.get_Usage()0%42660%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Arguments.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1/// <summary>
     2/// Module with implementation of work via console commands
     3/// </summary>
     4module ImageProcessing.Arguments
     5
     6open Argu
     7open Kernels
     8open Types
     9open Brahma.FSharp
     10
     011let first (x, _, _, _) = x
     012let second (_, x, _, _) = x
     013let third (_, _, x, _) = x
     014let fourth (_, _, _, x) = x
     15
     16/// <summary>
     17/// Parsing of CPU modification
     18/// </summary>
     19let modificationParser modification =
     14820    match modification with
     921    | Gauss5x5 -> CpuProcessing.applyFilter gaussianBlurKernel
     1022    | Gauss7x7 -> CpuProcessing.applyFilter gaussianBlur7x7Kernel
     923    | Edges -> CpuProcessing.applyFilter edgesKernel
     624    | Sharpen -> CpuProcessing.applyFilter sharpenKernel
     925    | Emboss -> CpuProcessing.applyFilter embossKernel
     3026    | ClockwiseRotation -> CpuProcessing.rotate Right
     2227    | CounterClockwiseRotation -> CpuProcessing.rotate Left
     2228    | MirrorVertical -> CpuProcessing.mirror Vertical
     2129    | MirrorHorizontal -> CpuProcessing.mirror Horizontal
     1030    | FishEye -> CpuProcessing.fishEye
     31
     32/// <summary>
     33/// Parsing of GPU modification
     34/// </summary>
     35let modificationGpuParser modification cortege =
     11136    match modification with
     1037    | Gauss5x5 -> GpuProcessing.applyFilter gaussianBlurKernel (first cortege)
     1038    | Gauss7x7 -> GpuProcessing.applyFilter gaussianBlur7x7Kernel (first cortege)
     1239    | Edges -> GpuProcessing.applyFilter edgesKernel (first cortege)
     940    | Sharpen -> GpuProcessing.applyFilter sharpenKernel (first cortege)
     841    | Emboss -> GpuProcessing.applyFilter embossKernel (first cortege)
     1842    | ClockwiseRotation -> GpuProcessing.rotate Right (second cortege)
     1143    | CounterClockwiseRotation -> GpuProcessing.rotate Left (second cortege)
     944    | MirrorVertical -> GpuProcessing.mirror Vertical (third cortege)
     1045    | MirrorHorizontal -> GpuProcessing.mirror Horizontal (third cortege)
     1446    | FishEye -> GpuProcessing.fishEye (fourth cortege)
     47
     48/// <summary>
     49/// Parsing of device
     50/// </summary>
     51let deviceParser device =
     052    match device with
     053    | AnyGpu -> Platform.Any
     054    | Nvidia -> Platform.Nvidia
     055    | Amd -> Platform.Amd
     056    | Intel -> Platform.Intel
     57
     58type CliArguments =
     59    | [<Mandatory; AltCommandLine("-i")>] InputPath of inputPath: string
     60    | [<Mandatory; AltCommandLine("-o")>] OutputPath of outputPath: string
     61    | [<AltCommandLine("-ag"); Last>] Agents
     62    | [<AltCommandLine("-sag"); Last>] SuperAgents of count: int
     63    | [<AltCommandLine("-mod")>] Modifications of modifications: List<Modifications>
     64    | [<AltCommandLine("-gpu")>] GpGpu of device: Devices
     65
     66    interface IArgParserTemplate with
     67        member s.Usage =
     068            match s with
     069            | Agents -> "Apply modifications to an image using agents"
     070            | SuperAgents _ -> "Apply modifications to an image using super agents"
     071            | Modifications _ -> "Set of modifications to image or image array"
     072            | InputPath _ -> "Input directory or path to the image"
     073            | OutputPath _ -> "Output directory or path to saved image"
     074            | GpGpu _ -> "Processing on Gpu"
    -
    -
    -
    -

    Methods/Properties

    -first(a,b,c,d)
    -second(a,b,c,d)
    -third(a,b,c,d)
    -fourth(a,b,c,d)
    -modificationParser(ImageProcessing.Types/Modifications)
    -modificationGpuParser(ImageProcessing.Types/Modifications,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>)
    -deviceParser(ImageProcessing.Types/Devices)
    -Argu.IArgParserTemplate.get_Usage()
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_CpuProcessing.html b/docs/coverage/ImageProcessing_CpuProcessing.html deleted file mode 100644 index 0f180295..00000000 --- a/docs/coverage/ImageProcessing_CpuProcessing.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -ImageProcessing.CpuProcessing - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - - -
    Class:ImageProcessing.CpuProcessing
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuProcessing.fs
    Covered lines:40
    Uncovered lines:0
    Coverable lines:40
    Total lines:98
    Line coverage:100% (40 of 40)
    Covered branches:32
    Total branches:32
    Branch coverage:100% (32 of 32)
    Covered methods:8
    Total methods:8
    Method coverage:100% (8 of 8)
    -

    Metrics

    - - - - - - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    applyFilter(...)0%110100%
    processPixel@19(...)100%9964100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    rotate(...)100%334100%
    mirror(...)100%334100%
    fishEye(...)100%6632100%
    getFishCoordinates@77(...)100%222100%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\CpuProcessing.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1/// <summary>
     2/// Module with functions for image processing on the CPU
     3/// </summary>
     4module ImageProcessing.CpuProcessing
     5
     6open MyImage
     7open Types
     8
     9/// <summary>
     10/// Filter application
     11/// </summary>
     12/// <param name="filter">A two-dimensional array applied to an image as a filter</param>
     13/// <param name="image">Image with type MyImage</param>
     14/// <returns>Image with type MyImage</returns>
     15let applyFilter (filter: float32[][]) (img: MyImage) =
     4416    let filterD = (Array.length filter) / 2
     4417    let filter = Array.concat filter
     18
     19    let processPixel p =
     12173320        let pw = p % img.Width
     12173321        let ph = p / img.Width
     22
     23        let dataToHandle =
     101081124            [| for i in ph - filterD .. ph + filterD do
     724952025                   for j in pw - filterD .. pw + filterD do
     2451879726                       if i < 0 || i >= img.Height || j < 0 || j >= img.Width then
     14390427                           float32 img.Data[p]
     28                       else
     480358129                           float32 img.Data[i * img.Width + j] |]
     30
     506921831        Array.fold2 (fun s x y -> s + x * y) 0.0f filter dataToHandle
     32
     12177733    MyImage(Array.mapi (fun p _ -> byte (processPixel p)) img.Data, img.Width, img.Height, img.Name)
     34
     35/// <summary>
     36/// Rotate of image
     37/// </summary>
     38/// <param name="side">The side to which the image will be rotated</param>
     39/// <param name="image">Image with type MyImage</param>
     40/// <returns>Image with type MyImage</returns>
     41let rotate (side: Side) (image: MyImage) =
     45742    let res = Array.zeroCreate image.Data.Length
     43
     743750844    for p in 0 .. image.Data.Length - 1 do
     743659445        if side = Right then
     741055546            res[(p % image.Width) * image.Height + image.Height - 1 - p / image.Width] <- image.Data[p]
     47        else
     2603948            res[image.Height * (image.Width - 1 - p % image.Width) + p / image.Width] <- image.Data[p]
     49
     45750    MyImage(res, image.Height, image.Width, image.Name)
     51
     52/// <summary>
     53/// Image Reflection
     54/// </summary>
     55/// <param name="side">The side to which the image will be reflected</param>
     56/// <param name="image">Image with type MyImage</param>
     57/// <returns>Image with type MyImage</returns>
     58let mirror (side: MirrorDirection) (image: MyImage) =
     4359    let res = Array.zeroCreate image.Data.Length
     60
     4197361    for p in 0 .. image.Data.Length - 1 do
     4188762        if side = Vertical then
     2033363            res[p - p % image.Width + image.Width - 1 - p % image.Width] <- image.Data[p]
     64        else
     2155465            res[(image.Height - 1 - p / image.Width) * image.Width + p % image.Width] <- image.Data[p]
     66
     4367    MyImage(res, image.Width, image.Height, image.Name)
     68
     69/// <summary>
     70/// Applying "FishEye" to an image
     71/// </summary>
     72/// <param name="image">Image with type MyImage</param>
     73/// <returns>Image with type MyImage</returns>
     74let fishEye (image: MyImage) =
     1075    let distortion = 0.5
     76
     77    let getFishCoordinates (x: float) (y: float) (r: float) =
     735278        if 1.0 - distortion * r = 0 then
     1079            x, y
     80        else
     734281            x / (1.0 - distortion * r), y / (1.0 - distortion * r)
     82
     1083    let h = float image.Height
     1084    let w = float image.Width
     1085    let res = Array.zeroCreate image.Data.Length
     86
     737287    for p in 0 .. image.Data.Length - 1 do
     735288        let xnd = (2.0 * float (p / image.Width) - h) / h
     735289        let ynd = (2.0 * float (p % image.Width) - w) / w
     735290        let radius = xnd * xnd + ynd * ynd
     735291        let xdu, ydu = getFishCoordinates xnd ynd radius
     735292        let xu = int ((xdu + 1.0) * h) / 2
     735293        let yu = int ((ydu + 1.0) * w) / 2
     94
     2954795        if 0 <= xu && xu < int h && 0 <= yu && yu < int w then
     361996            res[p] <- image.Data[xu * image.Width + yu]
     97
     1098    MyImage(res, image.Width, image.Height, image.Name)
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_GpuKernels.html b/docs/coverage/ImageProcessing_GpuKernels.html deleted file mode 100644 index 7696ccb4..00000000 --- a/docs/coverage/ImageProcessing_GpuKernels.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - -ImageProcessing.GpuKernels - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - - -
    Class:ImageProcessing.GpuKernels
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuKernels.fs
    Covered lines:95
    Uncovered lines:0
    Coverable lines:95
    Total lines:175
    Line coverage:100% (95 of 95)
    Covered branches:4
    Total branches:4
    Branch coverage:100% (4 of 4)
    Covered methods:12
    Total methods:12
    Method coverage:100% (12 of 12)
    -

    Metrics

    - - - - - - - - - - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    applyFilterKernel(...)0%110100%
    applyFilterProcessor(...)0%110100%
    Invoke(...)0%110100%
    rotateKernel(...)0%110100%
    rotateKernelProcessor(...)100%222100%
    Invoke(...)0%110100%
    mirrorKernel(...)0%110100%
    mirrorKernelProcessor(...)100%222100%
    Invoke(...)0%110100%
    fishEyeKernel(...)0%110100%
    fishEyeKernelProcessor(...)0%110100%
    Invoke(...)0%110100%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuKernels.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1/// <summary>
     2/// Module with kernels for image processing on the GPU
     3/// </summary>
     4module ImageProcessing.GpuKernels
     5
     6open Types
     7open Brahma.FSharp
     8
     9/// <summary>
     10/// Compilation of kernel to apply filter to the image
     11/// </summary>
     12let applyFilterKernel (clContext: ClContext) =
     13
     114    let kernel =
     115        <@
     116            fun (r: Range1D) (img: ClArray<_>) imgW imgH (filter: ClArray<_>) filterD (result: ClArray<_>) ->
     117                let p = r.GlobalID0
     118                let pw = p % imgW
     119                let ph = p / imgW
     120                let mutable res = 0.0f
     121
     122                for i in ph - filterD .. ph + filterD do
     123                    for j in pw - filterD .. pw + filterD do
     124                        let mutable d = 0uy
     125
     126                        if i < 0 || i >= imgH || j < 0 || j >= imgW then
     127                            d <- img[p]
     128                        else
     129                            d <- img[i * imgW + j]
     130
     131                        let f = filter[(i - ph + filterD) * (2 * filterD + 1) + (j - pw + filterD)]
     132                        res <- res + (float32 d) * f
     133
     134                result[p] <- byte (int res)
     135        @>
     36
     137    clContext.Compile kernel
     38
     39/// <summary>
     40/// Asynchronous application of the filter kernel to the image
     41/// </summary>
     42let applyFilterProcessor
     43    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit>)
     44    localWorkSize
     45    =
     46
     47    fun (commandQueue: MailboxProcessor<_>) (filter: ClArray<float32>) filterD (img: ClArray<byte>) imgH imgW (result: C
     5048        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
     5049        let kernel = kernel.GetKernel()
     10050        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH filter filterD result))
     5051        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
     5052        result
     53
     54/// <summary>
     55/// Compilation of kernel to rotate the image
     56/// </summary>
     57let rotateKernel (clContext: ClContext) =
     58
     159    let kernel =
     160        <@
     161            fun (r: Range1D) (img: ClArray<_>) imgW imgH (i: int) (result: ClArray<_>) ->
     162                let p = r.GlobalID0
     163
     164                if p / imgW < imgH then
     165                    if i = 1 then
     166                        result[(p % imgW) * imgH + imgH - 1 - p / imgW] <- img[p]
     167                    else
     168                        result[imgH * (imgW - 1 - p % imgW) + p / imgW] <- img[p]
     169        @>
     70
     71
     172    clContext.Compile kernel
     73
     74/// <summary>
     75/// Asynchronous application of the rotation kernel to the image
     76/// </summary>
     77let rotateKernelProcessor
     78    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit>)
     79    localWorkSize
     80    side
     81    =
     82
     83    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
     43484        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
     43485        let kernel = kernel.GetKernel()
     86886        let i = if side = Right then 1 else 0
     86887        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH i result))
     43488        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
     43489        result
     90
     91/// <summary>
     92/// Compilation of kernel to reflect the image
     93/// </summary>
     94let mirrorKernel (clContext: ClContext) =
     95
     196    let kernel =
     197        <@
     198            fun (r: Range1D) (img: ClArray<_>) imgW imgH i (result: ClArray<_>) ->
     199                let p = r.GlobalID0
     1100
     1101                if p / imgW < imgH then
     1102                    if i = 1 then
     1103                        result[p - p % imgW + imgW - 1 - p % imgW] <- img[p]
     1104                    else
     1105                        result[(imgH - 1 - p / imgW) * imgW + p % imgW] <- img[p]
     1106        @>
     107
     108
     1109    clContext.Compile kernel
     110
     111/// <summary>
     112/// Asynchronous application of the reflection kernel to the image
     113/// </summary>
     114let mirrorKernelProcessor
     115    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit>)
     116    localWorkSize
     117    side
     118    =
     119
     120    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
     19121        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
     19122        let kernel = kernel.GetKernel()
     38123        let i = if side = Vertical then 1 else 0
     38124        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH i result))
     19125        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
     19126        result
     127
     128/// <summary>
     129/// Compilation of kernel to apply FishEye to the image
     130/// </summary>
     131let fishEyeKernel (clContext: ClContext) =
     132
     1133    let kernel =
     1134        <@
     1135            fun (r: Range1D) (img: ClArray<_>) imgW imgH (result: ClArray<_>) ->
     1136                let distortion = 0.5f
     1137                let p = r.GlobalID0
     1138
     1139                if p / imgW < imgH then
     1140                    let h = float32 imgH
     1141                    let w = float32 imgW
     1142                    let xnd = (2.0f * float32 (p / imgW) - h) / h
     1143                    let ynd = (2.0f * float32 (p % imgW) - w) / w
     1144                    let radius = xnd * xnd + ynd * ynd
     1145
     1146                    let xdu, ydu =
     1147                        if 1.0f - distortion * radius = 0.0f then
     1148                            xnd, ynd
     1149                        else
     1150                            xnd / (1.0f - distortion * radius), ynd / (1.0f - distortion * radius)
     1151
     1152                    let xu = int ((xdu + 1.0f) * h) / 2
     1153                    let yu = int ((ydu + 1.0f) * w) / 2
     1154
     1155                    if 0 <= xu && xu < int h && 0 <= yu && yu < int w then
     1156                        result[p] <- img[xu * imgW + yu]
     1157        @>
     158
     159
     1160    clContext.Compile kernel
     161
     162/// <summary>
     163/// Asynchronous application of the fisheye kernel to the image
     164/// </summary>
     165let fishEyeKernelProcessor
     166    (kernel: ClProgram<Range1D, ClArray<byte> -> int -> int -> ClArray<byte> -> unit>)
     167    localWorkSize
     168    =
     169
     170    fun (commandQueue: MailboxProcessor<_>) (img: ClArray<byte>) imgH imgW (result: ClArray<_>) ->
     14171        let ndRange = Range1D.CreateValid(imgH * imgW, localWorkSize)
     14172        let kernel = kernel.GetKernel()
     28173        commandQueue.Post(Msg.MsgSetArguments(fun () -> kernel.KernelFunc ndRange img imgW imgH result))
     14174        commandQueue.Post(Msg.CreateRunMsg<_, _> kernel)
     14175        result
    -
    -
    -
    -

    Methods/Properties

    -applyFilterKernel(Brahma.FSharp.ClContext)
    -applyFilterProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Single>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Single>,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -rotateKernel(Brahma.FSharp.ClContext)
    -rotateKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,ImageProcessing.Types/Side,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -mirrorKernel(Brahma.FSharp.ClContext)
    -mirrorKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>>,System.Int32,ImageProcessing.Types/MirrorDirection,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -fishEyeKernel(Brahma.FSharp.ClContext)
    -fishEyeKernelProcessor(Brahma.FSharp.ClProgram`2<Brahma.FSharp.Range1D,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<System.Int32,Microsoft.FSharp.Core.FSharpFunc`2<Brahma.FSharp.ClArray`1<System.Byte>,Microsoft.FSharp.Core.Unit>>>>>,System.Int32,Microsoft.FSharp.Control.FSharpMailboxProcessor`1<Brahma.FSharp.Msg>,Brahma.FSharp.ClArray`1<System.Byte>,System.Int32,System.Int32,Brahma.FSharp.ClArray`1<System.Byte>)
    -Invoke(Microsoft.FSharp.Core.Unit)
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_GpuProcessing.html b/docs/coverage/ImageProcessing_GpuProcessing.html deleted file mode 100644 index 9d9a4550..00000000 --- a/docs/coverage/ImageProcessing_GpuProcessing.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - -ImageProcessing.GpuProcessing - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - -
    Class:ImageProcessing.GpuProcessing
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuProcessing.fs
    Covered lines:64
    Uncovered lines:0
    Coverable lines:64
    Total lines:153
    Line coverage:100% (64 of 64)
    Covered branches:0
    Total branches:0
    Covered methods:8
    Total methods:8
    Method coverage:100% (8 of 8)
    -

    Metrics

    - - - - - - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    Invoke(...)0%110100%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\GpuProcessing.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1/// <summary>
     2/// Module with functions for image processing on the GPU
     3/// </summary>
     4module ImageProcessing.GpuProcessing
     5
     6open Brahma.FSharp
     7open MyImage
     8open GpuKernels
     9
     10/// <summary>
     11/// Filter application
     12/// </summary>
     13/// <param name="filter">A two-dimensional array applied to an image as a filter</param>
     14/// <param name="kernel">Compiled kernel for filter application</param>
     15/// <param name="clContext">Abstraction over OpenCL context</param>
     16/// <param name="localWorkSize">Local workgroup size</param>
     17/// <param name="queue">Command queue capable of handling messages of type Msg</param>
     18/// <param name="image">Image with type MyImage</param>
     19/// <returns>Image with type MyImage</returns>
     20let applyFilter (filter: float32[][]) kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
     21    let kernel = applyFilterProcessor kernel localWorkSize
     22
     23    fun (img: MyImage) ->
     24
     5025        let mutable input =
     5026            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
     27
     5028        let mutable output =
     5029            clContext.CreateClArray(
     5030                img.Data.Length,
     5031                HostAccessMode.NotAccessible,
     5032                allocationMode = AllocationMode.Default
     5033            )
     34
     5035        let filterD = (Array.length filter) / 2
     5036        let filter = Array.concat filter
     37
     5038        let clFilter =
     5039            clContext.CreateClArray<_>(filter, HostAccessMode.NotAccessible, DeviceAccessMode.ReadOnly)
     40
     5041        let result = Array.zeroCreate (img.Height * img.Width)
     42
     5043        let result =
     5044            queue.PostAndReply(fun ch ->
     10045                Msg.CreateToHostMsg(kernel queue clFilter filterD input img.Height img.Width output, result, ch))
     46
     5047        queue.Post(Msg.CreateFreeMsg clFilter)
     5048        queue.Post(Msg.CreateFreeMsg input)
     5049        queue.Post(Msg.CreateFreeMsg output)
     5050        MyImage(result, img.Width, img.Height, img.Name)
     51
     52/// <summary>
     53/// Rotate of image
     54/// </summary>
     55/// <param name="side">The side to which the image will be rotated</param>
     56/// <param name="kernel">Compiled kernel for rotation application</param>
     57/// <param name="clContext">Abstraction over OpenCL context</param>
     58/// <param name="localWorkSize">Local workgroup size</param>
     59/// <param name="queue">Command queue capable of handling messages of type Msg</param>
     60/// <param name="image">Image with type MyImage</param>
     61/// <returns>Image with type MyImage</returns>
     62let rotate side kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
     63    let kernel = rotateKernelProcessor kernel localWorkSize
     64
     65    fun (img: MyImage) ->
     66
     43467        let mutable input =
     43468            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
     69
     43470        let mutable output =
     43471            clContext.CreateClArray(
     43472                img.Data.Length,
     43473                HostAccessMode.NotAccessible,
     43474                allocationMode = AllocationMode.Default
     43475            )
     76
     43477        let result = Array.zeroCreate img.Data.Length
     78
     43479        let result =
     43480            queue.PostAndReply(fun ch ->
     86881                Msg.CreateToHostMsg(kernel side queue input img.Height img.Width output, result, ch))
     82
     43483        queue.Post(Msg.CreateFreeMsg input)
     43484        queue.Post(Msg.CreateFreeMsg output)
     43485        MyImage(result, img.Height, img.Width, img.Name)
     86
     87/// <summary>
     88/// Reflection of image
     89/// </summary>
     90/// <param name="side">The side to which the image will be reflected</param>
     91/// <param name="kernel">Compiled kernel for reflection application</param>
     92/// <param name="clContext">Abstraction over OpenCL context</param>
     93/// <param name="localWorkSize">Local workgroup size</param>
     94/// <param name="queue">Command queue capable of handling messages of type Msg</param>
     95/// <param name="image">Image with type MyImage</param>
     96/// <returns>Image with type MyImage</returns>
     97let mirror side kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
     98    let kernel = mirrorKernelProcessor kernel localWorkSize
     99
     100    fun (img: MyImage) ->
     101
     19102        let mutable input =
     19103            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
     104
     19105        let mutable output =
     19106            clContext.CreateClArray(
     19107                img.Data.Length,
     19108                HostAccessMode.NotAccessible,
     19109                allocationMode = AllocationMode.Default
     19110            )
     111
     19112        let result = Array.zeroCreate img.Data.Length
     113
     19114        let result =
     19115            queue.PostAndReply(fun ch ->
     38116                Msg.CreateToHostMsg(kernel side queue input img.Height img.Width output, result, ch))
     117
     19118        queue.Post(Msg.CreateFreeMsg input)
     19119        queue.Post(Msg.CreateFreeMsg output)
     19120        MyImage(result, img.Width, img.Height, img.Name)
     121
     122/// <summary>
     123/// Applying fisheye filter to the image
     124/// </summary>
     125/// <param name="kernel">Compiled kernel for fisheye filter application</param>
     126/// <param name="clContext">Abstraction over OpenCL context</param>
     127/// <param name="localWorkSize">Local workgroup size</param>
     128/// <param name="queue">Command queue capable of handling messages of type Msg</param>
     129/// <param name="image">Image with type MyImage</param>
     130/// <returns>Image with type MyImage</returns>
     131let fishEye kernel (clContext: ClContext) localWorkSize (queue: MailboxProcessor<Msg>) =
     132    let kernel = fishEyeKernelProcessor kernel localWorkSize
     133
     134    fun (img: MyImage) ->
     135
     14136        let mutable input =
     14137            clContext.CreateClArray<_>(img.Data, HostAccessMode.NotAccessible)
     138
     14139        let mutable output =
     14140            clContext.CreateClArray(
     14141                img.Data.Length,
     14142                HostAccessMode.NotAccessible,
     14143                allocationMode = AllocationMode.Default
     14144            )
     145
     14146        let result = Array.zeroCreate img.Data.Length
     147
     14148        let result =
     28149            queue.PostAndReply(fun ch -> Msg.CreateToHostMsg(kernel queue input img.Height img.Width output, result, ch)
     150
     14151        queue.Post(Msg.CreateFreeMsg input)
     14152        queue.Post(Msg.CreateFreeMsg output)
     14153        MyImage(result, img.Width, img.Height, img.Name)
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_ImageArrayProcessing.html b/docs/coverage/ImageProcessing_ImageArrayProcessing.html deleted file mode 100644 index 4defcff5..00000000 --- a/docs/coverage/ImageProcessing_ImageArrayProcessing.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -ImageProcessing.ImageArrayProcessing - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - - -
    Class:ImageProcessing.ImageArrayProcessing
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageArrayProcessing.fs
    Covered lines:0
    Uncovered lines:13
    Coverable lines:13
    Total lines:57
    Line coverage:0% (0 of 13)
    Covered branches:0
    Total branches:6
    Branch coverage:0% (0 of 6)
    Covered methods:0
    Total methods:4
    Method coverage:0% (0 of 4)
    -

    Metrics

    - - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    listAllFiles(...)0%2100%
    Invoke(...)0%20400%
    arrayOfImagesProcessing(...)0%20480%
    helper@53(...)0%2100%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\ImageArrayProcessing.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1/// <summary>
     2/// Module with implementation of processing array of images
     3/// </summary>
     4module ImageProcessing.ImageArrayProcessing
     5
     6open MyImage
     7open Agents
     8open Types
     9
     10let extensions =
     11    [| ".png"
     12       ".jpeg"
     13       ".jpg"
     14       ".gif"
     15       ".jfif"
     16       ".webp"
     17       ".pbm"
     18       ".bmp"
     19       ".tga"
     20       ".tiff" |]
     21
     22/// <summary>
     23/// List of all files in directory with correct extensions
     24/// </summary>
     25let listAllFiles dir =
     026    let files = System.IO.Directory.GetFiles dir
     27
     28    let filtered =
     029        Array.filter (fun (x: string) -> Array.contains (System.IO.Path.GetExtension x) extensions) files
     30
     031    List.ofArray filtered
     32
     33/// <summary>
     34/// Processing array of images
     35/// </summary>
     36/// <param name="inputDir">Path to the folder with images</param>
     37/// <param name="outputDir">Path to save</param>
     38/// <param name="conversion">Image transformation</param>
     39/// <param name="agentMod">Processing with or without agent assistance</param>
     40let arrayOfImagesProcessing inputDir outputDir conversion agentMod =
     041    let list = listAllFiles inputDir
     42
     043    if agentMod = On then
     044        let logger = msgLogger ()
     045        let agentSaver = imgSaver outputDir logger
     046        let procAgent = imgProcessor conversion agentSaver logger
     47
     048        for file in list do
     049            procAgent.Post(Img(loadAsImage file))
     50
     051        procAgent.PostAndReply EOS
     52    else
     53        let helper filePath =
     54            let filtered = conversion (loadAsImage filePath)
     055            saveImage filtered (System.IO.Path.Combine(outputDir, System.IO.Path.GetFileName filePath))
     56
     057        List.iter helper list
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Kernels.html b/docs/coverage/ImageProcessing_Kernels.html deleted file mode 100644 index b0a4aa1e..00000000 --- a/docs/coverage/ImageProcessing_Kernels.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - -ImageProcessing.Kernels - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - -
    Class:ImageProcessing.Kernels
    Assembly:ImageProcessing
    File(s):
    Covered lines:0
    Uncovered lines:0
    Coverable lines:0
    Total lines:0
    Line coverage:100% (0 of 0)
    Covered branches:0
    Total branches:0
    Covered methods:0
    Total methods:0
    Method coverage:
    -

    File(s)

    -

    No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_Main.html b/docs/coverage/ImageProcessing_Main.html deleted file mode 100644 index 9eeb1962..00000000 --- a/docs/coverage/ImageProcessing_Main.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -ImageProcessing.Main - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - - -
    Class:ImageProcessing.Main
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Main.fs
    Covered lines:0
    Uncovered lines:30
    Coverable lines:30
    Total lines:59
    Line coverage:0% (0 of 30)
    Covered branches:0
    Total branches:12
    Branch coverage:0% (0 of 12)
    Covered methods:0
    Total methods:3
    Method coverage:0% (0 of 3)
    -

    Metrics

    - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    main(...)0%6220%
    main$cont@20(...)0%426320%
    Invoke(...)0%2100%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\Main.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1namespace ImageProcessing
     2
     3open Argu
     4open Arguments
     5open MyImage
     6open Types
     7open ImageArrayProcessing
     8open Agents
     9open Brahma.FSharp
     10
     11module Main =
     12
     13    [<EntryPoint>]
     14    let main (argv: string array) =
     015        let parser = ArgumentParser.Create<CliArguments>().ParseCommandLine argv
     016        let inputPath = parser.GetResult(InputPath)
     017        let outputPath = parser.GetResult(OutputPath)
     18
     019        if parser.Contains(Modifications) then
     020            let listOfFunc = parser.GetResult(Modifications)
     21
     22            let filters =
     023                if parser.Contains(GpGpu) then
     024                    let device = parser.GetResult(GpGpu) |> deviceParser
     25
     026                    if ClDevice.GetAvailableDevices(device) |> Seq.isEmpty then
     027                        printfn "GPU was not found, image processing will continue on the CPU"
     028                        listOfFunc |> List.map modificationParser
     29                    else
     030                        let clContext = ClContext(ClDevice.GetFirstAppropriateDevice(device))
     031                        let queue = clContext.QueueProvider.CreateQueue()
     032                        let filterKernel = GpuKernels.applyFilterKernel clContext
     033                        let rotateKernel = GpuKernels.rotateKernel clContext
     034                        let mirrorKernel = GpuKernels.mirrorKernel clContext
     035                        let fishKernel = GpuKernels.fishEyeKernel clContext
     036                        let kernelsCortege = (filterKernel, rotateKernel, mirrorKernel, fishKernel)
     037                        List.map (fun n -> modificationGpuParser n kernelsCortege clContext 64 queue) listOfFunc
     38                else
     039                    listOfFunc |> List.map modificationParser
     40
     041            let composition = List.reduce (>>) filters
     42
     043            match System.IO.Path.GetExtension inputPath with
     44            | "" ->
     045                if parser.Contains(Agents) then
     046                    arrayOfImagesProcessing inputPath outputPath composition On
     047                elif parser.Contains(SuperAgents) then
     48                    let countOfAgents = parser.GetResult(SuperAgents)
     049                    superImageProcessing inputPath outputPath composition countOfAgents
     50                else
     051                    arrayOfImagesProcessing inputPath outputPath composition Off
     52            | _ ->
     053                let image = loadAsImage inputPath
     54                let filtered = composition image
     055                saveImage filtered outputPath
     56        else
     057            printfn $"No modifications for image processing"
     58
     059        0
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/ImageProcessing_MyImage.html b/docs/coverage/ImageProcessing_MyImage.html deleted file mode 100644 index eeb52982..00000000 --- a/docs/coverage/ImageProcessing_MyImage.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -ImageProcessing.MyImage - Coverage Report - -
    -

    < Summary

    - ---- - - - - - - - - - - - - - - - -
    Class:ImageProcessing.MyImage
    Assembly:ImageProcessing
    File(s):C:\Users\Леонид\ImageProcessing\src\ImageProcessing\MyImage.fs
    Covered lines:8
    Uncovered lines:1
    Coverable lines:9
    Total lines:39
    Line coverage:88.8% (8 of 9)
    Covered branches:0
    Total branches:0
    Covered methods:2
    Total methods:3
    Method coverage:66.6% (2 of 3)
    -

    Metrics

    - - - - - - - -
    MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
    .ctor(...)0%110100%
    loadAsImage(...)0%110100%
    saveImage(...)0%2100%
    -

    File(s)

    -

    C:\Users\Леонид\ImageProcessing\src\ImageProcessing\MyImage.fs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #LineLine coverage
     1module ImageProcessing.MyImage
     2
     3open System
     4open SixLabors.ImageSharp
     5open SixLabors.ImageSharp.PixelFormats
     6
     7/// <summary>
     8/// Type to represent images
     9/// </summary>
     10[<Struct>]
     11type MyImage =
     12    val Data: array<byte>
     13    val Width: int
     14    val Height: int
     15    val Name: string
     16
     17    new(data, width, height, name) =
     148818        { Data = data
     148819          Width = width
     148820          Height = height
     148821          Name = name }
     22
     23/// <summary>
     24/// Load image as MyImage type
     25/// </summary>
     26let loadAsImage (file: string) =
     427    let img = Image.Load<L8> file
     28
     429    let buf = Array.zeroCreate<byte> (img.Width * img.Height)
     30
     431    img.CopyPixelDataTo(Span<byte> buf)
     432    MyImage(buf, img.Width, img.Height, System.IO.Path.GetFileName file)
     33
     34/// <summary>
     35/// Save MyImage in a specific directory
     36/// </summary>
     37let saveImage (image: MyImage) file =
     38    let img = Image.LoadPixelData<L8>(image.Data, image.Width, image.Height)
     039    img.Save file
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/class.js b/docs/coverage/class.js deleted file mode 100644 index dafc9a5c..00000000 --- a/docs/coverage/class.js +++ /dev/null @@ -1,221 +0,0 @@ -/* Chartist.js 0.11.0 - * Copyright © 2017 Gion Kunz - * Free to use under either the WTFPL license or the MIT license. - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT - */ - -!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { - var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { - "use strict"; function d(a) { - var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { - var i = c.serialMap(b.normalized.series, function () { - return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) - }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") - } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) - } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) - }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a -}); - -var i, l, selectedLine = null; - -/* Navigate to hash without browser history entry */ -var navigateToHash = function () { - if (window.history !== undefined && window.history.replaceState !== undefined) { - window.history.replaceState(undefined, undefined, this.getAttribute("href")); - } -}; - -var hashLinks = document.getElementsByClassName('navigatetohash'); -for (i = 0, l = hashLinks.length; i < l; i++) { - hashLinks[i].addEventListener('click', navigateToHash); -} - -/* Switch test method */ -var switchTestMethod = function () { - var method = this.getAttribute("value"); - console.log("Selected test method: " + method); - - var lines, i, l, coverageData, lineAnalysis, cells; - - lines = document.querySelectorAll('.lineAnalysis tr'); - - for (i = 1, l = lines.length; i < l; i++) { - coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); - lineAnalysis = coverageData[method]; - cells = lines[i].querySelectorAll('td'); - if (lineAnalysis === undefined) { - lineAnalysis = coverageData.AllTestMethods; - if (lineAnalysis.LVS !== 'gray') { - cells[0].setAttribute('class', 'red'); - cells[1].innerText = cells[1].textContent = '0'; - cells[4].setAttribute('class', 'lightred'); - } - } else { - cells[0].setAttribute('class', lineAnalysis.LVS); - cells[1].innerText = cells[1].textContent = lineAnalysis.VC; - cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); - } - } -}; - -var testMethods = document.getElementsByClassName('switchtestmethod'); -for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].addEventListener('change', switchTestMethod); -} - -/* Highlight test method by line */ -var toggleLine = function () { - if (selectedLine === this) { - selectedLine = null; - } else { - selectedLine = null; - unhighlightTestMethods(); - highlightTestMethods.call(this); - selectedLine = this; - } - -}; -var highlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var lineAnalysis; - var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); - var testMethods = document.getElementsByClassName('testmethod'); - - for (i = 0, l = testMethods.length; i < l; i++) { - lineAnalysis = coverageData[testMethods[i].id]; - if (lineAnalysis === undefined) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } else { - testMethods[i].className += ' light' + lineAnalysis.LVS; - } - } -}; -var unhighlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var testMethods = document.getElementsByClassName('testmethod'); - for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } -}; -var coverableLines = document.getElementsByClassName('coverableline'); -for (i = 0, l = coverableLines.length; i < l; i++) { - coverableLines[i].addEventListener('click', toggleLine); - coverableLines[i].addEventListener('mouseenter', highlightTestMethods); - coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); -} - -/* History charts */ -var renderChart = function (chart) { - // Remove current children (e.g. PNG placeholder) - while (chart.firstChild) { - chart.firstChild.remove(); - } - - var chartData = window[chart.getAttribute('data-data')]; - var options = { - axisY: { - type: undefined, - onlyInteger: true - }, - lineSmooth: false, - low: 0, - high: 100, - scaleMinSpace: 20, - onlyInteger: true, - fullWidth: true - }; - var lineChart = new Chartist.Line(chart, { - labels: [], - series: chartData.series - }, options); - - /* Zoom */ - var zoomButtonDiv = document.createElement("div"); - zoomButtonDiv.className = "toggleZoom"; - var zoomButtonLink = document.createElement("a"); - zoomButtonLink.setAttribute("href", ""); - var zoomButtonText = document.createElement("i"); - zoomButtonText.className = "icon-search-plus"; - - zoomButtonLink.appendChild(zoomButtonText); - zoomButtonDiv.appendChild(zoomButtonLink); - - chart.appendChild(zoomButtonDiv); - - zoomButtonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - if (options.axisY.type === undefined) { - options.axisY.type = Chartist.AutoScaleAxis; - zoomButtonText.className = "icon-search-minus"; - } else { - options.axisY.type = undefined; - zoomButtonText.className = "icon-search-plus"; - } - - lineChart.update(null, options); - }); - - var tooltip = document.createElement("div"); - tooltip.className = "tooltip"; - - chart.appendChild(tooltip); - - /* Tooltips */ - var showToolTip = function () { - var point = this; - var index = [].slice.call(chart.getElementsByClassName('ct-point')).indexOf(point); - - tooltip.innerHTML = chartData.tooltips[index % chartData.tooltips.length]; - tooltip.style.display = 'block'; - }; - - var moveToolTip = function (event) { - var box = chart.getBoundingClientRect(); - var left = event.pageX - box.left - window.pageXOffset; - var top = event.pageY - box.top - window.pageYOffset; - - left = left + 20; - top = top - tooltip.offsetHeight / 2; - - if (left + tooltip.offsetWidth > box.width) { - left -= tooltip.offsetWidth + 40; - } - - if (top < 0) { - top = 0; - } - - if (top + tooltip.offsetHeight > box.height) { - top = box.height - tooltip.offsetHeight; - } - - tooltip.style.left = left + 'px'; - tooltip.style.top = top + 'px'; - }; - - var hideToolTip = function () { - tooltip.style.display = 'none'; - }; - chart.addEventListener('mousemove', moveToolTip); - - lineChart.on('created', function () { - var chartPoints = chart.getElementsByClassName('ct-point'); - for (i = 0, l = chartPoints.length; i < l; i++) { - chartPoints[i].addEventListener('mousemove', showToolTip); - chartPoints[i].addEventListener('mouseout', hideToolTip); - } - }); -}; - -var charts = document.getElementsByClassName('historychart'); -for (i = 0, l = charts.length; i < l; i++) { - renderChart(charts[i]); -} \ No newline at end of file diff --git a/docs/coverage/icon_cube.svg b/docs/coverage/icon_cube.svg deleted file mode 100644 index 3302443c..00000000 --- a/docs/coverage/icon_cube.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_cube_dark.svg b/docs/coverage/icon_cube_dark.svg deleted file mode 100644 index 3e7f0fa8..00000000 --- a/docs/coverage/icon_cube_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_down-dir_active.svg b/docs/coverage/icon_down-dir_active.svg deleted file mode 100644 index d11cf041..00000000 --- a/docs/coverage/icon_down-dir_active.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_down-dir_active_dark.svg b/docs/coverage/icon_down-dir_active_dark.svg deleted file mode 100644 index fa34aeb3..00000000 --- a/docs/coverage/icon_down-dir_active_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_fork.svg b/docs/coverage/icon_fork.svg deleted file mode 100644 index f0148b3a..00000000 --- a/docs/coverage/icon_fork.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_fork_dark.svg b/docs/coverage/icon_fork_dark.svg deleted file mode 100644 index 11930c9b..00000000 --- a/docs/coverage/icon_fork_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_info-circled.svg b/docs/coverage/icon_info-circled.svg deleted file mode 100644 index 252166bb..00000000 --- a/docs/coverage/icon_info-circled.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_info-circled_dark.svg b/docs/coverage/icon_info-circled_dark.svg deleted file mode 100644 index 252166bb..00000000 --- a/docs/coverage/icon_info-circled_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_minus.svg b/docs/coverage/icon_minus.svg deleted file mode 100644 index 3c30c365..00000000 --- a/docs/coverage/icon_minus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_minus_dark.svg b/docs/coverage/icon_minus_dark.svg deleted file mode 100644 index 2516b6fc..00000000 --- a/docs/coverage/icon_minus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_plus.svg b/docs/coverage/icon_plus.svg deleted file mode 100644 index 79327232..00000000 --- a/docs/coverage/icon_plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_plus_dark.svg b/docs/coverage/icon_plus_dark.svg deleted file mode 100644 index 6ed4edd0..00000000 --- a/docs/coverage/icon_plus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_search-minus.svg b/docs/coverage/icon_search-minus.svg deleted file mode 100644 index c174eb5e..00000000 --- a/docs/coverage/icon_search-minus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_search-minus_dark.svg b/docs/coverage/icon_search-minus_dark.svg deleted file mode 100644 index 9caaffbc..00000000 --- a/docs/coverage/icon_search-minus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_search-plus.svg b/docs/coverage/icon_search-plus.svg deleted file mode 100644 index 04b24ecc..00000000 --- a/docs/coverage/icon_search-plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_search-plus_dark.svg b/docs/coverage/icon_search-plus_dark.svg deleted file mode 100644 index 53241945..00000000 --- a/docs/coverage/icon_search-plus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/icon_sponsor.svg b/docs/coverage/icon_sponsor.svg deleted file mode 100644 index bf6d9591..00000000 --- a/docs/coverage/icon_sponsor.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_star.svg b/docs/coverage/icon_star.svg deleted file mode 100644 index b23c54ea..00000000 --- a/docs/coverage/icon_star.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_star_dark.svg b/docs/coverage/icon_star_dark.svg deleted file mode 100644 index 49c0d034..00000000 --- a/docs/coverage/icon_star_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_up-dir.svg b/docs/coverage/icon_up-dir.svg deleted file mode 100644 index 567c11f3..00000000 --- a/docs/coverage/icon_up-dir.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_up-dir_active.svg b/docs/coverage/icon_up-dir_active.svg deleted file mode 100644 index bb225544..00000000 --- a/docs/coverage/icon_up-dir_active.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_wrench.svg b/docs/coverage/icon_wrench.svg deleted file mode 100644 index b6aa318c..00000000 --- a/docs/coverage/icon_wrench.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/coverage/icon_wrench_dark.svg b/docs/coverage/icon_wrench_dark.svg deleted file mode 100644 index 5c77a9c8..00000000 --- a/docs/coverage/icon_wrench_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/coverage/index.htm b/docs/coverage/index.htm deleted file mode 100644 index 0cbe969f..00000000 --- a/docs/coverage/index.htm +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - -Summary - Coverage Report - -
    -

    SummaryStarSponsor

    - ---- - - - - - - - - - - - - - - - - - - -
    Generated on:16.12.2023 - 23:04:21
    Parser:OpenCoverParser
    Assemblies:1
    Classes:9
    Files:8
    Covered lines:229
    Uncovered lines:131
    Coverable lines:360
    Total lines:787
    Line coverage:63.6% (229 of 360)
    Covered branches:56
    Total branches:100
    Branch coverage:56% (56 of 100)
    Covered methods:32
    Total methods:69
    Method coverage:46.3% (32 of 69)
    -

    Risk Hotspots

    - - -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AssemblyClassMethodCyclomatic complexity NPath complexity Crap Score
    ImageProcessingImageProcessing.AgentssuperImageProcessing(...)9490
    ImageProcessingImageProcessing.ArgumentsArgu.IArgParserTemplate.get_Usage()6642
    ImageProcessingImageProcessing.Mainmain$cont@20(...)63242
    ImageProcessingImageProcessing.AgentsInvoke(...)5330
    ImageProcessingImageProcessing.AgentsInvoke(...)5330
    ImageProcessingImageProcessing.AgentsInvoke(...)4320
    ImageProcessingImageProcessing.AgentsInvoke(...)4320
    ImageProcessingImageProcessing.ArgumentsdeviceParser(...)4420
    ImageProcessingImageProcessing.ImageArrayProcessingarrayOfImagesProcessing(...)4820
    ImageProcessingImageProcessing.ImageArrayProcessingInvoke(...)4020
    -
    -

    Coverage

    - - ------------- - - - - - - - - - - - - - -
    NameCoveredUncoveredCoverableTotalLine coverageCoveredTotalBranch coverage
    ImageProcessing22913136078763.6%
      
    5610056%
      
    ImageProcessing.Agents071711320%
     
    0160%
     
    ImageProcessing.Arguments2216387457.8%
      
    203066.6%
      
    ImageProcessing.CpuProcessing4004098100%
     
    3232100%
     
    ImageProcessing.GpuKernels95095175100%
     
    44100%
     
    ImageProcessing.GpuProcessing64064153100%
     
    00
     
    ImageProcessing.ImageArrayProcessing01313570%
     
    060%
     
    ImageProcessing.Kernels0000100%
     
    00
     
    ImageProcessing.Main03030590%
     
    0120%
     
    ImageProcessing.MyImage8193988.8%
      
    00
     
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/index.html b/docs/coverage/index.html deleted file mode 100644 index 0cbe969f..00000000 --- a/docs/coverage/index.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - -Summary - Coverage Report - -
    -

    SummaryStarSponsor

    - ---- - - - - - - - - - - - - - - - - - - -
    Generated on:16.12.2023 - 23:04:21
    Parser:OpenCoverParser
    Assemblies:1
    Classes:9
    Files:8
    Covered lines:229
    Uncovered lines:131
    Coverable lines:360
    Total lines:787
    Line coverage:63.6% (229 of 360)
    Covered branches:56
    Total branches:100
    Branch coverage:56% (56 of 100)
    Covered methods:32
    Total methods:69
    Method coverage:46.3% (32 of 69)
    -

    Risk Hotspots

    - - -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AssemblyClassMethodCyclomatic complexity NPath complexity Crap Score
    ImageProcessingImageProcessing.AgentssuperImageProcessing(...)9490
    ImageProcessingImageProcessing.ArgumentsArgu.IArgParserTemplate.get_Usage()6642
    ImageProcessingImageProcessing.Mainmain$cont@20(...)63242
    ImageProcessingImageProcessing.AgentsInvoke(...)5330
    ImageProcessingImageProcessing.AgentsInvoke(...)5330
    ImageProcessingImageProcessing.AgentsInvoke(...)4320
    ImageProcessingImageProcessing.AgentsInvoke(...)4320
    ImageProcessingImageProcessing.ArgumentsdeviceParser(...)4420
    ImageProcessingImageProcessing.ImageArrayProcessingarrayOfImagesProcessing(...)4820
    ImageProcessingImageProcessing.ImageArrayProcessingInvoke(...)4020
    -
    -

    Coverage

    - - ------------- - - - - - - - - - - - - - -
    NameCoveredUncoveredCoverableTotalLine coverageCoveredTotalBranch coverage
    ImageProcessing22913136078763.6%
      
    5610056%
      
    ImageProcessing.Agents071711320%
     
    0160%
     
    ImageProcessing.Arguments2216387457.8%
      
    203066.6%
      
    ImageProcessing.CpuProcessing4004098100%
     
    3232100%
     
    ImageProcessing.GpuKernels95095175100%
     
    44100%
     
    ImageProcessing.GpuProcessing64064153100%
     
    00
     
    ImageProcessing.ImageArrayProcessing01313570%
     
    060%
     
    ImageProcessing.Kernels0000100%
     
    00
     
    ImageProcessing.Main03030590%
     
    0120%
     
    ImageProcessing.MyImage8193988.8%
      
    00
     
    -
    -
    - - \ No newline at end of file diff --git a/docs/coverage/main.js b/docs/coverage/main.js deleted file mode 100644 index 1c492a20..00000000 --- a/docs/coverage/main.js +++ /dev/null @@ -1,359 +0,0 @@ -/* Chartist.js 0.11.0 - * Copyright © 2017 Gion Kunz - * Free to use under either the WTFPL license or the MIT license. - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT - */ - -!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { - var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { - "use strict"; function d(a) { - var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { - var i = c.serialMap(b.normalized.series, function () { - return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) - }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") - } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) - } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) - }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a -}); - -var i, l, selectedLine = null; - -/* Navigate to hash without browser history entry */ -var navigateToHash = function () { - if (window.history !== undefined && window.history.replaceState !== undefined) { - window.history.replaceState(undefined, undefined, this.getAttribute("href")); - } -}; - -var hashLinks = document.getElementsByClassName('navigatetohash'); -for (i = 0, l = hashLinks.length; i < l; i++) { - hashLinks[i].addEventListener('click', navigateToHash); -} - -/* Switch test method */ -var switchTestMethod = function () { - var method = this.getAttribute("value"); - console.log("Selected test method: " + method); - - var lines, i, l, coverageData, lineAnalysis, cells; - - lines = document.querySelectorAll('.lineAnalysis tr'); - - for (i = 1, l = lines.length; i < l; i++) { - coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); - lineAnalysis = coverageData[method]; - cells = lines[i].querySelectorAll('td'); - if (lineAnalysis === undefined) { - lineAnalysis = coverageData.AllTestMethods; - if (lineAnalysis.LVS !== 'gray') { - cells[0].setAttribute('class', 'red'); - cells[1].innerText = cells[1].textContent = '0'; - cells[4].setAttribute('class', 'lightred'); - } - } else { - cells[0].setAttribute('class', lineAnalysis.LVS); - cells[1].innerText = cells[1].textContent = lineAnalysis.VC; - cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); - } - } -}; - -var testMethods = document.getElementsByClassName('switchtestmethod'); -for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].addEventListener('change', switchTestMethod); -} - -/* Highlight test method by line */ -var toggleLine = function () { - if (selectedLine === this) { - selectedLine = null; - } else { - selectedLine = null; - unhighlightTestMethods(); - highlightTestMethods.call(this); - selectedLine = this; - } - -}; -var highlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var lineAnalysis; - var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); - var testMethods = document.getElementsByClassName('testmethod'); - - for (i = 0, l = testMethods.length; i < l; i++) { - lineAnalysis = coverageData[testMethods[i].id]; - if (lineAnalysis === undefined) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } else { - testMethods[i].className += ' light' + lineAnalysis.LVS; - } - } -}; -var unhighlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var testMethods = document.getElementsByClassName('testmethod'); - for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } -}; -var coverableLines = document.getElementsByClassName('coverableline'); -for (i = 0, l = coverableLines.length; i < l; i++) { - coverableLines[i].addEventListener('click', toggleLine); - coverableLines[i].addEventListener('mouseenter', highlightTestMethods); - coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); -} - -/* History charts */ -var renderChart = function (chart) { - // Remove current children (e.g. PNG placeholder) - while (chart.firstChild) { - chart.firstChild.remove(); - } - - var chartData = window[chart.getAttribute('data-data')]; - var options = { - axisY: { - type: undefined, - onlyInteger: true - }, - lineSmooth: false, - low: 0, - high: 100, - scaleMinSpace: 20, - onlyInteger: true, - fullWidth: true - }; - var lineChart = new Chartist.Line(chart, { - labels: [], - series: chartData.series - }, options); - - /* Zoom */ - var zoomButtonDiv = document.createElement("div"); - zoomButtonDiv.className = "toggleZoom"; - var zoomButtonLink = document.createElement("a"); - zoomButtonLink.setAttribute("href", ""); - var zoomButtonText = document.createElement("i"); - zoomButtonText.className = "icon-search-plus"; - - zoomButtonLink.appendChild(zoomButtonText); - zoomButtonDiv.appendChild(zoomButtonLink); - - chart.appendChild(zoomButtonDiv); - - zoomButtonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - if (options.axisY.type === undefined) { - options.axisY.type = Chartist.AutoScaleAxis; - zoomButtonText.className = "icon-search-minus"; - } else { - options.axisY.type = undefined; - zoomButtonText.className = "icon-search-plus"; - } - - lineChart.update(null, options); - }); - - var tooltip = document.createElement("div"); - tooltip.className = "tooltip"; - - chart.appendChild(tooltip); - - /* Tooltips */ - var showToolTip = function () { - var point = this; - var index = [].slice.call(chart.getElementsByClassName('ct-point')).indexOf(point); - - tooltip.innerHTML = chartData.tooltips[index % chartData.tooltips.length]; - tooltip.style.display = 'block'; - }; - - var moveToolTip = function (event) { - var box = chart.getBoundingClientRect(); - var left = event.pageX - box.left - window.pageXOffset; - var top = event.pageY - box.top - window.pageYOffset; - - left = left + 20; - top = top - tooltip.offsetHeight / 2; - - if (left + tooltip.offsetWidth > box.width) { - left -= tooltip.offsetWidth + 40; - } - - if (top < 0) { - top = 0; - } - - if (top + tooltip.offsetHeight > box.height) { - top = box.height - tooltip.offsetHeight; - } - - tooltip.style.left = left + 'px'; - tooltip.style.top = top + 'px'; - }; - - var hideToolTip = function () { - tooltip.style.display = 'none'; - }; - chart.addEventListener('mousemove', moveToolTip); - - lineChart.on('created', function () { - var chartPoints = chart.getElementsByClassName('ct-point'); - for (i = 0, l = chartPoints.length; i < l; i++) { - chartPoints[i].addEventListener('mousemove', showToolTip); - chartPoints[i].addEventListener('mouseout', hideToolTip); - } - }); -}; - -var charts = document.getElementsByClassName('historychart'); -for (i = 0, l = charts.length; i < l; i++) { - renderChart(charts[i]); -} - -var assemblies = [ - { - "name": "ImageProcessing", - "classes": [ - { "name": "ImageProcessing.Agents", "rp": "ImageProcessing_Agents.html", "cl": 0, "ucl": 71, "cal": 71, "tl": 132, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 16, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.Arguments", "rp": "ImageProcessing_Arguments.html", "cl": 22, "ucl": 16, "cal": 38, "tl": 74, "ct": "LineCoverage", "mc": "-", "cb": 20, "tb": 30, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.CpuProcessing", "rp": "ImageProcessing_CpuProcessing.html", "cl": 40, "ucl": 0, "cal": 40, "tl": 98, "ct": "LineCoverage", "mc": "-", "cb": 32, "tb": 32, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.GpuKernels", "rp": "ImageProcessing_GpuKernels.html", "cl": 95, "ucl": 0, "cal": 95, "tl": 175, "ct": "LineCoverage", "mc": "-", "cb": 4, "tb": 4, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.GpuProcessing", "rp": "ImageProcessing_GpuProcessing.html", "cl": 64, "ucl": 0, "cal": 64, "tl": 153, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 0, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.ImageArrayProcessing", "rp": "ImageProcessing_ImageArrayProcessing.html", "cl": 0, "ucl": 13, "cal": 13, "tl": 57, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 6, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.Kernels", "rp": "ImageProcessing_Kernels.html", "cl": 0, "ucl": 0, "cal": 0, "tl": 0, "ct": "MethodCoverage", "mc": 100, "cb": 0, "tb": 0, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.Main", "rp": "ImageProcessing_Main.html", "cl": 0, "ucl": 30, "cal": 30, "tl": 59, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 12, "lch": [], "bch": [], "hc": [] }, - { "name": "ImageProcessing.MyImage", "rp": "ImageProcessing_MyImage.html", "cl": 8, "ucl": 1, "cal": 9, "tl": 39, "ct": "LineCoverage", "mc": "-", "cb": 0, "tb": 0, "lch": [], "bch": [], "hc": [] }, - ]}, -]; - -var historicCoverageExecutionTimes = []; - -var riskHotspotMetrics = [ - { "name": "Cyclomatic complexity", "explanationUrl": "https://en.wikipedia.org/wiki/Cyclomatic_complexity" }, - { "name": "NPath complexity", "explanationUrl": "https://modess.io/npath-complexity-cyclomatic-complexity-explained" }, - { "name": "Crap Score", "explanationUrl": "https://googletesting.blogspot.de/2011/02/this-code-is-crap.html" }, -]; - -var riskHotspots = [ - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "System.Void ImageProcessing.Agents::superImageProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2,System.Int32)", "methodShortName": "superImageProcessing(...)", "fileIndex": 0, "line": 120, - "metrics": [ - { "value": 9, "exceeded": false }, - { "value": 4, "exceeded": false }, - { "value": 90, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Arguments", "reportPath": "ImageProcessing_Arguments.html", "methodName": "System.String ImageProcessing.Arguments/CliArguments::Argu.IArgParserTemplate.get_Usage()", "methodShortName": "Argu.IArgParserTemplate.get_Usage()", "fileIndex": 0, "line": 68, - "metrics": [ - { "value": 6, "exceeded": false }, - { "value": 6, "exceeded": false }, - { "value": 42, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Main", "reportPath": "ImageProcessing_Main.html", "methodName": "System.Void ImageProcessing.Main::main$cont@20(Argu.ParseResults`1,System.String,System.String,Microsoft.FSharp.Core.Unit)", "methodShortName": "main$cont@20(...)", "fileIndex": 0, "line": 20, - "metrics": [ - { "value": 6, "exceeded": false }, - { "value": 32, "exceeded": false }, - { "value": 42, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/imgSaver@33-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 33, - "metrics": [ - { "value": 5, "exceeded": false }, - { "value": 3, "exceeded": false }, - { "value": 30, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/imgProcessor@56-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 56, - "metrics": [ - { "value": 5, "exceeded": false }, - { "value": 3, "exceeded": false }, - { "value": 30, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/msgLogger@78-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 78, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 3, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Agents", "reportPath": "ImageProcessing_Agents.html", "methodName": "Microsoft.FSharp.Control.FSharpAsync`1 ImageProcessing.Agents/superAgent@99-4::Invoke(ImageProcessing.Types/Msg)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 99, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 3, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.Arguments", "reportPath": "ImageProcessing_Arguments.html", "methodName": "Brahma.FSharp.Platform ImageProcessing.Arguments::deviceParser(ImageProcessing.Types/Devices)", "methodShortName": "deviceParser(...)", "fileIndex": 0, "line": 52, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 4, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.ImageArrayProcessing", "reportPath": "ImageProcessing_ImageArrayProcessing.html", "methodName": "System.Void ImageProcessing.ImageArrayProcessing::arrayOfImagesProcessing(System.String,System.String,Microsoft.FSharp.Core.FSharpFunc`2,ImageProcessing.Types/AgentStatus)", "methodShortName": "arrayOfImagesProcessing(...)", "fileIndex": 0, "line": 41, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 8, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, - { - "assembly": "ImageProcessing", "class": "ImageProcessing.ImageArrayProcessing", "reportPath": "ImageProcessing_ImageArrayProcessing.html", "methodName": "System.Boolean ImageProcessing.ImageArrayProcessing/listAllFiles@29::Invoke(System.String)", "methodShortName": "Invoke(...)", "fileIndex": 0, "line": 29, - "metrics": [ - { "value": 4, "exceeded": false }, - { "value": 0, "exceeded": false }, - { "value": 20, "exceeded": true }, - ]}, -]; - -var branchCoverageAvailable = true; - - -var translations = { -'top': 'Top:', -'all': 'All', -'assembly': 'Assembly', -'class': 'Class', -'method': 'Method', -'lineCoverage': 'LineCoverage', -'noGrouping': 'No grouping', -'byAssembly': 'By assembly', -'byNamespace': 'By namespace, Level:', -'all': 'All', -'collapseAll': 'Collapse all', -'expandAll': 'Expand all', -'grouping': 'Grouping:', -'filter': 'Filter:', -'name': 'Name', -'covered': 'Covered', -'uncovered': 'Uncovered', -'coverable': 'Coverable', -'total': 'Total', -'coverage': 'Line coverage', -'branchCoverage': 'Branch coverage', -'history': 'Coverage History', -'compareHistory': 'Compare with:', -'date': 'Date', -'allChanges': 'All changes', -'lineCoverageIncreaseOnly': 'Line coverage: Increase only', -'lineCoverageDecreaseOnly': 'Line coverage: Decrease only', -'branchCoverageIncreaseOnly': 'Branch coverage: Increase only', -'branchCoverageDecreaseOnly': 'Branch coverage: Decrease only' -}; - - -(()=>{"use strict";var e,_={},p={};function n(e){var a=p[e];if(void 0!==a)return a.exports;var r=p[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,u,l)=>{if(!r){var c=1/0;for(f=0;f=l)&&Object.keys(n.O).every(d=>n.O[d](r[t]))?r.splice(t--,1):(v=!1,l0&&e[f-1][2]>l;f--)e[f]=e[f-1];e[f]=[r,u,l]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={666:0};n.O.j=u=>0===e[u];var a=(u,l)=>{var t,o,[f,c,v]=l,s=0;for(t in c)n.o(c,t)&&(n.m[t]=c[t]);if(v)var b=v(n);for(u&&u(l);s{!function(e){const n=e.performance;function i(I){n&&n.mark&&n.mark(I)}function r(I,p){n&&n.measure&&n.measure(I,p)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function u(I){return c+I}const f=!0===e[u("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let _=(()=>{class I{constructor(t,o){this._parent=t,this._name=o?o.name||"unnamed":"",this._properties=o&&o.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,o)}static assertZonePatched(){if(e.Promise!==J.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=I.current;for(;t.parent;)t=t.parent;return t}static get current(){return G.zone}static get currentTask(){return te}static __load_patch(t,o,g=!1){if(J.hasOwnProperty(t)){if(!g&&f)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const P="Zone:"+t;i(P),J[t]=o(e,I,le),r(P,P)}}get parent(){return this._parent}get name(){return this._name}get(t){const o=this.getZoneWith(t);if(o)return o._properties[t]}getZoneWith(t){let o=this;for(;o;){if(o._properties.hasOwnProperty(t))return o;o=o._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,o){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const g=this._zoneDelegate.intercept(this,t,o),P=this;return function(){return P.runGuarded(g,this,arguments,o)}}run(t,o,g,P){G={parent:G,zone:this};try{return this._zoneDelegate.invoke(this,t,o,g,P)}finally{G=G.parent}}runGuarded(t,o=null,g,P){G={parent:G,zone:this};try{try{return this._zoneDelegate.invoke(this,t,o,g,P)}catch(K){if(this._zoneDelegate.handleError(this,K))throw K}}finally{G=G.parent}}runTask(t,o,g){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");if(t.state===j&&(t.type===R||t.type===M))return;const P=t.state!=X;P&&t._transitionTo(X,O),t.runCount++;const K=te;te=t,G={parent:G,zone:this};try{t.type==M&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,o,g)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==j&&t.state!==Y&&(t.type==R||t.data&&t.data.isPeriodic?P&&t._transitionTo(O,X):(t.runCount=0,this._updateTaskCount(t,-1),P&&t._transitionTo(j,X,j))),G=G.parent,te=K}}scheduleTask(t){if(t.zone&&t.zone!==this){let g=this;for(;g;){if(g===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);g=g.parent}}t._transitionTo(q,j);const o=[];t._zoneDelegates=o,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(g){throw t._transitionTo(Y,q,j),this._zoneDelegate.handleError(this,g),g}return t._zoneDelegates===o&&this._updateTaskCount(t,1),t.state==q&&t._transitionTo(O,q),t}scheduleMicroTask(t,o,g,P){return this.scheduleTask(new m(v,t,o,g,P,void 0))}scheduleMacroTask(t,o,g,P,K){return this.scheduleTask(new m(M,t,o,g,P,K))}scheduleEventTask(t,o,g,P,K){return this.scheduleTask(new m(R,t,o,g,P,K))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");t._transitionTo(A,O,X);try{this._zoneDelegate.cancelTask(this,t)}catch(o){throw t._transitionTo(Y,A),this._zoneDelegate.handleError(this,o),o}return this._updateTaskCount(t,-1),t._transitionTo(j,A),t.runCount=0,t}_updateTaskCount(t,o){const g=t._zoneDelegates;-1==o&&(t._zoneDelegates=null);for(let P=0;PI.hasTask(t,o),onScheduleTask:(I,p,t,o)=>I.scheduleTask(t,o),onInvokeTask:(I,p,t,o,g,P)=>I.invokeTask(t,o,g,P),onCancelTask:(I,p,t,o)=>I.cancelTask(t,o)};class T{constructor(p,t,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=p,this._parentDelegate=t,this._forkZS=o&&(o&&o.onFork?o:t._forkZS),this._forkDlgt=o&&(o.onFork?t:t._forkDlgt),this._forkCurrZone=o&&(o.onFork?this.zone:t._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:t._interceptZS),this._interceptDlgt=o&&(o.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:t._invokeZS),this._invokeDlgt=o&&(o.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:t._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:t._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:t._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:t._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const g=o&&o.onHasTask;(g||t&&t._hasTaskZS)&&(this._hasTaskZS=g?o:y,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=p,o.onScheduleTask||(this._scheduleTaskZS=y,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),o.onInvokeTask||(this._invokeTaskZS=y,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),o.onCancelTask||(this._cancelTaskZS=y,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(p,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,p,t):new _(p,t)}intercept(p,t,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,p,t,o):t}invoke(p,t,o,g,P){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,p,t,o,g,P):t.apply(o,g)}handleError(p,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,p,t)}scheduleTask(p,t){let o=t;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,p,t),o||(o=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=v)throw new Error("Task is missing scheduleFn.");d(t)}return o}invokeTask(p,t,o,g){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,p,t,o,g):t.callback.apply(o,g)}cancelTask(p,t){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,p,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");o=t.cancelFn(t)}return o}hasTask(p,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,p,t)}catch(o){this.handleError(p,o)}}_updateTaskCount(p,t){const o=this._taskCounts,g=o[p],P=o[p]=g+t;if(P<0)throw new Error("More tasks executed then were scheduled.");0!=g&&0!=P||this.hasTask(this.zone,{microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:p})}}class m{constructor(p,t,o,g,P,K){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=p,this.source=t,this.data=g,this.scheduleFn=P,this.cancelFn=K,!o)throw new Error("callback is not defined");this.callback=o;const l=this;this.invoke=p===R&&g&&g.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(p,t,o){p||(p=this),re++;try{return p.runCount++,p.zone.runTask(p,t,o)}finally{1==re&&L(),re--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(j,q)}_transitionTo(p,t,o){if(this._state!==t&&this._state!==o)throw new Error(`${this.type} '${this.source}': can not transition to '${p}', expecting state '${t}'${o?" or '"+o+"'":""}, was '${this._state}'.`);this._state=p,p==j&&(this._zoneDelegates=null)}toString(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const S=u("setTimeout"),D=u("Promise"),Z=u("then");let E,B=[],V=!1;function d(I){if(0===re&&0===B.length)if(E||e[D]&&(E=e[D].resolve(0)),E){let p=E[Z];p||(p=E.then),p.call(E,L)}else e[S](L,0);I&&B.push(I)}function L(){if(!V){for(V=!0;B.length;){const I=B;B=[];for(let p=0;pG,onUnhandledError:F,microtaskDrainDone:F,scheduleMicroTask:d,showUncaughtError:()=>!_[u("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:F,patchMethod:()=>F,bindArguments:()=>[],patchThen:()=>F,patchMacroTask:()=>F,patchEventPrototype:()=>F,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>F,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>F,wrapWithCurrentZone:()=>F,filterProperties:()=>[],attachOriginToPatched:()=>F,_redefineProperty:()=>F,patchCallbacks:()=>F};let G={parent:null,zone:new _(null,null)},te=null,re=0;function F(){}r("Zone","Zone"),e.Zone=_}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global);const ue=Object.getOwnPropertyDescriptor,he=Object.defineProperty,de=Object.getPrototypeOf,Be=Object.create,ut=Array.prototype.slice,Se="addEventListener",Oe="removeEventListener",Ze=Zone.__symbol__(Se),Ie=Zone.__symbol__(Oe),se="true",ie="false",ke=Zone.__symbol__("");function Le(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,r,c){return Zone.current.scheduleMacroTask(e,n,i,r,c)}const x=Zone.__symbol__,Pe="undefined"!=typeof window,pe=Pe?window:void 0,$=Pe&&pe||"object"==typeof self&&self||global,ht=[null];function Ae(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Le(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}const Ue="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,Re=!("nw"in $)&&void 0!==$.process&&"[object process]"==={}.toString.call($.process),je=!Re&&!Ue&&!(!Pe||!pe.HTMLElement),We=void 0!==$.process&&"[object process]"==={}.toString.call($.process)&&!Ue&&!(!Pe||!pe.HTMLElement),Ce={},qe=function(e){if(!(e=e||$.event))return;let n=Ce[e.type];n||(n=Ce[e.type]=x("ON_PROPERTY"+e.type));const i=this||e.target||$,r=i[n];let c;if(je&&i===pe&&"error"===e.type){const u=e;c=r&&r.call(this,u.message,u.filename,u.lineno,u.colno,u.error),!0===c&&e.preventDefault()}else c=r&&r.apply(this,arguments),null!=c&&!c&&e.preventDefault();return c};function Xe(e,n,i){let r=ue(e,n);if(!r&&i&&ue(i,n)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;const c=x("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete r.writable,delete r.value;const u=r.get,f=r.set,_=n.substr(2);let y=Ce[_];y||(y=Ce[_]=x("ON_PROPERTY"+_)),r.set=function(T){let m=this;!m&&e===$&&(m=$),m&&(m[y]&&m.removeEventListener(_,qe),f&&f.apply(m,ht),"function"==typeof T?(m[y]=T,m.addEventListener(_,qe,!1)):m[y]=null)},r.get=function(){let T=this;if(!T&&e===$&&(T=$),!T)return null;const m=T[y];if(m)return m;if(u){let S=u&&u.call(this);if(S)return r.set.call(this,S),"function"==typeof T.removeAttribute&&T.removeAttribute(n),S}return null},he(e,n,r),e[c]=!0}function Ye(e,n,i){if(n)for(let r=0;rfunction(f,_){const y=i(f,_);return y.cbIdx>=0&&"function"==typeof _[y.cbIdx]?Me(y.name,_[y.cbIdx],y,c):u.apply(f,_)})}function ae(e,n){e[x("OriginalDelegate")]=n}let $e=!1,He=!1;function mt(){if($e)return He;$e=!0;try{const e=pe.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(He=!0)}catch(e){}return He}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const r=Object.getOwnPropertyDescriptor,c=Object.defineProperty,f=i.symbol,_=[],y=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),m=f("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const s=l&&l.rejection;s?console.error("Unhandled Promise rejection:",s instanceof Error?s.message:s,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",s,s instanceof Error?s.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;_.length;){const l=_.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(s){Z(s)}}};const D=f("unhandledPromiseRejectionHandler");function Z(l){i.onUnhandledError(l);try{const s=n[D];"function"==typeof s&&s.call(this,l)}catch(s){}}function B(l){return l&&l.then}function V(l){return l}function E(l){return t.reject(l)}const d=f("state"),L=f("value"),z=f("finally"),j=f("parentPromiseValue"),q=f("parentPromiseState"),X=null,A=!0,Y=!1;function M(l,s){return a=>{try{G(l,s,a)}catch(h){G(l,!1,h)}}}const le=f("currentTaskTrace");function G(l,s,a){const h=function(){let l=!1;return function(a){return function(){l||(l=!0,a.apply(null,arguments))}}}();if(l===a)throw new TypeError("Promise resolved with itself");if(l[d]===X){let w=null;try{("object"==typeof a||"function"==typeof a)&&(w=a&&a.then)}catch(C){return h(()=>{G(l,!1,C)})(),l}if(s!==Y&&a instanceof t&&a.hasOwnProperty(d)&&a.hasOwnProperty(L)&&a[d]!==X)re(a),G(l,a[d],a[L]);else if(s!==Y&&"function"==typeof w)try{w.call(a,h(M(l,s)),h(M(l,!1)))}catch(C){h(()=>{G(l,!1,C)})()}else{l[d]=s;const C=l[L];if(l[L]=a,l[z]===z&&s===A&&(l[d]=l[q],l[L]=l[j]),s===Y&&a instanceof Error){const k=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;k&&c(a,le,{configurable:!0,enumerable:!1,writable:!0,value:k})}for(let k=0;k{try{const b=l[L],N=!!a&&z===a[z];N&&(a[j]=b,a[q]=C);const H=s.run(k,void 0,N&&k!==E&&k!==V?[]:[b]);G(a,!0,H)}catch(b){G(a,!1,b)}},a)}const p=function(){};class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(s){return G(new this(null),A,s)}static reject(s){return G(new this(null),Y,s)}static race(s){let a,h,w=new this((b,N)=>{a=b,h=N});function C(b){a(b)}function k(b){h(b)}for(let b of s)B(b)||(b=this.resolve(b)),b.then(C,k);return w}static all(s){return t.allWithCallback(s)}static allSettled(s){return(this&&this.prototype instanceof t?this:t).allWithCallback(s,{thenCallback:h=>({status:"fulfilled",value:h}),errorCallback:h=>({status:"rejected",reason:h})})}static allWithCallback(s,a){let h,w,C=new this((H,U)=>{h=H,w=U}),k=2,b=0;const N=[];for(let H of s){B(H)||(H=this.resolve(H));const U=b;try{H.then(Q=>{N[U]=a?a.thenCallback(Q):Q,k--,0===k&&h(N)},Q=>{a?(N[U]=a.errorCallback(Q),k--,0===k&&h(N)):w(Q)})}catch(Q){w(Q)}k++,b++}return k-=2,0===k&&h(N),C}constructor(s){const a=this;if(!(a instanceof t))throw new Error("Must be an instanceof Promise.");a[d]=X,a[L]=[];try{s&&s(M(a,A),M(a,Y))}catch(h){G(a,!1,h)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(s,a){let h=this.constructor[Symbol.species];(!h||"function"!=typeof h)&&(h=this.constructor||t);const w=new h(p),C=n.current;return this[d]==X?this[L].push(C,w,s,a):F(this,C,w,s,a),w}catch(s){return this.then(null,s)}finally(s){let a=this.constructor[Symbol.species];(!a||"function"!=typeof a)&&(a=t);const h=new a(p);h[z]=z;const w=n.current;return this[d]==X?this[L].push(w,h,s,s):F(this,w,h,s,s),h}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const o=e[T]=e.Promise;e.Promise=t;const g=f("thenPatched");function P(l){const s=l.prototype,a=r(s,"then");if(a&&(!1===a.writable||!a.configurable))return;const h=s.then;s[m]=h,l.prototype.then=function(w,C){return new t((b,N)=>{h.call(this,b,N)}).then(w,C)},l[g]=!0}return i.patchThen=P,o&&(P(o),ce(e,"fetch",l=>function(l){return function(s,a){let h=l.apply(s,a);if(h instanceof t)return h;let w=h.constructor;return w[g]||P(w),h}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=_,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=x("OriginalDelegate"),r=x("Promise"),c=x("Error"),u=function(){if("function"==typeof this){const T=this[i];if(T)return"function"==typeof T?n.call(T):Object.prototype.toString.call(T);if(this===Promise){const m=e[r];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};u[i]=n,Function.prototype.toString=u;const f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});let me=!1;if("undefined"!=typeof window)try{const e=Object.defineProperty({},"passive",{get:function(){me=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(e){me=!1}const Et={useG:!0},ee={},Ke={},Je=new RegExp("^"+ke+"(\\w+)(true|false)$"),xe=x("propagationStopped");function Qe(e,n){const i=(n?n(e):e)+ie,r=(n?n(e):e)+se,c=ke+i,u=ke+r;ee[e]={},ee[e][ie]=c,ee[e][se]=u}function Tt(e,n,i){const r=i&&i.add||Se,c=i&&i.rm||Oe,u=i&&i.listeners||"eventListeners",f=i&&i.rmAll||"removeAllListeners",_=x(r),y="."+r+":",S=function(E,d,L){if(E.isRemoved)return;const z=E.callback;"object"==typeof z&&z.handleEvent&&(E.callback=q=>z.handleEvent(q),E.originalDelegate=z),E.invoke(E,d,[L]);const j=E.options;j&&"object"==typeof j&&j.once&&d[c].call(d,L.type,E.originalDelegate?E.originalDelegate:E.callback,j)},D=function(E){if(!(E=E||e.event))return;const d=this||E.target||e,L=d[ee[E.type][ie]];if(L)if(1===L.length)S(L[0],d,E);else{const z=L.slice();for(let j=0;jfunction(c,u){c[xe]=!0,r&&r.apply(c,u)})}function yt(e,n,i,r,c){const u=Zone.__symbol__(r);if(n[u])return;const f=n[u]=n[r];n[r]=function(_,y,T){return y&&y.prototype&&c.forEach(function(m){const S=`${i}.${r}::`+m,D=y.prototype;if(D.hasOwnProperty(m)){const Z=e.ObjectGetOwnPropertyDescriptor(D,m);Z&&Z.value?(Z.value=e.wrapWithCurrentZone(Z.value,S),e._redefineProperty(y.prototype,m,Z)):D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}else D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}),f.call(n,_,y,T)},e.attachOriginToPatched(n[r],f)}const Ve=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],wt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],tt=["load"],nt=["blur","error","focus","load","resize","scroll","messageerror"],Dt=["bounce","finish","start"],rt=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],Ee=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],St=["close","error","open","message"],Ot=["error","message"],Te=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Ve,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function ot(e,n,i){if(!i||0===i.length)return n;const r=i.filter(u=>u.target===e);if(!r||0===r.length)return n;const c=r[0].ignoreProperties;return n.filter(u=>-1===c.indexOf(u))}function W(e,n,i,r){e&&Ye(e,ot(e,n,i),r)}Zone.__load_patch("util",(e,n,i)=>{i.patchOnProperties=Ye,i.patchMethod=ce,i.bindArguments=Ae,i.patchMacroTask=_t;const r=n.__symbol__("BLACK_LISTED_EVENTS"),c=n.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[r]=e[c]),e[r]&&(n[r]=n[c]=e[r]),i.patchEventPrototype=gt,i.patchEventTarget=Tt,i.isIEOrEdge=mt,i.ObjectDefineProperty=he,i.ObjectGetOwnPropertyDescriptor=ue,i.ObjectCreate=Be,i.ArraySlice=ut,i.patchClass=ve,i.wrapWithCurrentZone=Le,i.filterProperties=ot,i.attachOriginToPatched=ae,i._redefineProperty=Object.defineProperty,i.patchCallbacks=yt,i.getGlobalObjects=()=>({globalSources:Ke,zoneSymbolEventNames:ee,eventNames:Te,isBrowser:je,isMix:We,isNode:Re,TRUE_STR:se,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ke,ADD_EVENT_LISTENER_STR:Se,REMOVE_EVENT_LISTENER_STR:Oe})});const Ne=x("zoneTask");function ge(e,n,i,r){let c=null,u=null;i+=r;const f={};function _(T){const m=T.data;return m.args[0]=function(){return T.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),T}function y(T){return u.call(e,T.data.handleId)}c=ce(e,n+=r,T=>function(m,S){if("function"==typeof S[0]){const D={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?S[1]||0:void 0,args:S},Z=S[0];S[0]=function(){try{return Z.apply(this,arguments)}finally{D.isPeriodic||("number"==typeof D.handleId?delete f[D.handleId]:D.handleId&&(D.handleId[Ne]=null))}};const B=Me(n,S[0],D,_,y);if(!B)return B;const V=B.data.handleId;return"number"==typeof V?f[V]=B:V&&(V[Ne]=B),V&&V.ref&&V.unref&&"function"==typeof V.ref&&"function"==typeof V.unref&&(B.ref=V.ref.bind(V),B.unref=V.unref.bind(V)),"number"==typeof V||V?V:B}return T.apply(e,S)}),u=ce(e,i,T=>function(m,S){const D=S[0];let Z;"number"==typeof D?Z=f[D]:(Z=D&&D[Ne],Z||(Z=D)),Z&&"string"==typeof Z.type?"notScheduled"!==Z.state&&(Z.cancelFn&&Z.data.isPeriodic||0===Z.runCount)&&("number"==typeof D?delete f[D]:D&&(D[Ne]=null),Z.zone.cancelTask(Z)):T.apply(e,S)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",r=>function(c,u){n.current.scheduleMicroTask("queueMicrotask",u[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";ge(e,n,i,"Timeout"),ge(e,n,i,"Interval"),ge(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{ge(e,"request","cancel","AnimationFrame"),ge(e,"mozRequest","mozCancel","AnimationFrame"),ge(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let r=0;rfunction(y,T){return n.current.run(u,e,T,_)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function(e,n){n.patchEventPrototype(e,n)})(e,i),function(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:r,TRUE_STR:c,FALSE_STR:u,ZONE_SYMBOL_PREFIX:f}=n.getGlobalObjects();for(let y=0;y{ve("MutationObserver"),ve("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ve("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ve("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function(e,n){if(Re&&!We||Zone[e.symbol("patchEvents")])return;const i="undefined"!=typeof WebSocket,r=n.__Zone_ignore_on_properties;if(je){const f=window,_=function(){try{const e=pe.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch(e){}return!1}()?[{target:f,ignoreProperties:["error"]}]:[];W(f,Te.concat(["messageerror"]),r&&r.concat(_),de(f)),W(Document.prototype,Te,r),void 0!==f.SVGElement&&W(f.SVGElement.prototype,Te,r),W(Element.prototype,Te,r),W(HTMLElement.prototype,Te,r),W(HTMLMediaElement.prototype,wt,r),W(HTMLFrameSetElement.prototype,Ve.concat(nt),r),W(HTMLBodyElement.prototype,Ve.concat(nt),r),W(HTMLFrameElement.prototype,tt,r),W(HTMLIFrameElement.prototype,tt,r);const y=f.HTMLMarqueeElement;y&&W(y.prototype,Dt,r);const T=f.Worker;T&&W(T.prototype,Ot,r)}const c=n.XMLHttpRequest;c&&W(c.prototype,rt,r);const u=n.XMLHttpRequestEventTarget;u&&W(u&&u.prototype,rt,r),"undefined"!=typeof IDBIndex&&(W(IDBIndex.prototype,Ee,r),W(IDBRequest.prototype,Ee,r),W(IDBOpenDBRequest.prototype,Ee,r),W(IDBDatabase.prototype,Ee,r),W(IDBTransaction.prototype,Ee,r),W(IDBCursor.prototype,Ee,r)),i&&W(WebSocket.prototype,St,r)}(i,e)}),Zone.__load_patch("customElements",(e,n,i)=>{!function(e,n){const{isBrowser:i,isMix:r}=n.getGlobalObjects();(i||r)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function(T){const m=T.XMLHttpRequest;if(!m)return;const S=m.prototype;let Z=S[Ze],B=S[Ie];if(!Z){const v=T.XMLHttpRequestEventTarget;if(v){const M=v.prototype;Z=M[Ze],B=M[Ie]}}const V="readystatechange",E="scheduled";function d(v){const M=v.data,R=M.target;R[u]=!1,R[_]=!1;const J=R[c];Z||(Z=R[Ze],B=R[Ie]),J&&B.call(R,V,J);const le=R[c]=()=>{if(R.readyState===R.DONE)if(!M.aborted&&R[u]&&v.state===E){const te=R[n.__symbol__("loadfalse")];if(0!==R.status&&te&&te.length>0){const re=v.invoke;v.invoke=function(){const F=R[n.__symbol__("loadfalse")];for(let I=0;Ifunction(v,M){return v[r]=0==M[2],v[f]=M[1],j.apply(v,M)}),O=x("fetchTaskAborting"),X=x("fetchTaskScheduling"),A=ce(S,"send",()=>function(v,M){if(!0===n.current[X]||v[r])return A.apply(v,M);{const R={target:v,url:v[f],isPeriodic:!1,args:M,aborted:!1},J=Me("XMLHttpRequest.send",L,R,d,z);v&&!0===v[_]&&!R.aborted&&J.state===E&&J.invoke()}}),Y=ce(S,"abort",()=>function(v,M){const R=function(v){return v[i]}(v);if(R&&"string"==typeof R.type){if(null==R.cancelFn||R.data&&R.data.aborted)return;R.zone.cancelTask(R)}else if(!0===n.current[O])return Y.apply(v,M)})}(e);const i=x("xhrTask"),r=x("xhrSync"),c=x("xhrListener"),u=x("xhrScheduled"),f=x("xhrURL"),_=x("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function(e,n){const i=e.constructor.name;for(let r=0;r{const y=function(){return _.apply(this,Ae(arguments,i+"."+c))};return ae(y,_),y})(u)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(r){return function(c){et(e,r).forEach(f=>{const _=e.PromiseRejectionEvent;if(_){const y=new _(r,{promise:c.promise,reason:c.rejection});f.invoke(y)}})}}e.PromiseRejectionEvent&&(n[x("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[x("rejectionHandledHandler")]=i("rejectionhandled"))})},443:(we,ue,he)=>{he(273)}},we=>{we(we.s=443)}]); - -(self.webpackChunkcoverage_app=self.webpackChunkcoverage_app||[]).push([[179],{255:wo=>{function Mn(Io){return Promise.resolve().then(()=>{var Tn=new Error("Cannot find module '"+Io+"'");throw Tn.code="MODULE_NOT_FOUND",Tn})}Mn.keys=()=>[],Mn.resolve=Mn,Mn.id=255,wo.exports=Mn},15:(wo,Mn,Io)=>{"use strict";function Tn(e){return"function"==typeof e}let ja=!1;const Rt={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){if(e){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else ja&&console.log("RxJS: Back to a better error behavior. Thank you. <3");ja=e},get useDeprecatedSynchronousErrorHandling(){return ja}};function _r(e){setTimeout(()=>{throw e},0)}const $i={closed:!0,next(e){},error(e){if(Rt.useDeprecatedSynchronousErrorHandling)throw e;_r(e)},complete(){}},$a=Array.isArray||(e=>e&&"number"==typeof e.length);function Ua(e){return null!==e&&"object"==typeof e}const Ui=(()=>{function e(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((n,r)=>`${r+1}) ${n.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return e.prototype=Object.create(Error.prototype),e})();class Ee{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}unsubscribe(){let t;if(this.closed)return;let{_parentOrParents:n,_ctorUnsubscribe:r,_unsubscribe:o,_subscriptions:i}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof Ee)n.remove(this);else if(null!==n)for(let s=0;st.concat(n instanceof Ui?n.errors:n),[])}Ee.EMPTY=((e=new Ee).closed=!0,e);const Gi="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();class lt extends Ee{constructor(t,n,r){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=$i;break;case 1:if(!t){this.destination=$i;break}if("object"==typeof t){t instanceof lt?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new Gd(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new Gd(this,t,n,r)}}[Gi](){return this}static create(t,n,r){const o=new lt(t,n,r);return o.syncErrorThrowable=!1,o}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class Gd extends lt{constructor(t,n,r,o){super(),this._parentSubscriber=t;let i,s=this;Tn(n)?i=n:n&&(i=n.next,r=n.error,o=n.complete,n!==$i&&(s=Object.create(n),Tn(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=i,this._error=r,this._complete=o}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:n}=this;Rt.useDeprecatedSynchronousErrorHandling&&n.syncErrorThrowable?this.__tryOrSetError(n,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:n}=this,{useDeprecatedSynchronousErrorHandling:r}=Rt;if(this._error)r&&n.syncErrorThrowable?(this.__tryOrSetError(n,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(n.syncErrorThrowable)r?(n.syncErrorValue=t,n.syncErrorThrown=!0):_r(t),this.unsubscribe();else{if(this.unsubscribe(),r)throw t;_r(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const n=()=>this._complete.call(this._context);Rt.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,n){try{t.call(this._context,n)}catch(r){if(this.unsubscribe(),Rt.useDeprecatedSynchronousErrorHandling)throw r;_r(r)}}__tryOrSetError(t,n,r){if(!Rt.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{n.call(this._context,r)}catch(o){return Rt.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=o,t.syncErrorThrown=!0,!0):(_r(o),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}const Mo="function"==typeof Symbol&&Symbol.observable||"@@observable";function zd(e){return e}let qe=(()=>{class e{constructor(n){this._isScalar=!1,n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const{operator:i}=this,s=function(e,t,n){if(e){if(e instanceof lt)return e;if(e[Gi])return e[Gi]()}return e||t||n?new lt(e,t,n):new lt($i)}(n,r,o);if(s.add(i?i.call(s,this.source):this.source||Rt.useDeprecatedSynchronousErrorHandling&&!s.syncErrorThrowable?this._subscribe(s):this._trySubscribe(s)),Rt.useDeprecatedSynchronousErrorHandling&&s.syncErrorThrowable&&(s.syncErrorThrowable=!1,s.syncErrorThrown))throw s.syncErrorValue;return s}_trySubscribe(n){try{return this._subscribe(n)}catch(r){Rt.useDeprecatedSynchronousErrorHandling&&(n.syncErrorThrown=!0,n.syncErrorValue=r),function(e){for(;e;){const{closed:t,destination:n,isStopped:r}=e;if(t||r)return!1;e=n&&n instanceof lt?n:null}return!0}(n)?n.error(r):console.warn(r)}}forEach(n,r){return new(r=qd(r))((o,i)=>{let s;s=this.subscribe(a=>{try{n(a)}catch(l){i(l),s&&s.unsubscribe()}},i,o)})}_subscribe(n){const{source:r}=this;return r&&r.subscribe(n)}[Mo](){return this}pipe(...n){return 0===n.length?this:function(e){return 0===e.length?zd:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}(n)(this)}toPromise(n){return new(n=qd(n))((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function qd(e){if(e||(e=Rt.Promise||Promise),!e)throw new Error("no Promise impl found");return e}const To=(()=>{function e(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return e.prototype=Object.create(Error.prototype),e})();class pv extends Ee{constructor(t,n){super(),this.subject=t,this.subscriber=n,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,n=t.observers;if(this.subject=null,!n||0===n.length||t.isStopped||t.closed)return;const r=n.indexOf(this.subscriber);-1!==r&&n.splice(r,1)}}class Qd extends lt{constructor(t){super(t),this.destination=t}}let Ga=(()=>{class e extends qe{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[Gi](){return new Qd(this)}lift(n){const r=new Kd(this,this);return r.operator=n,r}next(n){if(this.closed)throw new To;if(!this.isStopped){const{observers:r}=this,o=r.length,i=r.slice();for(let s=0;snew Kd(t,n),e})();class Kd extends Ga{constructor(t,n){super(),this.destination=t,this.source=n}next(t){const{destination:n}=this;n&&n.next&&n.next(t)}error(t){const{destination:n}=this;n&&n.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:n}=this;return n?this.source.subscribe(t):Ee.EMPTY}}function za(e,t){return function(r){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return r.lift(new mv(e,t))}}class mv{constructor(t,n){this.project=t,this.thisArg=n}call(t,n){return n.subscribe(new _v(t,this.project,this.thisArg))}}class _v extends lt{constructor(t,n,r){super(t),this.project=n,this.count=0,this.thisArg=r||this}_next(t){let n;try{n=this.project.call(this.thisArg,t,this.count++)}catch(r){return void this.destination.error(r)}this.destination.next(n)}}const Yd=e=>t=>{for(let n=0,r=e.length;ne&&"number"==typeof e.length&&"function"!=typeof e;function Jd(e){return!!e&&"function"!=typeof e.subscribe&&"function"==typeof e.then}const Xd=e=>{if(e&&"function"==typeof e[Mo])return(e=>t=>{const n=e[Mo]();if("function"!=typeof n.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return n.subscribe(t)})(e);if(Zd(e))return Yd(e);if(Jd(e))return(e=>t=>(e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,_r),t))(e);if(e&&"function"==typeof e[zi])return(e=>t=>{const n=e[zi]();for(;;){let r;try{r=n.next()}catch(o){return t.error(o),t}if(r.done){t.complete();break}if(t.next(r.value),t.closed)break}return"function"==typeof n.return&&t.add(()=>{n.return&&n.return()}),t})(e);{const n=`You provided ${Ua(e)?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(n)}};function ef(e,t){return new qe(n=>{const r=new Ee;let o=0;return r.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||r.add(this.schedule())):n.complete()})),r})}function Wa(e,t){return t?function(e,t){if(null!=e){if(function(e){return e&&"function"==typeof e[Mo]}(e))return function(e,t){return new qe(n=>{const r=new Ee;return r.add(t.schedule(()=>{const o=e[Mo]();r.add(o.subscribe({next(i){r.add(t.schedule(()=>n.next(i)))},error(i){r.add(t.schedule(()=>n.error(i)))},complete(){r.add(t.schedule(()=>n.complete()))}}))})),r})}(e,t);if(Jd(e))return function(e,t){return new qe(n=>{const r=new Ee;return r.add(t.schedule(()=>e.then(o=>{r.add(t.schedule(()=>{n.next(o),r.add(t.schedule(()=>n.complete()))}))},o=>{r.add(t.schedule(()=>n.error(o)))}))),r})}(e,t);if(Zd(e))return ef(e,t);if(function(e){return e&&"function"==typeof e[zi]}(e)||"string"==typeof e)return function(e,t){if(!e)throw new Error("Iterable cannot be null");return new qe(n=>{const r=new Ee;let o;return r.add(()=>{o&&"function"==typeof o.return&&o.return()}),r.add(t.schedule(()=>{o=e[zi](),r.add(t.schedule(function(){if(n.closed)return;let i,s;try{const a=o.next();i=a.value,s=a.done}catch(a){return void n.error(a)}s?n.complete():(n.next(i),this.schedule())}))})),r})}(e,t)}throw new TypeError((null!==e&&typeof e||e)+" is not observable")}(e,t):e instanceof qe?e:new qe(Xd(e))}class Av extends lt{constructor(t){super(),this.parent=t}_next(t){this.parent.notifyNext(t)}_error(t){this.parent.notifyError(t),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class Sv extends lt{notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.destination.complete()}}function tf(e,t,n=Number.POSITIVE_INFINITY){return"function"==typeof t?r=>r.pipe(tf((o,i)=>Wa(e(o,i)).pipe(za((s,a)=>t(o,s,i,a))),n)):("number"==typeof t&&(n=t),r=>r.lift(new Nv(e,n)))}class Nv{constructor(t,n=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=n}call(t,n){return n.subscribe(new Rv(t,this.project,this.concurrent))}}class Rv extends Sv{constructor(t,n,r=Number.POSITIVE_INFINITY){super(t),this.project=n,this.concurrent=r,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}function Fv(e=Number.POSITIVE_INFINITY){return tf(zd,e)}function nf(){return function(t){return t.lift(new Vv(t))}}class Vv{constructor(t){this.connectable=t}call(t,n){const{connectable:r}=this;r._refCount++;const o=new kv(t,r),i=n.subscribe(o);return o.closed||(o.connection=r.connect()),i}}class kv extends lt{constructor(t,n){super(t),this.connectable=n}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const n=t._refCount;if(n<=0)return void(this.connection=null);if(t._refCount=n-1,n>1)return void(this.connection=null);const{connection:r}=this,o=t._connection;this.connection=null,o&&(!r||o===r)&&o.unsubscribe()}}class Lv extends qe{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new Ee,t.add(this.source.subscribe(new Hv(this.getSubject(),this))),t.closed&&(this._connection=null,t=Ee.EMPTY)),t}refCount(){return nf()(this)}}const Bv=(()=>{const e=Lv.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:e._subscribe},_isComplete:{value:e._isComplete,writable:!0},getSubject:{value:e.getSubject},connect:{value:e.connect},refCount:{value:e.refCount}}})();class Hv extends Qd{constructor(t,n){super(t),this.connectable=n}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const n=t._connection;t._refCount=0,t._subject=null,t._connection=null,n&&n.unsubscribe()}}}function Gv(){return new Ga}function ee(e){for(let t in e)if(e[t]===ee)return t;throw Error("Could not find renamed property on target object.")}function qa(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function W(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(W).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Qa(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const Wv=ee({__forward_ref__:ee});function ue(e){return e.__forward_ref__=ue,e.toString=function(){return W(this())},e}function N(e){return rf(e)?e():e}function rf(e){return"function"==typeof e&&e.hasOwnProperty(Wv)&&e.__forward_ref__===ue}class Qn extends Error{constructor(t,n){super(function(e,t){return`${e?`NG0${e}: `:""}${t}`}(t,n)),this.code=t}}function U(e){return"string"==typeof e?e:null==e?"":String(e)}function Qe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():U(e)}function Wi(e,t){const n=t?` in ${t}`:"";throw new Qn("201",`No provider for ${Qe(e)} found${n}`)}function ut(e,t){null==e&&function(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function te(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ft(e){return{providers:e.providers||[],imports:e.imports||[]}}function pn(e){return of(e,qi)||of(e,af)}function of(e,t){return e.hasOwnProperty(t)?e[t]:null}function sf(e){return e&&(e.hasOwnProperty(Ya)||e.hasOwnProperty(Xv))?e[Ya]:null}const qi=ee({\u0275prov:ee}),Ya=ee({\u0275inj:ee}),af=ee({ngInjectableDef:ee}),Xv=ee({ngInjectorDef:ee});var O=(()=>((O=O||{})[O.Default=0]="Default",O[O.Host=1]="Host",O[O.Self=2]="Self",O[O.SkipSelf=4]="SkipSelf",O[O.Optional=8]="Optional",O))();let Za;function An(e){const t=Za;return Za=e,t}function lf(e,t,n){const r=pn(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&O.Optional?null:void 0!==t?t:void Wi(W(e),"Injector")}function Sn(e){return{toString:e}.toString()}var yt=(()=>((yt=yt||{})[yt.OnPush=0]="OnPush",yt[yt.Default=1]="Default",yt))(),Se=(()=>((Se=Se||{})[Se.Emulated=0]="Emulated",Se[Se.None=2]="None",Se[Se.ShadowDom=3]="ShadowDom",Se))();const tD="undefined"!=typeof globalThis&&globalThis,nD="undefined"!=typeof window&&window,rD="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,oD="undefined"!=typeof global&&global,ne=tD||oD||nD||rD,yr={},ie=[],Qi=ee({\u0275cmp:ee}),Ja=ee({\u0275dir:ee}),Xa=ee({\u0275pipe:ee}),cf=ee({\u0275mod:ee}),iD=ee({\u0275loc:ee}),gn=ee({\u0275fac:ee}),Ao=ee({__NG_ELEMENT_ID__:ee});let sD=0;function xn(e){return Sn(()=>{const n={},r={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===yt.OnPush,directiveDefs:null,pipeDefs:null,selectors:e.selectors||ie,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||Se.Emulated,id:"c",styles:e.styles||ie,_:null,setInput:null,schemas:e.schemas||null,tView:null},o=e.directives,i=e.features,s=e.pipes;return r.id+=sD++,r.inputs=hf(e.inputs,n),r.outputs=hf(e.outputs),i&&i.forEach(a=>a(r)),r.directiveDefs=o?()=>("function"==typeof o?o():o).map(uf):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(df):null,r})}function uf(e){return Ke(e)||function(e){return e[Ja]||null}(e)}function df(e){return function(e){return e[Xa]||null}(e)}const ff={};function mn(e){return Sn(()=>{const t={type:e.type,bootstrap:e.bootstrap||ie,declarations:e.declarations||ie,imports:e.imports||ie,exports:e.exports||ie,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null};return null!=e.id&&(ff[e.id]=e.type),t})}function hf(e,t){if(null==e)return yr;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}const L=xn;function ot(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,onDestroy:e.type.prototype.ngOnDestroy||null}}function Ke(e){return e[Qi]||null}function Ct(e,t){const n=e[cf]||null;if(!n&&!0===t)throw new Error(`Type ${W(e)} does not have '\u0275mod' property.`);return n}const G=11;function Yt(e){return Array.isArray(e)&&"object"==typeof e[1]}function Pt(e){return Array.isArray(e)&&!0===e[1]}function nl(e){return 0!=(8&e.flags)}function Ji(e){return 2==(2&e.flags)}function Xi(e){return 1==(1&e.flags)}function Vt(e){return null!==e.template}function hD(e){return 0!=(512&e[2])}function Xn(e,t){return e.hasOwnProperty(gn)?e[gn]:null}class gf{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function ft(){return mf}function mf(e){return e.type.prototype.ngOnChanges&&(e.setInput=_D),mD}function mD(){const e=yf(this),t=null==e?void 0:e.current;if(t){const n=e.previous;if(n===yr)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function _D(e,t,n,r){const o=yf(e)||function(e,t){return e[_f]=t}(e,{previous:yr,current:null}),i=o.current||(o.current={}),s=o.previous,a=this.declaredInputs[n],l=s[a];i[a]=new gf(l&&l.currentValue,t,s===yr),e[r]=t}ft.ngInherit=!0;const _f="__ngSimpleChanges__";function yf(e){return e[_f]||null}const Cf="http://www.w3.org/2000/svg";let il;function ve(e){return!!e.listen}const Df={createRenderer:(e,t)=>void 0!==il?il:"undefined"!=typeof document?document:void 0};function Me(e){for(;Array.isArray(e);)e=e[0];return e}function es(e,t){return Me(t[e])}function bt(e,t){return Me(t[e.index])}function al(e,t){return e.data[t]}function ht(e,t){const n=t[e];return Yt(n)?n:n[0]}function ll(e){return 128==(128&e[2])}function Rn(e,t){return null==t?null:e[t]}function Ef(e){e[18]=0}function cl(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const B={lFrame:Nf(null),bindingsEnabled:!0,isInCheckNoChangesMode:!1};function wf(){return B.bindingsEnabled}function b(){return B.lFrame.lView}function J(){return B.lFrame.tView}function le(e){return B.lFrame.contextLView=e,e[8]}function xe(){let e=If();for(;null!==e&&64===e.type;)e=e.parent;return e}function If(){return B.lFrame.currentTNode}function Zt(e,t){const n=B.lFrame;n.currentTNode=e,n.isParent=t}function ul(){return B.lFrame.isParent}function dl(){B.lFrame.isParent=!1}function ts(){return B.isInCheckNoChangesMode}function ns(e){B.isInCheckNoChangesMode=e}function Ye(){const e=B.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function wr(){return B.lFrame.bindingIndex++}function _n(e){const t=B.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function RD(e,t){const n=B.lFrame;n.bindingIndex=n.bindingRootIndex=e,fl(t)}function fl(e){B.lFrame.currentDirectiveIndex=e}function pl(e){B.lFrame.currentQueryIndex=e}function OD(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Sf(e,t,n){if(n&O.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&O.Host||(o=OD(i),null===o||(i=i[15],10&o.type))););if(null===o)return!1;t=o,e=i}const r=B.lFrame=xf();return r.currentTNode=t,r.lView=e,!0}function rs(e){const t=xf(),n=e[1];B.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function xf(){const e=B.lFrame,t=null===e?null:e.child;return null===t?Nf(e):t}function Nf(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function Rf(){const e=B.lFrame;return B.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Ff=Rf;function os(){const e=Rf();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Ze(){return B.lFrame.selectedIndex}function Fn(e){B.lFrame.selectedIndex=e}function De(){const e=B.lFrame;return al(e.tView,e.selectedIndex)}function is(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[l]<0&&(e[18]+=65536),(a>11>16&&(3&e[2])===t){e[2]+=2048;try{i.call(a)}finally{}}}else try{i.call(a)}finally{}}class Fo{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function ls(e,t,n){const r=ve(e);let o=0;for(;ot){s=i-1;break}}}for(;i>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let yl=!0;function us(e){const t=yl;return yl=e,t}let QD=0;function Po(e,t){const n=vl(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,Cl(r.data,e),Cl(t,null),Cl(r.blueprint,null));const o=ds(e,t),i=e.injectorIndex;if(Lf(o)){const s=Ir(o),a=Mr(o,t),l=a[1].data;for(let c=0;c<8;c++)t[i+c]=a[s+c]|l[s+c]}return t[i+8]=o,i}function Cl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function vl(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function ds(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){const i=o[1],s=i.type;if(r=2===s?i.declTNode:1===s?o[6]:null,null===r)return-1;if(n++,o=o[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function fs(e,t,n){!function(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(Ao)&&(r=n[Ao]),null==r&&(r=n[Ao]=QD++);const o=255&r;t.data[e+(o>>5)]|=1<=0?255&t:ZD:t}(n);if("function"==typeof i){if(!Sf(t,e,r))return r&O.Host?jf(o,n,r):$f(t,n,r,o);try{const s=i(r);if(null!=s||r&O.Optional)return s;Wi(n)}finally{Ff()}}else if("number"==typeof i){let s=null,a=vl(e,t),l=-1,c=r&O.Host?t[16][6]:null;for((-1===a||r&O.SkipSelf)&&(l=-1===a?ds(e,t):t[a+8],-1!==l&&Wf(r,!1)?(s=t[1],a=Ir(l),t=Mr(l,t)):a=-1);-1!==a;){const u=t[1];if(zf(i,a,u.data)){const d=JD(a,t,n,s,r,c);if(d!==Gf)return d}l=t[a+8],-1!==l&&Wf(r,t[1].data[a+8]===c)&&zf(i,a,t)?(s=u,a=Ir(l),t=Mr(l,t)):a=-1}}}return $f(t,n,r,o)}const Gf={};function ZD(){return new Tr(xe(),b())}function JD(e,t,n,r,o,i){const s=t[1],a=s.data[e+8],u=function(e,t,n,r,o){const i=e.providerIndexes,s=t.data,a=1048575&i,l=e.directiveStart,u=i>>20,f=o?a+u:e.directiveEnd;for(let h=r?a:a+u;h=l&&p.type===n)return h}if(o){const h=s[l];if(h&&Vt(h)&&h.type===n)return l}return null}(a,s,n,null==r?Ji(a)&&yl:r!=s&&0!=(3&a.type),o&O.Host&&i===a);return null!==u?Vo(t,s,u,a):Gf}function Vo(e,t,n,r){let o=e[n];const i=t.data;if(function(e){return e instanceof Fo}(o)){const s=o;s.resolving&&function(e,t){throw new Qn("200",`Circular dependency in DI detected for ${e}`)}(Qe(i[n]));const a=us(s.canSeeViewProviders);s.resolving=!0;const l=s.injectImpl?An(s.injectImpl):null;Sf(e,r,O.Default);try{o=e[n]=s.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const s=mf(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,s)}o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,o),i&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,i),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,i))}(n,i[n],t)}finally{null!==l&&An(l),us(a),s.resolving=!1,Ff()}}return o}function zf(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[gn]||Dl(t),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[gn]||Dl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Dl(e){return rf(e)?()=>{const t=Dl(N(e));return t&&t()}:Xn(e)}const Sr="__parameters__";function er(e,t,n){return Sn(()=>{const r=function(e){return function(...n){if(e){const r=e(...n);for(const o in r)this[o]=r[o]}}}(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;const s=new o(...i);return a.annotation=s,a;function a(l,c,u){const d=l.hasOwnProperty(Sr)?l[Sr]:Object.defineProperty(l,Sr,{value:[]})[Sr];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),l}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}class X{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=te({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}toString(){return`InjectionToken ${this._desc}`}}function Xt(e,t){e.forEach(n=>Array.isArray(n)?Xt(n,t):t(n))}function gs(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function tr(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function pt(e,t,n){let r=Nr(e,t);return r>=0?e[1|r]=n:(r=~r,function(e,t,n,r){let o=e.length;if(o==t)e.push(n,r);else if(1===o)e.push(r,e[0]),e[0]=n;else{for(o--,e.push(e[o-1],e[o]);o>t;)e[o]=e[o-2],o--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Il(e,t){const n=Nr(e,t);if(n>=0)return e[1|n]}function Nr(e,t){return function(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){const i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o< ");else if("object"==typeof t){let i=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];i.push(s+":"+("string"==typeof a?JSON.stringify(a):W(a)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(db,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[Rr]=null,e}const Uo=$o(er("Inject",e=>({token:e})),-1),en=$o(er("Optional"),8),rr=$o(er("SkipSelf"),4);class or{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see https://g.co/ng/security#xss)`}}function gt(e){return e instanceof or?e.changingThisBreaksApplicationSecurity:e}function tn(e,t){const n=function(e){return e instanceof or&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see https://g.co/ng/security#xss)`)}return n===t}const Lb=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi,Bb=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;var ce=(()=>((ce=ce||{})[ce.NONE=0]="NONE",ce[ce.HTML=1]="HTML",ce[ce.STYLE=2]="STYLE",ce[ce.SCRIPT=3]="SCRIPT",ce[ce.URL=4]="URL",ce[ce.RESOURCE_URL=5]="RESOURCE_URL",ce))();function Vr(e){const t=function(){const e=b();return e&&e[12]}();return t?t.sanitize(ce.URL,e)||"":tn(e,"URL")?gt(e):function(e){return(e=String(e)).match(Lb)||e.match(Bb)?e:"unsafe:"+e}(U(e))}const _h="__ngContext__";function He(e,t){e[_h]=t}function Ll(e){const t=function(e){return e[_h]||null}(e);return t?Array.isArray(t)?t:t.lView:null}function bs(e){return e.ngOriginalError}function aE(e,...t){e.error(...t)}class ir{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t),r=this._findContext(t),o=function(e){return e&&e.ngErrorLogger||aE}(t);o(this._console,"ERROR",t),n&&o(this._console,"ORIGINAL ERROR",n),r&&o(this._console,"ERROR CONTEXT",r)}_findContext(t){return t?function(e){return e.ngDebugContext}(t)||this._findContext(bs(t)):null}_findOriginalError(t){let n=t&&bs(t);for(;n&&bs(n);)n=bs(n);return n||null}}const Mh=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(ne))();function Hl(e){return e.ownerDocument.defaultView}function rn(e){return e instanceof Function?e():e}var mt=(()=>((mt=mt||{})[mt.Important=1]="Important",mt[mt.DashCase=2]="DashCase",mt))();function $l(e,t){return undefined(e,t)}function Ko(e){const t=e[3];return Pt(t)?t[3]:t}function Ul(e){return Nh(e[13])}function Gl(e){return Nh(e[4])}function Nh(e){for(;null!==e&&!Pt(e);)e=e[4];return e}function Lr(e,t,n,r,o){if(null!=r){let i,s=!1;Pt(r)?i=r:Yt(r)&&(s=!0,r=r[0]);const a=Me(r);0===e&&null!==n?null==o?kh(t,n,a):sr(t,n,a,o||null,!0):1===e&&null!==n?sr(t,n,a,o||null,!0):2===e?function(e,t,n){const r=ws(e,t);r&&function(e,t,n,r){ve(e)?e.removeChild(t,n,r):t.removeChild(n)}(e,r,t,n)}(t,a,s):3===e&&t.destroyNode(a),null!=i&&function(e,t,n,r,o){const i=n[7];i!==Me(n)&&Lr(t,e,r,i,o);for(let a=10;a0&&(e[n-1][4]=r[4]);const i=tr(e,10+t);!function(e,t){Yo(e,t,t[G],2,null,null),t[0]=null,t[6]=null}(r[1],r);const s=i[19];null!==s&&s.detachView(i[1]),r[3]=null,r[4]=null,r[2]&=-129}return r}function Oh(e,t){if(!(256&t[2])){const n=t[G];ve(n)&&n.destroyNode&&Yo(e,t,n,3,null,null),function(e){let t=e[13];if(!t)return Ql(e[1],e);for(;t;){let n=null;if(Yt(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Yt(t)&&Ql(t[1],t),t=t[3];null===t&&(t=e),Yt(t)&&Ql(t[1],t),n=t&&t[4]}t=n}}(t)}}function Ql(e,t){if(!(256&t[2])){t[2]&=-129,t[2]|=256,function(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[o=c]():r[o=-c].unsubscribe(),i+=2}else{const s=r[o=n[i+1]];n[i].call(s)}if(null!==r){for(let i=o+1;ii?"":o[d+1].toLowerCase();const h=8&r?f:null;if(h&&-1!==qh(h,c,0)||2&r&&c!==f){if(kt(r))return!1;s=!0}}}}else{if(!s&&!kt(r)&&!kt(l))return!1;if(s&&kt(l))continue;s=!1,r=l|1&r}}return kt(r)||s}function kt(e){return 0==(1&e)}function PE(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&r?o+="."+s:4&r&&(o+=" "+s);else""!==o&&!kt(s)&&(t+=Zh(i,o),o=""),r=s,i=i||!kt(r);n++}return""!==o&&(t+=Zh(i,o)),t}const j={};function g(e){Jh(J(),b(),Ze()+e,ts())}function Jh(e,t,n,r){if(!r)if(3==(3&t[2])){const i=e.preOrderCheckHooks;null!==i&&ss(t,i,n)}else{const i=e.preOrderHooks;null!==i&&as(t,i,0,n)}Fn(n)}function Ts(e,t){return e<<17|t<<2}function Lt(e){return e>>17&32767}function Xl(e){return 2|e}function yn(e){return(131068&e)>>2}function ec(e,t){return-131069&e|t<<2}function tc(e){return 1|e}function lp(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r20&&Jh(e,t,20,ts()),n(r,o)}finally{Fn(i)}}function up(e,t,n){if(nl(t)){const o=t.directiveEnd;for(let i=t.directiveStart;i0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(a)!=l&&a.push(l),a.push(r,o,s)}}function yp(e,t){null!==e.hostBindings&&e.hostBindings(1,t)}function Cp(e,t){t.flags|=2,(e.components||(e.components=[])).push(t.index)}function fw(e,t,n){if(n){if(t.exportAs)for(let r=0;r0&&hc(n)}}function hc(e){for(let r=Ul(e);null!==r;r=Gl(r))for(let o=10;o0&&hc(i)}const n=e[1].components;if(null!==n)for(let r=0;r0&&hc(o)}}function Cw(e,t){const n=ht(t,e),r=n[1];(function(e,t){for(let n=t.length;nPromise.resolve(null))();function wp(e){return e[7]||(e[7]=[])}function Ip(e){return e.cleanup||(e.cleanup=[])}function Tp(e,t){const n=e[9],r=n?n.get(ir,null):null;r&&r.handleError(t)}function Ap(e,t,n,r,o){for(let i=0;ithis.processProvider(a,t,n)),Xt([t],a=>this.processInjectorType(a,[],i)),this.records.set($r,Ur(void 0,this));const s=this.records.get(Xo);this.scope=null!=s?s.value:null,this.source=o||("object"==typeof t?null:W(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,n=Ho,r=O.Default){this.assertNotDestroyed();const o=Fr(this),i=An(void 0);try{if(!(r&O.SkipSelf)){let a=this.records.get(t);if(void 0===a){const l=function(e){return"function"==typeof e||"object"==typeof e&&e instanceof X}(t)&&pn(t);a=l&&this.injectableDefInScope(l)?Ur(Cc(t),ei):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(r&O.Self?xp():this.parent).get(t,n=r&O.Optional&&n===Ho?null:n)}catch(s){if("NullInjectorError"===s.name){if((s[Rr]=s[Rr]||[]).unshift(W(t)),o)throw s;return Jf(s,t,"R3InjectorError",this.source)}throw s}finally{An(i),Fr(o)}}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(t=>this.get(t))}toString(){const t=[];return this.records.forEach((r,o)=>t.push(W(o))),`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error("Injector has already been destroyed.")}processInjectorType(t,n,r){if(!(t=N(t)))return!1;let o=sf(t);const i=null==o&&t.ngModule||void 0,s=void 0===i?t:i,a=-1!==r.indexOf(s);if(void 0!==i&&(o=sf(i)),null==o)return!1;if(null!=o.imports&&!a){let u;r.push(s);try{Xt(o.imports,d=>{this.processInjectorType(d,n,r)&&(void 0===u&&(u=[]),u.push(d))})}finally{}if(void 0!==u)for(let d=0;dthis.processProvider(p,f,h||ie))}}this.injectorDefTypes.add(s);const l=Xn(s)||(()=>new s);this.records.set(s,Ur(l,ei));const c=o.providers;if(null!=c&&!a){const u=t;Xt(c,d=>this.processProvider(d,u,c))}return void 0!==i&&void 0!==t.providers}processProvider(t,n,r){let o=Gr(t=N(t))?t:N(t&&t.provide);const i=function(e,t,n){return Fp(e)?Ur(void 0,e.useValue):Ur(Rp(e),ei)}(t);if(Gr(t)||!0!==t.multi)this.records.get(o);else{let s=this.records.get(o);s||(s=Ur(void 0,ei,!0),s.factory=()=>nr(s.multi),this.records.set(o,s)),o=t,s.multi.push(t)}this.records.set(o,i)}hydrate(t,n){return n.value===ei&&(n.value=Tw,n.value=n.factory()),"object"==typeof n.value&&n.value&&function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this.onDestroy.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=N(t.providedIn);return"string"==typeof n?"any"===n||n===this.scope:this.injectorDefTypes.has(n)}}function Cc(e){const t=pn(e),n=null!==t?t.factory:Xn(e);if(null!==n)return n;if(e instanceof X)throw new Error(`Token ${W(e)} is missing a \u0275prov definition.`);if(e instanceof Function)return function(e){const t=e.length;if(t>0){const r=function(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new Error("unreachable")}function Rp(e,t,n){let r;if(Gr(e)){const o=N(e);return Xn(o)||Cc(o)}if(Fp(e))r=()=>N(e.useValue);else if(function(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...nr(e.deps||[]));else if(function(e){return!(!e||!e.useExisting)}(e))r=()=>Y(N(e.useExisting));else{const o=N(e&&(e.useClass||e.provide));if(!function(e){return!!e.deps}(e))return Xn(o)||Cc(o);r=()=>new o(...nr(e.deps))}return r}function Ur(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Fp(e){return null!==e&&"object"==typeof e&&Sl in e}function Gr(e){return"function"==typeof e}const Op=function(e,t,n){return function(e,t=null,n=null,r){const o=Np(e,t,n,r);return o._resolveInjectorDefTypes(),o}({name:n},t,e,n)};let pe=(()=>{class e{static create(n,r){return Array.isArray(n)?Op(n,r,""):Op(n.providers,n.parent,n.name||"")}}return e.THROW_IF_NOT_FOUND=Ho,e.NULL=new Sp,e.\u0275prov=te({token:e,providedIn:"any",factory:()=>Y($r)}),e.__NG_ELEMENT_ID__=-1,e})();function Yw(e,t){is(Ll(e)[1],xe())}function ge(e){let t=function(e){return Object.getPrototypeOf(e.prototype).constructor}(e.type),n=!0;const r=[e];for(;t;){let o;if(Vt(e))o=t.\u0275cmp||t.\u0275dir;else{if(t.\u0275cmp)throw new Error("Directives cannot inherit Components");o=t.\u0275dir}if(o){if(n){r.push(o);const s=e;s.inputs=Ic(e.inputs),s.declaredInputs=Ic(e.declaredInputs),s.outputs=Ic(e.outputs);const a=o.hostBindings;a&&e0(e,a);const l=o.viewQuery,c=o.contentQueries;if(l&&Jw(e,l),c&&Xw(e,c),qa(e.inputs,o.inputs),qa(e.declaredInputs,o.declaredInputs),qa(e.outputs,o.outputs),Vt(o)&&o.data.animation){const u=e.data;u.animation=(u.animation||[]).concat(o.data.animation)}}const i=o.features;if(i)for(let s=0;s=0;r--){const o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=cs(o.hostAttrs,n=cs(n,o.hostAttrs))}}(r)}function Ic(e){return e===yr?{}:e===ie?[]:e}function Jw(e,t){const n=e.viewQuery;e.viewQuery=n?(r,o)=>{t(r,o),n(r,o)}:t}function Xw(e,t){const n=e.contentQueries;e.contentQueries=n?(r,o,i)=>{t(r,o,i),n(r,o,i)}:t}function e0(e,t){const n=e.hostBindings;e.hostBindings=n?(r,o)=>{t(r,o),n(r,o)}:t}let Fs=null;function zr(){if(!Fs){const e=ne.Symbol;if(e&&e.iterator)Fs=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;na(Me(R[r.index])):r.index;if(ve(n)){let R=null;if(!a&&l&&(R=function(e,t,n,r){const o=e.cleanup;if(null!=o)for(let i=0;il?a[l]:null}"string"==typeof s&&(i+=2)}return null}(e,t,o,r.index)),null!==R)(R.__ngLastListenerFn__||R).__ngNextListenerFn__=i,R.__ngLastListenerFn__=i,h=!1;else{i=Fc(r,t,d,i,!1);const q=n.listen(E,o,i);f.push(i,q),u&&u.push(o,x,v,v+1)}}else i=Fc(r,t,d,i,!0),E.addEventListener(o,i,s),f.push(i),u&&u.push(o,x,v,s)}else i=Fc(r,t,d,i,!1);const p=r.outputs;let _;if(h&&null!==p&&(_=p[o])){const m=_.length;if(m)for(let E=0;E0;)t=t[15],e--;return t}(e,B.lFrame.contextLView))[8]}(e)}function oi(e,t,n){return Oc(e,"",t,"",n),oi}function Oc(e,t,n,r,o){const i=b(),s=qr(i,t,n,r);return s!==j&&_t(J(),De(),i,e,s,i[G],o,!1),Oc}function xg(e,t,n,r,o){const i=e[n+1],s=null===t;let a=r?Lt(i):yn(i),l=!1;for(;0!==a&&(!1===l||s);){const u=e[a+1];j0(e[a],t)&&(l=!0,e[a+1]=r?tc(u):Xl(u)),a=r?Lt(u):yn(u)}l&&(e[n+1]=r?Xl(i):tc(i))}function j0(e,t){return null===e||null==t||(Array.isArray(e)?e[1]:e)===t||!(!Array.isArray(e)||"string"!=typeof t)&&Nr(e,t)>=0}const Re={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Ng(e){return e.substring(Re.key,Re.keyEnd)}function Rg(e,t){const n=Re.textEnd;return n===t?-1:(t=Re.keyEnd=function(e,t,n){for(;t32;)t++;return t}(e,Re.key=t,n),no(e,t,n))}function no(e,t,n){for(;t=0;n=Rg(t,n))pt(e,Ng(t),!0)}function Lg(e,t){return t>=e.expandoStartIndex}function Bg(e,t,n,r){const o=e.data;if(null===o[n+1]){const i=o[Ze()],s=Lg(e,n);Ug(i,r)&&null===t&&!s&&(t=!1),t=function(e,t,n,r){const o=function(e){const t=B.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let i=r?t.residualClasses:t.residualStyles;if(null===o)0===(r?t.classBindings:t.styleBindings)&&(n=ii(n=Pc(null,e,t,n,r),t.attrs,r),i=null);else{const s=t.directiveStylingLast;if(-1===s||e[s]!==o)if(n=Pc(o,e,t,n,r),null===i){let l=function(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==yn(r))return e[Lt(r)]}(e,t,r);void 0!==l&&Array.isArray(l)&&(l=Pc(null,e,t,l[1],r),l=ii(l,t.attrs,r),function(e,t,n,r){e[Lt(n?t.classBindings:t.styleBindings)]=r}(e,t,r,l))}else i=function(e,t,n){let r;const o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0)&&(c=!0)}else u=n;if(o)if(0!==l){const f=Lt(e[a+1]);e[r+1]=Ts(f,a),0!==f&&(e[f+1]=ec(e[f+1],r)),e[a+1]=function(e,t){return 131071&e|t<<17}(e[a+1],r)}else e[r+1]=Ts(a,0),0!==a&&(e[a+1]=ec(e[a+1],r)),a=r;else e[r+1]=Ts(l,0),0===a?a=r:e[l+1]=ec(e[l+1],r),l=r;c&&(e[r+1]=Xl(e[r+1])),xg(e,u,r,!0),xg(e,u,r,!1),function(e,t,n,r,o){const i=o?e.residualClasses:e.residualStyles;null!=i&&"string"==typeof t&&Nr(i,t)>=0&&(n[r+1]=tc(n[r+1]))}(t,u,e,r,i),s=Ts(a,l),i?t.classBindings=s:t.styleBindings=s}(o,i,t,n,s,r)}}function Pc(e,t,n,r,o){let i=null;const s=n.directiveEnd;let a=n.directiveStylingLast;for(-1===a?a=n.directiveStart:a++;a0;){const l=e[o],c=Array.isArray(l),u=c?l[1]:l,d=null===u;let f=n[o+1];f===j&&(f=d?ie:void 0);let h=d?Il(f,r):u===r?f:void 0;if(c&&!Ls(h)&&(h=Il(l,r)),Ls(h)&&(a=h,s))return a;const p=e[o+1];o=s?Lt(p):yn(p)}if(null!==t){let l=i?t.residualClasses:t.residualStyles;null!=l&&(a=Il(l,r))}return a}function Ls(e){return void 0!==e}function Ug(e,t){return 0!=(e.flags&(t?16:32))}function M(e,t=""){const n=b(),r=J(),o=e+20,i=r.firstCreatePass?Br(r,o,1,t,null):r.data[o],s=n[o]=function(e,t){return ve(e)?e.createText(t):e.createTextNode(t)}(n[G],t);Is(r,n,s,i),Zt(i,!1)}function P(e){return oe("",e,""),P}function oe(e,t,n){const r=b(),o=qr(r,e,t,n);return o!==j&&vn(r,Ze(),o),oe}function Ln(e,t,n){!function(e,t,n,r){const o=J(),i=_n(2);o.firstUpdatePass&&Bg(o,null,i,r);const s=b();if(n!==j&&je(s,i,n)){const a=o.data[Ze()];if(Ug(a,r)&&!Lg(o,i)){let l=r?a.classesWithoutHost:a.stylesWithoutHost;null!==l&&(n=Qa(l,n||"")),Nc(o,a,s,n,r)}else!function(e,t,n,r,o,i,s,a){o===j&&(o=ie);let l=0,c=0,u=0((A=A||{})[A.LocaleId=0]="LocaleId",A[A.DayPeriodsFormat=1]="DayPeriodsFormat",A[A.DayPeriodsStandalone=2]="DayPeriodsStandalone",A[A.DaysFormat=3]="DaysFormat",A[A.DaysStandalone=4]="DaysStandalone",A[A.MonthsFormat=5]="MonthsFormat",A[A.MonthsStandalone=6]="MonthsStandalone",A[A.Eras=7]="Eras",A[A.FirstDayOfWeek=8]="FirstDayOfWeek",A[A.WeekendRange=9]="WeekendRange",A[A.DateFormat=10]="DateFormat",A[A.TimeFormat=11]="TimeFormat",A[A.DateTimeFormat=12]="DateTimeFormat",A[A.NumberSymbols=13]="NumberSymbols",A[A.NumberFormats=14]="NumberFormats",A[A.CurrencyCode=15]="CurrencyCode",A[A.CurrencySymbol=16]="CurrencySymbol",A[A.CurrencyName=17]="CurrencyName",A[A.Currencies=18]="Currencies",A[A.Directionality=19]="Directionality",A[A.PluralCase=20]="PluralCase",A[A.ExtraData=21]="ExtraData",A))();const Bs="en-US";let dm=Bs;function Vc(e){ut(e,"Expected localeId to be defined"),"string"==typeof e&&(dm=e.toLowerCase().replace(/_/g,"-"))}function Bc(e,t,n,r,o){if(e=N(e),Array.isArray(e))for(let i=0;i>20;if(Gr(e)||!e.multi){const h=new Fo(l,o,I),p=jc(a,t,o?u:u+f,d);-1===p?(fs(Po(c,s),i,a),Hc(i,e,t.length),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(h),s.push(h)):(n[p]=h,s[p]=h)}else{const h=jc(a,t,u+f,d),p=jc(a,t,u,u+f),_=h>=0&&n[h],m=p>=0&&n[p];if(o&&!m||!o&&!_){fs(Po(c,s),i,a);const E=function(e,t,n,r,o){const i=new Fo(e,n,I);return i.multi=[],i.index=t,i.componentProviders=0,Pm(i,o,r&&!n),i}(o?y1:_1,n.length,o,r,l);!o&&m&&(n[p].providerFactory=E),Hc(i,e,t.length,0),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(E),s.push(E)}else Hc(i,e,h>-1?h:p,Pm(n[o?p:h],l,!o&&r));!o&&r&&m&&n[p].componentProviders++}}}function Hc(e,t,n,r){const o=Gr(t);if(o||function(e){return!!e.useClass}(t)){const s=(t.useClass||t).prototype.ngOnDestroy;if(s){const a=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){const l=a.indexOf(n);-1===l?a.push(n,[r,s]):a[l+1].push(r,s)}else a.push(n,s)}}}function Pm(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function jc(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>function(e,t,n){const r=J();if(r.firstCreatePass){const o=Vt(e);Bc(n,r.data,r.blueprint,o,!0),Bc(t,r.data,r.blueprint,o,!1)}}(r,o?o(e):e,t)}}class Vm{}const Lm="ngComponent";class D1{resolveComponentFactory(t){throw function(e){const t=Error(`No component factory found for ${W(e)}. Did you add it to @NgModule.entryComponents?`);return t[Lm]=e,t}(t)}}let io=(()=>{class e{}return e.NULL=new D1,e})();function Gs(...e){}function so(e,t){return new $e(bt(e,t))}const w1=function(){return so(xe(),b())};let $e=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=w1,e})();class zs{}let cr=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>M1(),e})();const M1=function(){const e=b(),n=ht(xe().index,e);return function(e){return e[G]}(Yt(n)?n:e)};let Gc=(()=>{class e{}return e.\u0275prov=te({token:e,providedIn:"root",factory:()=>null}),e})();class Ws{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const Hm=new Ws("12.2.6");class jm{constructor(){}supports(t){return ni(t)}create(t){return new x1(t)}}const S1=(e,t)=>t;class x1{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||S1}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){const s=!r||n&&n.currentIndex{s=this._trackByFn(o,a),null!==n&&Object.is(n.trackById,s)?(r&&(n=this._verifyReinsertion(n,a,s,o)),Object.is(n.item,a)||this._addIdentityChange(n,a)):(n=this._mismatch(n,a,s,o),r=!0),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return null===t?i=this._itTail:(i=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,o))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new N1(n,r),i,o),t}_verifyReinsertion(t,n,r,o){let i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==i?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const o=t._prevRemoved,i=t._nextRemoved;return null===o?this._removalsHead=i:o._nextRemoved=i,null===i?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const o=null===n?this._itHead:n._next;return t._next=o,t._prev=n,null===o?this._itTail=t:o._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new $m),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new $m),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class N1{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class R1{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class $m{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new R1,this.map.set(n,r)),r.add(t)}get(t,n){const o=this.map.get(t);return o?o.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Um(e,t,n){const r=e.previousIndex;if(null===r)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const o=this._records.get(t);this._maybeAddToChanges(o,n);const i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}const r=new O1(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class O1{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function zm(){return new ui([new jm])}let ui=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||zm()),deps:[[e,new rr,new en]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(null!=r)return r;throw new Error(`Cannot find a differ supporting object '${n}' of type '${function(e){return e.name||typeof e}(n)}'`)}}return e.\u0275prov=te({token:e,providedIn:"root",factory:zm}),e})();function Wm(){return new ao([new Gm])}let ao=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Wm()),deps:[[e,new rr,new en]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(r)return r;throw new Error(`Cannot find a differ supporting object '${n}'`)}}return e.\u0275prov=te({token:e,providedIn:"root",factory:Wm}),e})();function qs(e,t,n,r,o=!1){for(;null!==n;){const i=t[n.index];if(null!==i&&r.push(Me(i)),Pt(i))for(let a=10;a-1&&(ql(t,r),tr(n,r))}this._attachedToViewContainer=!1}Oh(this._lView[1],this._lView)}onDestroy(t){!function(e,t,n,r){const o=wp(t);null===n?o.push(r):(o.push(n),e.firstCreatePass&&Ip(e).push(r,o.length-1))}(this._lView[1],this._lView,null,t)}markForCheck(){pc(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){mc(this._lView[1],this._lView,this.context)}checkNoChanges(){!function(e,t,n){ns(!0);try{mc(e,t,n)}finally{ns(!1)}}(this._lView[1],this._lView,this.context)}attachToViewContainerRef(){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function(e,t){Yo(e,t,t[G],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}}class V1 extends di{constructor(t){super(t),this._view=t}detectChanges(){Ep(this._view)}checkNoChanges(){!function(e){ns(!0);try{Ep(e)}finally{ns(!1)}}(this._view)}get context(){return null}}const $1=[new Gm],G1=new ui([new jm]),z1=new ao($1),q1=function(){return function(e,t){return 4&e.type?new K1(t,e,so(e,t)):null}(xe(),b())};let bn=(()=>{class e{}return e.__NG_ELEMENT_ID__=q1,e})();const Q1=bn,K1=class extends Q1{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t){const n=this._declarationTContainer.tViews,r=Zo(this._declarationLView,n,t,16,null,n.declTNode,null,null,null,null);r[17]=this._declarationLView[this._declarationTContainer.index];const i=this._declarationLView[19];return null!==i&&(r[19]=i.createEmbeddedView(n)),Jo(n,r,t),new di(r)}};class ur{}const X1=function(){return function(e,t){let n;const r=t[e.index];if(Pt(r))n=r;else{let o;if(8&e.type)o=Me(r);else{const i=t[G];o=i.createComment("");const s=bt(e,t);sr(i,ws(i,s),o,function(e,t){return ve(e)?e.nextSibling(t):t.nextSibling}(i,s),!1)}t[e.index]=n=bp(r,t,o,e),Ns(t,n)}return new qm(n,e,t)}(xe(),b())};let dn=(()=>{class e{}return e.__NG_ELEMENT_ID__=X1,e})();const tM=dn,qm=class extends tM{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return so(this._hostTNode,this._hostLView)}get injector(){return new Tr(this._hostTNode,this._hostLView)}get parentInjector(){const t=ds(this._hostTNode,this._hostLView);if(Lf(t)){const n=Mr(t,this._hostLView),r=Ir(t);return new Tr(n[1].data[r+8],n)}return new Tr(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=Qm(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){const o=t.createEmbeddedView(n||{});return this.insert(o,r),o}createComponent(t,n,r,o,i){const s=r||this.parentInjector;if(!i&&null==t.ngModule&&s){const l=s.get(ur,null);l&&(i=l)}const a=t.create(s,o,void 0,i);return this.insert(a.hostView,n),a}insert(t,n){const r=t._lView,o=r[1];if(function(e){return Pt(e[3])}(r)){const u=this.indexOf(t);if(-1!==u)this.detach(u);else{const d=r[3],f=new qm(d,d[6],d[3]);f.detach(f.indexOf(t))}}const i=this._adjustIndex(n),s=this._lContainer;!function(e,t,n,r){const o=10+r,i=n.length;r>0&&(n[o-1][4]=t),rMh});class __ extends Vm{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function(e){return e.map(HE).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return m_(this.componentDef.inputs)}get outputs(){return m_(this.componentDef.outputs)}create(t,n,r,o){const i=(o=o||this.ngModule)?function(e,t){return{get:(n,r,o)=>{const i=e.get(n,fo,o);return i!==fo||r===fo?i:t.get(n,r,o)}}}(t,o.injector):t,s=i.get(zs,Df),a=i.get(Gc,null),l=s.createRenderer(null,this.componentDef),c=this.componentDef.selectors[0][0]||"div",u=r?function(e,t,n){if(ve(e))return e.selectRootElement(t,n===Se.ShadowDom);let r="string"==typeof t?e.querySelector(t):t;return r.textContent="",r}(l,r,this.componentDef.encapsulation):Wl(s.createRenderer(null,this.componentDef),c,function(e){const t=e.toLowerCase();return"svg"===t?Cf:"math"===t?"http://www.w3.org/1998/MathML/":null}(c)),d=this.componentDef.onPush?576:528,f=function(e,t){return{components:[],scheduler:e||Mh,clean:ww,playerHandler:t||null,flags:0}}(),h=xs(0,null,null,1,0,null,null,null,null,null),p=Zo(null,h,f,d,null,null,s,l,a,i);let _,m;rs(p);try{const E=function(e,t,n,r,o,i){const s=n[1];n[20]=e;const l=Br(s,20,2,"#host",null),c=l.mergedAttrs=t.hostAttrs;null!==c&&(Rs(l,c,!0),null!==e&&(ls(o,e,c),null!==l.classes&&Jl(o,e,l.classes),null!==l.styles&&Wh(o,e,l.styles)));const u=r.createRenderer(e,t),d=Zo(n,dp(t),null,t.onPush?64:16,n[20],l,r,u,i||null,null);return s.firstCreatePass&&(fs(Po(l,n),s,t.type),Cp(s,l),vp(l,n.length,1)),Ns(n,d),n[20]=d}(u,this.componentDef,p,s,l);if(u)if(r)ls(l,u,["ng-version",Hm.full]);else{const{attrs:v,classes:x}=function(e){const t=[],n=[];let r=1,o=2;for(;r0&&Jl(l,u,x.join(" "))}if(m=al(h,20),void 0!==n){const v=m.projection=[];for(let x=0;xl(s,t)),t.contentQueries){const l=xe();t.contentQueries(1,s,l.directiveStart)}const a=xe();return!i.firstCreatePass||null===t.hostBindings&&null===t.hostAttrs||(Fn(a.index),_p(n[1],a,0,a.directiveStart,a.directiveEnd,t),yp(t,s)),s}(E,this.componentDef,p,f,[Yw]),Jo(h,p,null)}finally{os()}return new eT(this.componentType,_,so(m,p),p,m)}}class eT extends class{}{constructor(t,n,r,o,i){super(),this.location=r,this._rootLView=o,this._tNode=i,this.instance=n,this.hostView=this.changeDetectorRef=new V1(o),this.componentType=t}get injector(){return new Tr(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}}const ho=new Map;class rT extends ur{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new g_(this);const r=Ct(t),o=function(e){return e[iD]||null}(t);o&&Vc(o),this._bootstrapComponents=rn(r.bootstrap),this._r3Injector=Np(t,n,[{provide:ur,useValue:this},{provide:io,useValue:this.componentFactoryResolver}],W(t)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(t)}get(t,n=pe.THROW_IF_NOT_FOUND,r=O.Default){return t===pe||t===ur||t===$r?this:this._r3Injector.get(t,n,r)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class ou extends class{}{constructor(t){super(),this.moduleType=t,null!==Ct(t)&&function(e){const t=new Set;!function n(r){const o=Ct(r,!0),i=o.id;null!==i&&(function(e,t,n){if(t&&t!==n)throw new Error(`Duplicate module registered for ${e} - ${W(t)} vs ${W(t.name)}`)}(i,ho.get(i),r),ho.set(i,r));const s=rn(o.imports);for(const a of s)t.has(a)||(t.add(a),n(a))}(e)}(t)}create(t){return new rT(this.moduleType,t)}}function iu(e,t,n,r){return function(e,t,n,r,o,i){const s=t+n;return je(e,s,o)?sn(e,s+1,i?r.call(i,o):r(o)):Ci(e,s+1)}(b(),Ye(),e,t,n,r)}function su(e,t,n,r,o){return function(e,t,n,r,o,i,s){const a=t+n;return ar(e,a,o,i)?sn(e,a+2,s?r.call(s,o,i):r(o,i)):Ci(e,a+2)}(b(),Ye(),e,t,n,r,o)}function st(e,t,n,r,o,i){return b_(b(),Ye(),e,t,n,r,o,i)}function Ci(e,t){const n=e[t];return n===j?void 0:n}function b_(e,t,n,r,o,i,s,a){const l=t+n;return function(e,t,n,r,o){const i=ar(e,t,n,r);return je(e,t+2,o)||i}(e,l,o,i,s)?sn(e,l+3,a?r.call(a,o,i,s):r(o,i,s)):Ci(e,l+3)}function M_(e,t,n,r,o){const i=e+20,s=b(),a=function(e,t){return e[t]}(s,i);return function(e,t){Ht.isWrapped(t)&&(t=Ht.unwrap(t),e[B.lFrame.bindingIndex]=j);return t}(s,function(e,t){return e[1].data[t].pure}(s,i)?b_(s,Ye(),t,a.transform,n,r,o,a):a.transform(n,r,o))}function au(e){return t=>{setTimeout(e,void 0,t)}}const ze=class extends Ga{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){var o,i,s;let a=t,l=n||(()=>null),c=r;if(t&&"object"==typeof t){const d=t;a=null===(o=d.next)||void 0===o?void 0:o.bind(d),l=null===(i=d.error)||void 0===i?void 0:i.bind(d),c=null===(s=d.complete)||void 0===s?void 0:s.bind(d)}this.__isAsync&&(l=au(l),a&&(a=au(a)),c&&(c=au(c)));const u=super.subscribe({next:a,error:l,complete:c});return t instanceof Ee&&t.add(u),u}};Symbol;const na=new X("Application Initializer");let go=(()=>{class e{constructor(n){this.appInits=n,this.resolve=Gs,this.reject=Gs,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,o)=>{this.resolve=r,this.reject=o})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let o=0;o{i.subscribe({complete:a,error:l})});n.push(s)}}Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(Y(na,8))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Ei=new X("AppId"),rA={provide:Ei,useFactory:function(){return`${yu()}${yu()}${yu()}`},deps:[]};function yu(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const K_=new X("Platform Initializer"),Cu=new X("Platform ID"),oA=new X("appBootstrapListener");let vu=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Hn=new X("LocaleId"),Y_=new X("DefaultCurrencyCode");class sA{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}const Du=function(e){return new ou(e)},aA=Du,lA=function(e){return Promise.resolve(Du(e))},Z_=function(e){const t=Du(e),r=rn(Ct(e).declarations).reduce((o,i)=>{const s=Ke(i);return s&&o.push(new __(s)),o},[]);return new sA(t,r)},cA=Z_,uA=function(e){return Promise.resolve(Z_(e))};let oa=(()=>{class e{constructor(){this.compileModuleSync=aA,this.compileModuleAsync=lA,this.compileModuleAndAllComponentsSync=cA,this.compileModuleAndAllComponentsAsync=uA}clearCache(){}clearCacheFor(n){}getModuleId(n){}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const hA=(()=>Promise.resolve(0))();function bu(e){"undefined"==typeof Zone?hA.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class Le{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new ze(!1),this.onMicrotaskEmpty=new ze(!1),this.onStable=new ze(!1),this.onError=new ze(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function(){let e=ne.requestAnimationFrame,t=ne.cancelAnimationFrame;if("undefined"!=typeof Zone&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function(e){const t=()=>{!function(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(ne,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,wu(e),e.isCheckStableRunning=!0,Eu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),wu(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,s,a)=>{try{return J_(e),n.invokeTask(o,i,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),X_(e)}},onInvoke:(n,r,o,i,s,a,l)=>{try{return J_(e),n.invoke(o,i,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&t(),X_(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,wu(e),Eu(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Le.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(Le.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,gA,Gs,Gs);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const gA={};function Eu(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function wu(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function J_(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function X_(e){e._nesting--,Eu(e)}class yA{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new ze,this.onMicrotaskEmpty=new ze,this.onStable=new ze,this.onError=new ze}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}let Iu=(()=>{class e{constructor(n){this._ngZone=n,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Le.assertNotInAngularZone(),bu(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())bu(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(n,r,o){return[]}}return e.\u0275fac=function(n){return new(n||e)(Y(Le))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),ey=(()=>{class e{constructor(){this._applications=new Map,Mu.addToWindow(this)}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Mu.findTestabilityInTree(this,n,r)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();class CA{addToWindow(t){}findTestabilityInTree(t,n,r){return null}}let Mu=new CA,ny=!1;let zt;const oy=new X("AllowMultipleToken");function iy(e,t,n=[]){const r=`Platform: ${t}`,o=new X(r);return(i=[])=>{let s=sy();if(!s||s.injector.get(oy,!1))if(e)e(n.concat(i).concat({provide:o,useValue:!0}));else{const a=n.concat(i).concat({provide:o,useValue:!0},{provide:Xo,useValue:"platform"});!function(e){if(zt&&!zt.destroyed&&!zt.injector.get(oy,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");zt=e.get(ay);const t=e.get(K_,null);t&&t.forEach(n=>n())}(pe.create({providers:a,name:r}))}return function(e){const t=sy();if(!t)throw new Error("No platform exists!");if(!t.injector.get(e,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return t}(o)}}function sy(){return zt&&!zt.destroyed?zt:null}let ay=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const a=function(e,t){let n;return n="noop"===e?new yA:("zone.js"===e?void 0:e)||new Le({enableLongStackTrace:(ny=!0,!0),shouldCoalesceEventChangeDetection:!!(null==t?void 0:t.ngZoneEventCoalescing),shouldCoalesceRunChangeDetection:!!(null==t?void 0:t.ngZoneRunCoalescing)}),n}(r?r.ngZone:void 0,{ngZoneEventCoalescing:r&&r.ngZoneEventCoalescing||!1,ngZoneRunCoalescing:r&&r.ngZoneRunCoalescing||!1}),l=[{provide:Le,useValue:a}];return a.run(()=>{const c=pe.create({providers:l,parent:this.injector,name:n.moduleType.name}),u=n.create(c),d=u.injector.get(ir,null);if(!d)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return a.runOutsideAngular(()=>{const f=a.onError.subscribe({next:h=>{d.handleError(h)}});u.onDestroy(()=>{Tu(this._modules,u),f.unsubscribe()})}),function(e,t,n){try{const r=n();return Vs(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(d,a,()=>{const f=u.injector.get(go);return f.runInitializers(),f.donePromise.then(()=>(Vc(u.injector.get(Hn,Bs)||Bs),this._moduleDoBootstrap(u),u))})})}bootstrapModule(n,r=[]){const o=ly({},r);return function(e,t,n){const r=new ou(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(wi);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new Error(`The module ${W(n.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(n=>n.destroy()),this._destroyListeners.forEach(n=>n()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(Y(pe))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function ly(e,t){return Array.isArray(t)?t.reduce(ly,e):Object.assign(Object.assign({},e),t)}let wi=(()=>{class e{constructor(n,r,o,i,s){this._zone=n,this._injector=r,this._exceptionHandler=o,this._componentFactoryResolver=i,this._initStatus=s,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const a=new qe(c=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{c.next(this._stable),c.complete()})}),l=new qe(c=>{let u;this._zone.runOutsideAngular(()=>{u=this._zone.onStable.subscribe(()=>{Le.assertNotInAngularZone(),bu(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,c.next(!0))})})});const d=this._zone.onUnstable.subscribe(()=>{Le.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{c.next(!1)}))});return()=>{u.unsubscribe(),d.unsubscribe()}});this.isStable=function(...e){let t=Number.POSITIVE_INFINITY,n=null,r=e[e.length-1];return function(e){return e&&"function"==typeof e.schedule}(r)?(n=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(t=e.pop())):"number"==typeof r&&(t=e.pop()),null===n&&1===e.length&&e[0]instanceof qe?e[0]:Fv(t)(function(e,t){return t?ef(e,t):new qe(Yd(e))}(e,n))}(a,l.pipe(e=>nf()(function(e,t){return function(r){let o;o="function"==typeof e?e:function(){return e};const i=Object.create(r,Bv);return i.source=r,i.subjectFactory=o,i}}(Gv)(e))))}bootstrap(n,r){if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");let o;o=n instanceof Vm?n:this._componentFactoryResolver.resolveComponentFactory(n),this.componentTypes.push(o.componentType);const i=function(e){return e.isBoundToModule}(o)?void 0:this._injector.get(ur),a=o.create(pe.NULL,[],r||o.selector,i),l=a.location.nativeElement,c=a.injector.get(Iu,null),u=c&&a.injector.get(ey);return c&&u&&u.registerApplication(l,c),a.onDestroy(()=>{this.detachView(a.hostView),Tu(this.components,a),u&&u.unregisterApplication(l)}),this._loadComponent(a),a}tick(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Tu(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(oA,[]).concat(this._bootstrapListeners).forEach(o=>o(n))}ngOnDestroy(){this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return e.\u0275fac=function(n){return new(n||e)(Y(Le),Y(pe),Y(ir),Y(io),Y(go))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function Tu(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const WA=iy(null,"core",[{provide:Cu,useValue:"unknown"},{provide:ay,deps:[pe]},{provide:ey,deps:[]},{provide:vu,deps:[]}]),ZA=[{provide:wi,useClass:wi,deps:[Le,pe,ir,io,go]},{provide:ZM,deps:[Le],useFactory:function(e){let t=[];return e.onStable.subscribe(()=>{for(;t.length;)t.pop()()}),function(n){t.push(n)}}},{provide:go,useClass:go,deps:[[new en,na]]},{provide:oa,useClass:oa,deps:[]},rA,{provide:ui,useFactory:function(){return G1},deps:[]},{provide:ao,useFactory:function(){return z1},deps:[]},{provide:Hn,useFactory:function(e){return Vc(e=e||"undefined"!=typeof $localize&&$localize.locale||Bs),e},deps:[[new Uo(Hn),new en,new rr]]},{provide:Y_,useValue:"USD"}];let XA=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(Y(wi))},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:ZA}),e})(),pa=null;function gr(){return pa}const nt=new X("DocumentToken");var Te=(()=>((Te=Te||{})[Te.Zero=0]="Zero",Te[Te.One=1]="One",Te[Te.Two=2]="Two",Te[Te.Few=3]="Few",Te[Te.Many=4]="Many",Te[Te.Other=5]="Other",Te))();const ax=function(e){return function(e){const t=function(e){return e.toLowerCase().replace(/_/g,"-")}(e);let n=um(t);if(n)return n;const r=t.split("-")[0];if(n=um(r),n)return n;if("en"===r)return DI;throw new Error(`Missing locale data for the locale "${e}".`)}(e)[A.PluralCase]};class wa{}let Vx=(()=>{class e extends wa{constructor(n){super(),this.locale=n}getPluralCategory(n,r){switch(ax(r||this.locale)(n)){case Te.Zero:return"zero";case Te.One:return"one";case Te.Two:return"two";case Te.Few:return"few";case Te.Many:return"many";default:return"other"}}}return e.\u0275fac=function(n){return new(n||e)(Y(Hn))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),Ni=(()=>{class e{constructor(n,r,o,i){this._iterableDiffers=n,this._keyValueDiffers=r,this._ngEl=o,this._renderer=i,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(n){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof n?n.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(n){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof n?n.split(/\s+/):n,this._rawClass&&(ni(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const n=this._iterableDiffer.diff(this._rawClass);n&&this._applyIterableChanges(n)}else if(this._keyValueDiffer){const n=this._keyValueDiffer.diff(this._rawClass);n&&this._applyKeyValueChanges(n)}}_applyKeyValueChanges(n){n.forEachAddedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachChangedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachRemovedItem(r=>{r.previousValue&&this._toggleClass(r.key,!1)})}_applyIterableChanges(n){n.forEachAddedItem(r=>{if("string"!=typeof r.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${W(r.item)}`);this._toggleClass(r.item,!0)}),n.forEachRemovedItem(r=>this._toggleClass(r.item,!1))}_applyClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!0)):Object.keys(n).forEach(r=>this._toggleClass(r,!!n[r])))}_removeClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!1)):Object.keys(n).forEach(r=>this._toggleClass(r,!1)))}_toggleClass(n,r){(n=n.trim())&&n.split(/\s+/g).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}}return e.\u0275fac=function(n){return new(n||e)(I(ui),I(ao),I($e),I(cr))},e.\u0275dir=L({type:e,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"}}),e})();class Bx{constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Yu=(()=>{class e{constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;if(!this._differ&&n)try{this._differ=this._differs.find(n).create(this.ngForTrackBy)}catch(r){throw new Error(`Cannot find a differ supporting object '${n}' of type '${function(e){return e.name||typeof e}(n)}'. NgFor only supports binding to Iterables such as Arrays.`)}}if(this._differ){const n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){const r=[];n.forEachOperation((o,i,s)=>{if(null==o.previousIndex){const a=this._viewContainer.createEmbeddedView(this._template,new Bx(null,this._ngForOf,-1,-1),null===s?void 0:s),l=new Wy(o,a);r.push(l)}else if(null==s)this._viewContainer.remove(null===i?void 0:i);else if(null!==i){const a=this._viewContainer.get(i);this._viewContainer.move(a,s);const l=new Wy(o,a);r.push(l)}});for(let o=0;o{this._viewContainer.get(o.currentIndex).context.$implicit=o.item})}_perViewChange(n,r){n.context.$implicit=r.item}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(I(dn),I(bn),I(ui))},e.\u0275dir=L({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}}),e})();class Wy{constructor(t,n){this.record=t,this.view=n}}let yo=(()=>{class e{constructor(n,r){this._viewContainer=n,this._context=new jx,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){qy("ngIfThen",n),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){qy("ngIfElse",n),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(I(dn),I(bn))},e.\u0275dir=L({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}}),e})();class jx{constructor(){this.$implicit=null,this.ngIf=null}}function qy(e,t){if(t&&!t.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${W(t)}'.`)}let Yy=(()=>{class e{transform(n,r,o){if(null==n)return null;if(!this.supports(n))throw function(e,t){return Error(`InvalidPipeArgument: '${t}' for pipe '${W(e)}'`)}(e,n);return n.slice(r,o)}supports(n){return"string"==typeof n||Array.isArray(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275pipe=ot({name:"slice",type:e,pure:!1}),e})(),fN=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:[{provide:wa,useClass:Vx}]}),e})();class td extends class extends class{}{constructor(){super(...arguments),this.supportsDOMEvents=!0}}{static makeCurrent(){!function(e){pa||(pa=e)}(new td)}onAndCancel(t,n,r){return t.addEventListener(n,r,!1),()=>{t.removeEventListener(n,r,!1)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=(Ri=Ri||document.querySelector("base"),Ri?Ri.getAttribute("href"):null);return null==n?null:function(e){Ia=Ia||document.createElement("a"),Ia.setAttribute("href",e);const t=Ia.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){Ri=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let Ia,Ri=null;const Xy=new X("TRANSITION_ID"),bN=[{provide:na,useFactory:function(e,t,n){return()=>{n.get(go).donePromise.then(()=>{const r=gr(),o=t.querySelectorAll(`style[ng-transition="${e}"]`);for(let i=0;i{const i=t.findTestabilityInTree(r,o);if(null==i)throw new Error("Could not find testability for element.");return i},ne.getAllAngularTestabilities=()=>t.getAllTestabilities(),ne.getAllAngularRootElements=()=>t.getAllRootElements(),ne.frameworkStabilizers||(ne.frameworkStabilizers=[]),ne.frameworkStabilizers.push(r=>{const o=ne.getAllAngularTestabilities();let i=o.length,s=!1;const a=function(l){s=s||l,i--,0==i&&r(s)};o.forEach(function(l){l.whenStable(a)})})}findTestabilityInTree(t,n,r){if(null==n)return null;const o=t.getTestability(n);return null!=o?o:r?gr().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null}}let EN=(()=>{class e{build(){return new XMLHttpRequest}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const Fi=new X("EventManagerPlugins");let Ta=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>o.manager=this),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}addGlobalEventListener(n,r,o){return this._findPluginFor(r).addGlobalEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){const r=this._eventNameToPlugin.get(n);if(r)return r;const o=this._plugins;for(let i=0;i{class e{constructor(){this._stylesSet=new Set}addStyles(n){const r=new Set;n.forEach(o=>{this._stylesSet.has(o)||(this._stylesSet.add(o),r.add(o))}),this.onStylesAdded(r)}onStylesAdded(n){}getAllStyles(){return Array.from(this._stylesSet)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})(),Oi=(()=>{class e extends tC{constructor(n){super(),this._doc=n,this._hostNodes=new Map,this._hostNodes.set(n.head,[])}_addStylesToHost(n,r,o){n.forEach(i=>{const s=this._doc.createElement("style");s.textContent=i,o.push(r.appendChild(s))})}addHost(n){const r=[];this._addStylesToHost(this._stylesSet,n,r),this._hostNodes.set(n,r)}removeHost(n){const r=this._hostNodes.get(n);r&&r.forEach(nC),this._hostNodes.delete(n)}onStylesAdded(n){this._hostNodes.forEach((r,o)=>{this._addStylesToHost(n,o,r)})}ngOnDestroy(){this._hostNodes.forEach(n=>n.forEach(nC))}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function nC(e){gr().remove(e)}const od={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},id=/%COMP%/g;function Aa(e,t,n){for(let r=0;r{if("__ngUnwrap__"===t)return e;!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}let sd=(()=>{class e{constructor(n,r,o){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.rendererByCompId=new Map,this.defaultRenderer=new ad(n)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;switch(r.encapsulation){case Se.Emulated:{let o=this.rendererByCompId.get(r.id);return o||(o=new LN(this.eventManager,this.sharedStylesHost,r,this.appId),this.rendererByCompId.set(r.id,o)),o.applyToHost(n),o}case 1:case Se.ShadowDom:return new BN(this.eventManager,this.sharedStylesHost,n,r);default:if(!this.rendererByCompId.has(r.id)){const o=Aa(r.id,r.styles,[]);this.sharedStylesHost.addStyles(o),this.rendererByCompId.set(r.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return e.\u0275fac=function(n){return new(n||e)(Y(Ta),Y(Oi),Y(Ei))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();class ad{constructor(t){this.eventManager=t,this.data=Object.create(null)}destroy(){}createElement(t,n){return n?document.createElementNS(od[n]||n,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,n){t.appendChild(n)}insertBefore(t,n,r){t&&t.insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?document.querySelector(t):t;if(!r)throw new Error(`The selector "${t}" did not match any elements`);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=od[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=od[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(mt.DashCase|mt.Important)?t.style.setProperty(n,r,o&mt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&mt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,n,iC(r)):this.eventManager.addEventListener(t,n,iC(r))}}class LN extends ad{constructor(t,n,r,o){super(t),this.component=r;const i=Aa(o+"-"+r.id,r.styles,[]);n.addStyles(i),this.contentAttr=function(e){return"_ngcontent-%COMP%".replace(id,e)}(o+"-"+r.id),this.hostAttr=function(e){return"_nghost-%COMP%".replace(id,e)}(o+"-"+r.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}class BN extends ad{constructor(t,n,r,o){super(t),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const i=Aa(o.id,o.styles,[]);for(let s=0;s{class e extends rd{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const lC=["alt","control","meta","shift"],qN={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},cC={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"},QN={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let KN=(()=>{class e extends rd{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),s=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>gr().onAndCancel(n,i.domEventName,s))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let s="";if(lC.forEach(l=>{const c=r.indexOf(l);c>-1&&(r.splice(c,1),s+=l+".")}),s+=i,0!=r.length||0===i.length)return null;const a={};return a.domEventName=o,a.fullKey=s,a}static getEventFullKey(n){let r="",o=function(e){let t=e.key;if(null==t){if(t=e.keyIdentifier,null==t)return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&cC.hasOwnProperty(t)&&(t=cC[t]))}return qN[t]||t}(n);return o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),lC.forEach(i=>{i!=o&&QN[i](n)&&(r+=i+".")}),r+=o,r}static eventCallback(n,r,o){return i=>{e.getEventFullKey(i)===n&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){switch(n){case"esc":return"escape";default:return n}}}return e.\u0275fac=function(n){return new(n||e)(Y(nt))},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();const rR=iy(WA,"browser",[{provide:Cu,useValue:"browser"},{provide:K_,useValue:function(){td.makeCurrent(),nd.init()},multi:!0},{provide:nt,useFactory:function(){return function(e){il=e}(document),document},deps:[]}]),oR=[[],{provide:Xo,useValue:"root"},{provide:ir,useFactory:function(){return new ir},deps:[]},{provide:Fi,useClass:HN,multi:!0,deps:[nt,Le,Cu]},{provide:Fi,useClass:KN,multi:!0,deps:[nt]},[],{provide:sd,useClass:sd,deps:[Ta,Oi,Ei]},{provide:zs,useExisting:sd},{provide:tC,useExisting:Oi},{provide:Oi,useClass:Oi,deps:[nt]},{provide:Iu,useClass:Iu,deps:[Le]},{provide:Ta,useClass:Ta,deps:[Fi,Le]},{provide:class{},useClass:EN,deps:[]},[]];let iR=(()=>{class e{constructor(n){if(n)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(n){return{ngModule:e,providers:[{provide:Ei,useValue:n.appId},{provide:Xy,useExisting:Ei},bN]}}}return e.\u0275fac=function(n){return new(n||e)(Y(e,12))},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({providers:oR,imports:[fN,XA]}),e})();function Sa(e,t){return new qe(n=>{const r=e.length;if(0===r)return void n.complete();const o=new Array(r);let i=0,s=0;for(let a=0;a{c||(c=!0,s++),o[a]=u},error:u=>n.error(u),complete:()=>{i++,(i===r||!c)&&(s===r&&n.next(t?t.reduce((u,d,f)=>(u[d]=o[f],u),{}):o),n.complete())}}))}})}"undefined"!=typeof window&&window;let dC=(()=>{class e{constructor(n,r){this._renderer=n,this._elementRef=r,this.onChange=o=>{},this.onTouched=()=>{}}setProperty(n,r){this._renderer.setProperty(this._elementRef.nativeElement,n,r)}registerOnTouched(n){this.onTouched=n}registerOnChange(n){this.onChange=n}setDisabledState(n){this.setProperty("disabled",n)}}return e.\u0275fac=function(n){return new(n||e)(I(cr),I($e))},e.\u0275dir=L({type:e}),e})(),mr=(()=>{class e extends dC{}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,features:[ge]}),e})();const fn=new X("NgValueAccessor"),gR={provide:fn,useExisting:ue(()=>Pi),multi:!0},_R=new X("CompositionEventMode");let Pi=(()=>{class e extends dC{constructor(n,r,o){super(n,r),this._compositionMode=o,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const e=gr()?gr().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}writeValue(n){this.setProperty("value",null==n?"":n)}_handleInput(n){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(n)}_compositionStart(){this._composing=!0}_compositionEnd(n){this._composing=!1,this._compositionMode&&this.onChange(n)}}return e.\u0275fac=function(n){return new(n||e)(I(cr),I($e),I(_R,8))},e.\u0275dir=L({type:e,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(n,r){1&n&&Z("input",function(i){return r._handleInput(i.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(i){return r._compositionEnd(i.target.value)})},features:[_e([gR]),ge]}),e})();const We=new X("NgValidators"),Gn=new X("NgAsyncValidators");function bC(e){return null!=e}function EC(e){const t=Vs(e)?Wa(e):e;return Rc(t),t}function wC(e){let t={};return e.forEach(n=>{t=null!=n?Object.assign(Object.assign({},t),n):t}),0===Object.keys(t).length?null:t}function IC(e,t){return t.map(n=>n(e))}function MC(e){return e.map(t=>function(e){return!e.validate}(t)?t:n=>t.validate(n))}function fd(e){return null!=e?function(e){if(!e)return null;const t=e.filter(bC);return 0==t.length?null:function(n){return wC(IC(n,t))}}(MC(e)):null}function hd(e){return null!=e?function(e){if(!e)return null;const t=e.filter(bC);return 0==t.length?null:function(n){return function(...e){if(1===e.length){const t=e[0];if($a(t))return Sa(t,null);if(Ua(t)&&Object.getPrototypeOf(t)===Object.prototype){const n=Object.keys(t);return Sa(n.map(r=>t[r]),n)}}if("function"==typeof e[e.length-1]){const t=e.pop();return Sa(e=1===e.length&&$a(e[0])?e[0]:e,null).pipe(za(n=>t(...n)))}return Sa(e,null)}(IC(n,t).map(EC)).pipe(za(wC))}}(MC(e)):null}function SC(e,t){return null===e?[t]:Array.isArray(e)?[...e,t]:[e,t]}function pd(e){return e?Array.isArray(e)?e:[e]:[]}function xa(e,t){return Array.isArray(e)?e.includes(t):e===t}function RC(e,t){const n=pd(t);return pd(e).forEach(o=>{xa(n,o)||n.push(o)}),n}function FC(e,t){return pd(t).filter(n=>!xa(e,n))}let OC=(()=>{class e{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(n){this._rawValidators=n||[],this._composedValidatorFn=fd(this._rawValidators)}_setAsyncValidators(n){this._rawAsyncValidators=n||[],this._composedAsyncValidatorFn=hd(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(n){this._onDestroyCallbacks.push(n)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(n=>n()),this._onDestroyCallbacks=[]}reset(n){this.control&&this.control.reset(n)}hasError(n,r){return!!this.control&&this.control.hasError(n,r)}getError(n,r){return this.control?this.control.getError(n,r):null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275dir=L({type:e}),e})(),rt=(()=>{class e extends OC{get formDirective(){return null}get path(){return null}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,features:[ge]}),e})();class Wn extends OC{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}let gd=(()=>{class e extends class{constructor(t){this._cd=t}is(t){var n,r,o;return"submitted"===t?!!(null===(n=this._cd)||void 0===n?void 0:n.submitted):!!(null===(o=null===(r=this._cd)||void 0===r?void 0:r.control)||void 0===o?void 0:o[t])}}{constructor(n){super(n)}}return e.\u0275fac=function(n){return new(n||e)(I(Wn,2))},e.\u0275dir=L({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(n,r){2&n&&ks("ng-untouched",r.is("untouched"))("ng-touched",r.is("touched"))("ng-pristine",r.is("pristine"))("ng-dirty",r.is("dirty"))("ng-valid",r.is("valid"))("ng-invalid",r.is("invalid"))("ng-pending",r.is("pending"))},features:[ge]}),e})();function Vi(e,t){(function(e,t){const n=function(e){return e._rawValidators}(e);null!==t.validator?e.setValidators(SC(n,t.validator)):"function"==typeof n&&e.setValidators([n]);const r=function(e){return e._rawAsyncValidators}(e);null!==t.asyncValidator?e.setAsyncValidators(SC(r,t.asyncValidator)):"function"==typeof r&&e.setAsyncValidators([r]);const o=()=>e.updateValueAndValidity();Oa(t._rawValidators,o),Oa(t._rawAsyncValidators,o)})(e,t),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(n=>{e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&VC(e,t)})}(e,t),function(e,t){const n=(r,o)=>{t.valueAccessor.writeValue(r),o&&t.viewToModelUpdate(r)};e.registerOnChange(n),t._registerOnDestroy(()=>{e._unregisterOnChange(n)})}(e,t),function(e,t){t.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&VC(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),function(e,t){if(t.valueAccessor.setDisabledState){const n=r=>{t.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(n),t._registerOnDestroy(()=>{e._unregisterOnDisabledChange(n)})}}(e,t)}function Oa(e,t){e.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(t)})}function VC(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function Va(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const ki="VALID",ka="INVALID",Co="PENDING",Li="DISABLED";function Dd(e){return(Ed(e)?e.validators:e)||null}function BC(e){return Array.isArray(e)?fd(e):e||null}function bd(e,t){return(Ed(t)?t.asyncValidators:e)||null}function HC(e){return Array.isArray(e)?hd(e):e||null}function Ed(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}class wd{constructor(t,n){this._hasOwnPendingAsyncValidator=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._rawValidators=t,this._rawAsyncValidators=n,this._composedValidatorFn=BC(this._rawValidators),this._composedAsyncValidatorFn=HC(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get valid(){return this.status===ki}get invalid(){return this.status===ka}get pending(){return this.status==Co}get disabled(){return this.status===Li}get enabled(){return this.status!==Li}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this._rawValidators=t,this._composedValidatorFn=BC(t)}setAsyncValidators(t){this._rawAsyncValidators=t,this._composedAsyncValidatorFn=HC(t)}addValidators(t){this.setValidators(RC(t,this._rawValidators))}addAsyncValidators(t){this.setAsyncValidators(RC(t,this._rawAsyncValidators))}removeValidators(t){this.setValidators(FC(t,this._rawValidators))}removeAsyncValidators(t){this.setAsyncValidators(FC(t,this._rawAsyncValidators))}hasValidator(t){return xa(this._rawValidators,t)}hasAsyncValidator(t){return xa(this._rawAsyncValidators,t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(n=>{n.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status=Co,!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=Li,this.errors=null,this._forEachChild(r=>{r.disable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:n})),this._onDisabledChange.forEach(r=>r(!0))}enable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=ki,this._forEachChild(r=>{r.enable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:n})),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===ki||this.status===Co)&&this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(n=>n._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Li:ki}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status=Co,this._hasOwnPendingAsyncValidator=!0;const n=EC(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(r=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(r,{emitEvent:t})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(t,n={}){this.errors=t,this._updateControlsErrors(!1!==n.emitEvent)}get(t){return function(e,t,n){if(null==t||(Array.isArray(t)||(t=t.split(".")),Array.isArray(t)&&0===t.length))return null;let r=e;return t.forEach(o=>{r=r instanceof Id?r.controls.hasOwnProperty(o)?r.controls[o]:null:r instanceof RR&&r.at(o)||null}),r}(this,t)}getError(t,n){const r=n?this.get(n):this;return r&&r.errors?r.errors[t]:null}hasError(t,n){return!!this.getError(t,n)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new ze,this.statusChanges=new ze}_calculateStatus(){return this._allControlsDisabled()?Li:this.errors?ka:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Co)?Co:this._anyControlsHaveStatus(ka)?ka:ki}_anyControlsHaveStatus(t){return this._anyControls(n=>n.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_isBoxedValue(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){Ed(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}}class La extends wd{constructor(t=null,n,r){super(Dd(n),bd(r,n)),this._onChange=[],this._applyFormState(t),this._setUpdateStrategy(n),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}setValue(t,n={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==n.emitModelToViewChange&&this._onChange.forEach(r=>r(this.value,!1!==n.emitViewToModelChange)),this.updateValueAndValidity(n)}patchValue(t,n={}){this.setValue(t,n)}reset(t=null,n={}){this._applyFormState(t),this.markAsPristine(n),this.markAsUntouched(n),this.setValue(this.value,n),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){Va(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){Va(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}}class Id extends wd{constructor(t,n,r){super(Dd(n),bd(r,n)),this.controls=t,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(t,n){return this.controls[t]?this.controls[t]:(this.controls[t]=n,n.setParent(this),n._registerOnCollectionChange(this._onCollectionChange),n)}addControl(t,n,r={}){this.registerControl(t,n),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}removeControl(t,n={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}setControl(t,n,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],n&&this.registerControl(t,n),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,n={}){this._checkAllValuesPresent(t),Object.keys(t).forEach(r=>{this._throwIfControlMissing(r),this.controls[r].setValue(t[r],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(t,n={}){null!=t&&(Object.keys(t).forEach(r=>{this.controls[r]&&this.controls[r].patchValue(t[r],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(t={},n={}){this._forEachChild((r,o)=>{r.reset(t[o],{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this._reduceChildren({},(t,n,r)=>(t[r]=n instanceof La?n.value:n.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(n,r)=>!!r._syncPendingControls()||n);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!Object.keys(this.controls).length)throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.controls[t])throw new Error(`Cannot find form control with name: ${t}.`)}_forEachChild(t){Object.keys(this.controls).forEach(n=>{const r=this.controls[n];r&&t(r,n)})}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){for(const n of Object.keys(this.controls)){const r=this.controls[n];if(this.contains(n)&&t(r))return!0}return!1}_reduceValue(){return this._reduceChildren({},(t,n,r)=>((n.enabled||this.disabled)&&(t[r]=n.value),t))}_reduceChildren(t,n){let r=t;return this._forEachChild((o,i)=>{r=n(r,o,i)}),r}_allControlsDisabled(){for(const t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(t){this._forEachChild((n,r)=>{if(void 0===t[r])throw new Error(`Must supply a value for form control with name: '${r}'.`)})}}class RR extends wd{constructor(t,n,r){super(Dd(n),bd(r,n)),this.controls=t,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(t){return this.controls[t]}push(t,n={}){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}insert(t,n,r={}){this.controls.splice(t,0,n),this._registerControl(n),this.updateValueAndValidity({emitEvent:r.emitEvent})}removeAt(t,n={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),this.updateValueAndValidity({emitEvent:n.emitEvent})}setControl(t,n,r={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),n&&(this.controls.splice(t,0,n),this._registerControl(n)),this.updateValueAndValidity({emitEvent:r.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,n={}){this._checkAllValuesPresent(t),t.forEach((r,o)=>{this._throwIfControlMissing(o),this.at(o).setValue(r,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(t,n={}){null!=t&&(t.forEach((r,o)=>{this.at(o)&&this.at(o).patchValue(r,{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(t=[],n={}){this._forEachChild((r,o)=>{r.reset(t[o],{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this.controls.map(t=>t instanceof La?t.value:t.getRawValue())}clear(t={}){this.controls.length<1||(this._forEachChild(n=>n._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:t.emitEvent}))}_syncPendingControls(){let t=this.controls.reduce((n,r)=>!!r._syncPendingControls()||n,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(t))throw new Error(`Cannot find form control at index ${t}`)}_forEachChild(t){this.controls.forEach((n,r)=>{t(n,r)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(n=>n.enabled&&t(n))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_checkAllValuesPresent(t){this._forEachChild((n,r)=>{if(void 0===t[r])throw new Error(`Must supply a value for form control at index: ${r}.`)})}_allControlsDisabled(){for(const t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}}const PR={provide:Wn,useExisting:ue(()=>Ba)},UC=(()=>Promise.resolve(null))();let Ba=(()=>{class e extends Wn{constructor(n,r,o,i){super(),this.control=new La,this._registered=!1,this.update=new ze,this._parent=n,this._setValidators(r),this._setAsyncValidators(o),this.valueAccessor=function(e,t){if(!t)return null;let n,r,o;return Array.isArray(t),t.forEach(i=>{i.constructor===Pi?n=i:function(e){return Object.getPrototypeOf(e.constructor)===mr}(i)?r=i:o=i}),o||r||n||null}(0,i)}ngOnChanges(n){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in n&&this._updateDisabled(n),function(e,t){if(!e.hasOwnProperty("model"))return!1;const n=e.model;return!!n.isFirstChange()||!Object.is(t,n.currentValue)}(n,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?function(e,t){return[...t.path,e]}(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(n){this.viewModel=n,this.update.emit(n)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Vi(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(n){UC.then(()=>{this.control.setValue(n,{emitViewToModelChange:!1})})}_updateDisabled(n){const r=n.isDisabled.currentValue,o=""===r||r&&"false"!==r;UC.then(()=>{o&&!this.control.disabled?this.control.disable():!o&&this.control.disabled&&this.control.enable()})}}return e.\u0275fac=function(n){return new(n||e)(I(rt,9),I(We,10),I(Gn,10),I(fn,10))},e.\u0275dir=L({type:e,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[_e([PR]),ge,ft]}),e})(),zC=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({}),e})();const HR={provide:fn,useExisting:ue(()=>Td),multi:!0};let Td=(()=>{class e extends mr{writeValue(n){this.setProperty("value",parseFloat(n))}registerOnChange(n){this.onChange=r=>{n(""==r?null:parseFloat(r))}}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,selectors:[["input","type","range","formControlName",""],["input","type","range","formControl",""],["input","type","range","ngModel",""]],hostBindings:function(n,r){1&n&&Z("change",function(i){return r.onChange(i.target.value)})("input",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},features:[_e([HR]),ge]}),e})();const WR={provide:fn,useExisting:ue(()=>Hi),multi:!0};function YC(e,t){return null==e?`${t}`:(t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Hi=(()=>{class e extends mr{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){this.value=n;const r=this._getOptionId(n);null==r&&this.setProperty("selectedIndex",-1);const o=YC(r,n);this.setProperty("value",o)}registerOnChange(n){this.onChange=r=>{this.value=this._getOptionValue(r),n(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(n){for(const r of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(r),n))return r;return null}_getOptionValue(n){const r=function(e){return e.split(":")[0]}(n);return this._optionMap.has(r)?this._optionMap.get(r):n}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Et(e)))(r||e)}}(),e.\u0275dir=L({type:e,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(n,r){1&n&&Z("change",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},inputs:{compareWith:"compareWith"},features:[_e([WR]),ge]}),e})(),Rd=(()=>{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption())}set ngValue(n){null!=this._select&&(this._select._optionMap.set(this.id,n),this._setElementValue(YC(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._setElementValue(n),this._select&&this._select.writeValue(this._select.value)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(I($e),I(cr),I(Hi,9))},e.\u0275dir=L({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})();const QR={provide:fn,useExisting:ue(()=>Fd),multi:!0};function ZC(e,t){return null==e?`${t}`:("string"==typeof t&&(t=`'${t}'`),t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Fd=(()=>{class e extends mr{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){let r;if(this.value=n,Array.isArray(n)){const o=n.map(i=>this._getOptionId(i));r=(i,s)=>{i._setSelected(o.indexOf(s.toString())>-1)}}else r=(o,i)=>{o._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(n){this.onChange=r=>{const o=[];if(void 0!==r.selectedOptions){const i=r.selectedOptions;for(let s=0;s{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption(this))}set ngValue(n){null!=this._select&&(this._value=n,this._setElementValue(ZC(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._select?(this._value=n,this._setElementValue(ZC(this.id,n)),this._select.writeValue(this._select.value)):this._setElementValue(n)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}_setSelected(n){this._renderer.setProperty(this._element.nativeElement,"selected",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(I($e),I(cr),I(Fd,9))},e.\u0275dir=L({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})(),av=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({imports:[[zC]]}),e})(),oF=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e}),e.\u0275inj=Ft({imports:[av]}),e})();class lv{constructor(){this.riskHotspotsSettings=null,this.coverageInfoSettings=null}}class iF{constructor(){this.groupingMaximum=0,this.grouping=0,this.historyComparisionDate="",this.historyComparisionType="",this.filter="",this.sortBy="name",this.sortOrder="asc",this.collapseStates=[]}}class sF{constructor(t){this.et="",this.et=t.et,this.cl=t.cl,this.ucl=t.ucl,this.cal=t.cal,this.tl=t.tl,this.lcq=t.lcq,this.cb=t.cb,this.tb=t.tb,this.bcq=t.bcq}get coverageRatioText(){return 0===this.tl?"-":this.cl+"/"+this.cal}get branchCoverageRatioText(){return 0===this.tb?"-":this.cb+"/"+this.tb}}class vo{static roundNumber(t,n){return Math.floor(t*Math.pow(10,n))/Math.pow(10,n)}static getNthOrLastIndexOf(t,n,r){let o=0,i=-1,s=-1;for(;o{this.historicCoverages.push(new sF(r))})}get coverage(){return 0===this.coverableLines?"-"!==this.methodCoverage?parseFloat(this.methodCoverage):NaN:vo.roundNumber(100*this.coveredLines/this.coverableLines,1)}get coverageType(){return 0===this.coverableLines?"-"!==this.methodCoverage?this._coverageType:"":this._coverageType}visible(t,n){if(""!==t&&-1===this.name.toLowerCase().indexOf(t.toLowerCase()))return!1;if(""===n||null===this.currentHistoricCoverage)return!0;if("allChanges"===n){if(this.coveredLines===this.currentHistoricCoverage.cl&&this.uncoveredLines===this.currentHistoricCoverage.ucl&&this.coverableLines===this.currentHistoricCoverage.cal&&this.totalLines===this.currentHistoricCoverage.tl&&this.coveredBranches===this.currentHistoricCoverage.cb&&this.totalBranches===this.currentHistoricCoverage.tb)return!1}else if("lineCoverageIncreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r<=this.currentHistoricCoverage.lcq)return!1}else if("lineCoverageDecreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r>=this.currentHistoricCoverage.lcq)return!1}else if("branchCoverageIncreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.bcq)return!1}else if("branchCoverageDecreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.bcq)return!1}return!0}updateCurrentHistoricCoverage(t){if(this.currentHistoricCoverage=null,""!==t)for(let n=0;n-1&&null===n}visible(t,n){if(""!==t&&this.name.toLowerCase().indexOf(t.toLowerCase())>-1)return!0;for(let r=0;r{class e{get nativeWindow(){return window}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=te({token:e,factory:e.\u0275fac}),e})();function lF(e,t){1&e&&k(0,"td",3)}function cF(e,t){1&e&&k(0,"td"),2&e&&Ln("green ",w().greenClass,"")}function uF(e,t){1&e&&k(0,"td"),2&e&&Ln("red ",w().redClass,"")}let uv=(()=>{class e{constructor(){this.grayVisible=!0,this.greenVisible=!1,this.redVisible=!1,this.greenClass="",this.redClass="",this._percentage=NaN}get percentage(){return this._percentage}set percentage(n){this._percentage=n,this.grayVisible=isNaN(n),this.greenVisible=!isNaN(n)&&Math.round(n)>0,this.redVisible=!isNaN(n)&&100-Math.round(n)>0,this.greenClass="covered"+Math.round(n),this.redClass="covered"+(100-Math.round(n))}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275cmp=xn({type:e,selectors:[["coverage-bar"]],inputs:{percentage:"percentage"},decls:4,vars:3,consts:[[1,"coverage"],["class","gray covered100",4,"ngIf"],[3,"class",4,"ngIf"],[1,"gray","covered100"]],template:function(n,r){1&n&&(y(0,"table",0),S(1,lF,1,0,"td",1),S(2,cF,1,3,"td",2),S(3,uF,1,3,"td",2),C()),2&n&&(g(1),D("ngIf",r.grayVisible),g(1),D("ngIf",r.greenVisible),g(1),D("ngIf",r.redVisible))},directives:[yo],encapsulation:2,changeDetection:0}),e})();const dF=["codeelement-row",""];function fF(e,t){if(1&e&&(y(0,"th",2),M(1),C()),2&e){const n=w();g(1),P(n.element.coveredBranches)}}function hF(e,t){if(1&e&&(y(0,"th",2),M(1),C()),2&e){const n=w();g(1),P(n.element.totalBranches)}}function pF(e,t){if(1&e&&(y(0,"th",3),M(1),C()),2&e){const n=w();D("title",n.element.branchCoverageRatioText),g(1),P(n.element.branchCoveragePercentage)}}function gF(e,t){if(1&e&&(y(0,"th",2),k(1,"coverage-bar",4),C()),2&e){const n=w();g(1),D("percentage",n.element.branchCoverage)}}const mF=function(e,t){return{"icon-plus":e,"icon-minus":t}};let _F=(()=>{class e{constructor(){this.collapsed=!1,this.branchCoverageAvailable=!1}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275cmp=xn({type:e,selectors:[["","codeelement-row",""]],inputs:{element:"element",collapsed:"collapsed",branchCoverageAvailable:"branchCoverageAvailable"},attrs:dF,decls:20,vars:16,consts:[["href","#",3,"click"],[3,"ngClass"],[1,"right"],[1,"right",3,"title"],[3,"percentage"],["class","right",4,"ngIf"],["class","right",3,"title",4,"ngIf"]],template:function(n,r){1&n&&(y(0,"th"),y(1,"a",0),Z("click",function(i){return r.element.toggleCollapse(i)}),k(2,"i",1),M(3),C(),C(),y(4,"th",2),M(5),C(),y(6,"th",2),M(7),C(),y(8,"th",2),M(9),C(),y(10,"th",2),M(11),C(),y(12,"th",3),M(13),C(),y(14,"th",2),k(15,"coverage-bar",4),C(),S(16,fF,2,1,"th",5),S(17,hF,2,1,"th",5),S(18,pF,2,2,"th",6),S(19,gF,2,1,"th",5)),2&n&&(g(2),D("ngClass",su(13,mF,r.element.collapsed,!r.element.collapsed)),g(1),oe(" ",r.element.name,""),g(2),P(r.element.coveredLines),g(2),P(r.element.uncoveredLines),g(2),P(r.element.coverableLines),g(2),P(r.element.totalLines),g(1),D("title",r.element.coverageRatioText),g(1),P(r.element.coveragePercentage),g(2),D("percentage",r.element.coverage),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable))},directives:[Ni,uv,yo],encapsulation:2,changeDetection:0}),e})();const yF=["coverage-history-chart",""];let CF=(()=>{class e{constructor(){this.path=null,this._historicCoverages=[]}get historicCoverages(){return this._historicCoverages}set historicCoverages(n){if(this._historicCoverages=n,n.length>1){let r="";for(let o=0;o1),g(1),D("ngIf",null!==n.clazz.currentHistoricCoverage),g(1),D("ngIf",null===n.clazz.currentHistoricCoverage)}}function GF(e,t){if(1&e&&(y(0,"td",2),k(1,"coverage-bar",5),C()),2&e){const n=w();g(1),D("percentage",n.clazz.branchCoverage)}}let zF=(()=>{class e{constructor(){this.translations={},this.branchCoverageAvailable=!1,this.historyComparisionDate=""}getClassName(n,r){return n>r?"lightgreen":n1),g(1),D("ngIf",null!==r.clazz.currentHistoricCoverage),g(1),D("ngIf",null===r.clazz.currentHistoricCoverage),g(2),D("percentage",r.clazz.coverage),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable),g(1),D("ngIf",r.branchCoverageAvailable))},directives:[yo,uv,CF,Ni],encapsulation:2,changeDetection:0}),e})();function WF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.noGrouping)}}function qF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.byAssembly)}}function QF(e,t){if(1&e&&(se(0),M(1),ae()),2&e){const n=w(2);g(1),P(n.translations.byNamespace+" "+n.settings.grouping)}}function KF(e,t){if(1&e&&(y(0,"option",26),M(1),C()),2&e){const n=t.$implicit;D("value",n),g(1),P(n)}}function YF(e,t){1&e&&k(0,"br")}function ZF(e,t){if(1&e&&(y(0,"option",32),M(1),C()),2&e){const n=w(4);g(1),oe(" ",n.translations.branchCoverageIncreaseOnly," ")}}function JF(e,t){if(1&e&&(y(0,"option",33),M(1),C()),2&e){const n=w(4);g(1),oe(" ",n.translations.branchCoverageDecreaseOnly," ")}}function XF(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"select",23),Z("ngModelChange",function(o){return le(n),w(3).settings.historyComparisionType=o}),y(2,"option",24),M(3),C(),y(4,"option",27),M(5),C(),y(6,"option",28),M(7),C(),y(8,"option",29),M(9),C(),S(10,ZF,2,1,"option",30),S(11,JF,2,1,"option",31),C(),C()}if(2&e){const n=w(3);g(1),D("ngModel",n.settings.historyComparisionType),g(2),P(n.translations.filter),g(2),P(n.translations.allChanges),g(2),P(n.translations.lineCoverageIncreaseOnly),g(2),P(n.translations.lineCoverageDecreaseOnly),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable)}}function eO(e,t){if(1&e){const n=ln();se(0),y(1,"div"),M(2),y(3,"select",23),Z("ngModelChange",function(o){return le(n),w(2).settings.historyComparisionDate=o})("ngModelChange",function(){return le(n),w(2).updateCurrentHistoricCoverage()}),y(4,"option",24),M(5),C(),S(6,KF,2,2,"option",25),C(),C(),S(7,YF,1,0,"br",0),S(8,XF,12,7,"div",0),ae()}if(2&e){const n=w(2);g(2),oe(" ",n.translations.compareHistory," "),g(1),D("ngModel",n.settings.historyComparisionDate),g(2),P(n.translations.date),g(1),D("ngForOf",n.historicCoverageExecutionTimes),g(1),D("ngIf",""!==n.settings.historyComparisionDate),g(1),D("ngIf",""!==n.settings.historyComparisionDate)}}function tO(e,t){1&e&&k(0,"col",8)}function nO(e,t){1&e&&k(0,"col",11)}function rO(e,t){1&e&&k(0,"col",12)}function oO(e,t){1&e&&k(0,"col",13)}const In=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function iO(e,t){if(1&e){const n=ln();y(0,"th",5),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("covered_branches",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"covered_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered_branches"!==n.settings.sortBy)),g(1),P(n.translations.covered)}}function sO(e,t){if(1&e){const n=ln();y(0,"th",5),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("total_branches",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"total_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total_branches"!==n.settings.sortBy)),g(1),P(n.translations.total)}}function aO(e,t){if(1&e){const n=ln();y(0,"th",19),y(1,"a",2),Z("click",function(o){return le(n),w(2).updateSorting("branchcoverage",o)}),k(2,"i",18),M(3),C(),C()}if(2&e){const n=w(2);g(2),D("ngClass",st(2,In,"branchcoverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"branchcoverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"branchcoverage"!==n.settings.sortBy)),g(1),P(n.translations.branchCoverage)}}function lO(e,t){if(1&e&&k(0,"tr",35),2&e){const n=w().$implicit,r=w(2);D("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable)}}function cO(e,t){if(1&e&&k(0,"tr",37),2&e){const n=w().$implicit,r=w(3);D("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function uO(e,t){if(1&e&&(se(0),S(1,cO,1,4,"tr",36),ae()),2&e){const n=t.$implicit,r=w().$implicit,o=w(2);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function dO(e,t){if(1&e&&k(0,"tr",40),2&e){const n=w().$implicit,r=w(5);D("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function fO(e,t){if(1&e&&(se(0),S(1,dO,1,4,"tr",39),ae()),2&e){const n=t.$implicit,r=w(2).$implicit,o=w(3);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function hO(e,t){if(1&e&&(se(0),k(1,"tr",38),S(2,fO,2,1,"ng-container",22),ae()),2&e){const n=w().$implicit,r=w(3);g(1),D("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable),g(1),D("ngForOf",n.classes)}}function pO(e,t){if(1&e&&(se(0),S(1,hO,3,4,"ng-container",0),ae()),2&e){const n=t.$implicit,r=w().$implicit,o=w(2);g(1),D("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function gO(e,t){if(1&e&&(se(0),S(1,lO,1,3,"tr",34),S(2,uO,2,1,"ng-container",22),S(3,pO,2,1,"ng-container",22),ae()),2&e){const n=t.$implicit,r=w(2);g(1),D("ngIf",n.visible(r.settings.filter,r.settings.historyComparisionType)),g(1),D("ngForOf",n.classes),g(1),D("ngForOf",n.subElements)}}function mO(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"div",1),y(2,"div"),y(3,"a",2),Z("click",function(o){return le(n),w().collapseAll(o)}),M(4),C(),M(5," | "),y(6,"a",2),Z("click",function(o){return le(n),w().expandAll(o)}),M(7),C(),C(),y(8,"div",3),S(9,WF,2,1,"ng-container",0),S(10,qF,2,1,"ng-container",0),S(11,QF,2,1,"ng-container",0),k(12,"br"),M(13),y(14,"input",4),Z("ngModelChange",function(o){return le(n),w().settings.grouping=o})("ngModelChange",function(){return le(n),w().updateCoverageInfo()}),C(),C(),y(15,"div",3),S(16,eO,9,6,"ng-container",0),C(),y(17,"div",5),y(18,"span"),M(19),C(),y(20,"input",6),Z("ngModelChange",function(o){return le(n),w().settings.filter=o}),C(),C(),C(),y(21,"table",7),y(22,"colgroup"),k(23,"col"),k(24,"col",8),k(25,"col",9),k(26,"col",10),k(27,"col",11),k(28,"col",12),k(29,"col",13),S(30,tO,1,0,"col",14),S(31,nO,1,0,"col",15),S(32,rO,1,0,"col",16),S(33,oO,1,0,"col",17),C(),y(34,"thead"),y(35,"tr"),y(36,"th"),y(37,"a",2),Z("click",function(o){return le(n),w().updateSorting("name",o)}),k(38,"i",18),M(39),C(),C(),y(40,"th",5),y(41,"a",2),Z("click",function(o){return le(n),w().updateSorting("covered",o)}),k(42,"i",18),M(43),C(),C(),y(44,"th",5),y(45,"a",2),Z("click",function(o){return le(n),w().updateSorting("uncovered",o)}),k(46,"i",18),M(47),C(),C(),y(48,"th",5),y(49,"a",2),Z("click",function(o){return le(n),w().updateSorting("coverable",o)}),k(50,"i",18),M(51),C(),C(),y(52,"th",5),y(53,"a",2),Z("click",function(o){return le(n),w().updateSorting("total",o)}),k(54,"i",18),M(55),C(),C(),y(56,"th",19),y(57,"a",2),Z("click",function(o){return le(n),w().updateSorting("coverage",o)}),k(58,"i",18),M(59),C(),C(),S(60,iO,4,6,"th",20),S(61,sO,4,6,"th",20),S(62,aO,4,6,"th",21),C(),C(),y(63,"tbody"),S(64,gO,4,3,"ng-container",22),C(),C(),C()}if(2&e){const n=w();g(4),P(n.translations.collapseAll),g(3),P(n.translations.expandAll),g(2),D("ngIf",-1===n.settings.grouping),g(1),D("ngIf",0===n.settings.grouping),g(1),D("ngIf",n.settings.grouping>0),g(2),oe(" ",n.translations.grouping," "),g(1),D("max",n.settings.groupingMaximum)("ngModel",n.settings.grouping),g(2),D("ngIf",n.historicCoverageExecutionTimes.length>0),g(3),oe("",n.translations.filter," "),g(1),D("ngModel",n.settings.filter),g(10),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(5),D("ngClass",st(31,In,"name"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"name"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"name"!==n.settings.sortBy)),g(1),P(n.translations.name),g(3),D("ngClass",st(35,In,"covered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered"!==n.settings.sortBy)),g(1),P(n.translations.covered),g(3),D("ngClass",st(39,In,"uncovered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"uncovered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"uncovered"!==n.settings.sortBy)),g(1),P(n.translations.uncovered),g(3),D("ngClass",st(43,In,"coverable"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverable"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverable"!==n.settings.sortBy)),g(1),P(n.translations.coverable),g(3),D("ngClass",st(47,In,"total"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total"!==n.settings.sortBy)),g(1),P(n.translations.total),g(3),D("ngClass",st(51,In,"coverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverage"!==n.settings.sortBy)),g(1),P(n.translations.coverage),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(1),D("ngIf",n.branchCoverageAvailable),g(2),D("ngForOf",n.codeElements)}}let _O=(()=>{class e{constructor(n){this.queryString="",this.historicCoverageExecutionTimes=[],this.branchCoverageAvailable=!1,this.codeElements=[],this.translations={},this.settings=new iF,this.window=n.nativeWindow}ngOnInit(){this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes,this.branchCoverageAvailable=this.window.branchCoverageAvailable,this.translations=this.window.translations;let n=!1;if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings)console.log("Coverage info: Restoring from history",this.window.history.state.coverageInfoSettings),n=!0,this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));else{let o=0,i=this.window.assemblies;for(let s=0;s-1&&(this.queryString=window.location.href.substr(r)),this.updateCoverageInfo(),n&&this.restoreCollapseState()}onDonBeforeUnlodad(){if(this.saveCollapseState(),void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Coverage info: Updating history",this.settings);let n=new lv;null!==window.history.state&&(n=JSON.parse(JSON.stringify(this.window.history.state))),n.coverageInfoSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(n,"")}}updateCoverageInfo(){let n=(new Date).getTime(),r=this.window.assemblies,o=[],i=0;if(0===this.settings.grouping)for(let l=0;l{for(let o=0;o{for(let i=0;in&&(o[i].collapsed=this.settings.collapseStates[n]),n++,r(o[i].subElements)};r(this.codeElements)}}return e.\u0275fac=function(n){return new(n||e)(I(kd))},e.\u0275cmp=xn({type:e,selectors:[["coverage-info"]],hostBindings:function(n,r){1&n&&Z("beforeunload",function(){return r.onDonBeforeUnlodad()},!1,Hl)},decls:1,vars:1,consts:[[4,"ngIf"],[1,"customizebox"],["href","#",3,"click"],[1,"center"],["type","range","step","1","min","-1",3,"max","ngModel","ngModelChange"],[1,"right"],["type","text",3,"ngModel","ngModelChange"],[1,"overview","table-fixed","stripped"],[1,"column90"],[1,"column105"],[1,"column100"],[1,"column70"],[1,"column98"],[1,"column112"],["class","column90",4,"ngIf"],["class","column70",4,"ngIf"],["class","column98",4,"ngIf"],["class","column112",4,"ngIf"],[1,"icon-down-dir",3,"ngClass"],["colspan","2",1,"center"],["class","right",4,"ngIf"],["class","center","colspan","2",4,"ngIf"],[4,"ngFor","ngForOf"],[3,"ngModel","ngModelChange"],["value",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["value","allChanges"],["value","lineCoverageIncreaseOnly"],["value","lineCoverageDecreaseOnly"],["value","branchCoverageIncreaseOnly",4,"ngIf"],["value","branchCoverageDecreaseOnly",4,"ngIf"],["value","branchCoverageIncreaseOnly"],["value","branchCoverageDecreaseOnly"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable",4,"ngIf"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable"],["class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate"],["codeelement-row","",1,"namespace",3,"element","collapsed","branchCoverageAvailable"],["class","namespace","class-row","",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",1,"namespace",3,"clazz","translations","branchCoverageAvailable","historyComparisionDate"]],template:function(n,r){1&n&&S(0,mO,65,55,"div",0),2&n&&D("ngIf",r.codeElements.length>0)},directives:[yo,Td,Pi,gd,Ba,Ni,Yu,Hi,Rd,Od,_F,zF],encapsulation:2}),e})();class yO{constructor(){this.assembly="",this.numberOfRiskHotspots=10,this.filter="",this.sortBy="",this.sortOrder="asc"}}function CO(e,t){if(1&e&&(y(0,"option",14),M(1),C()),2&e){const n=t.$implicit;D("value",n),g(1),P(n)}}function vO(e,t){if(1&e&&(y(0,"span"),M(1),C()),2&e){const n=w(2);g(1),P(n.translations.top)}}function DO(e,t){1&e&&(y(0,"option",21),M(1,"20"),C())}function bO(e,t){1&e&&(y(0,"option",22),M(1,"50"),C())}function EO(e,t){1&e&&(y(0,"option",23),M(1,"100"),C())}function wO(e,t){if(1&e&&(y(0,"option",14),M(1),C()),2&e){const n=w(3);D("value",n.totalNumberOfRiskHotspots),g(1),P(n.translations.all)}}function IO(e,t){if(1&e){const n=ln();y(0,"select",15),Z("ngModelChange",function(o){return le(n),w(2).settings.numberOfRiskHotspots=o}),y(1,"option",16),M(2,"10"),C(),S(3,DO,2,0,"option",17),S(4,bO,2,0,"option",18),S(5,EO,2,0,"option",19),S(6,wO,2,2,"option",20),C()}if(2&e){const n=w(2);D("ngModel",n.settings.numberOfRiskHotspots),g(3),D("ngIf",n.totalNumberOfRiskHotspots>10),g(1),D("ngIf",n.totalNumberOfRiskHotspots>20),g(1),D("ngIf",n.totalNumberOfRiskHotspots>50),g(1),D("ngIf",n.totalNumberOfRiskHotspots>100)}}function MO(e,t){1&e&&k(0,"col",24)}const Ha=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function TO(e,t){if(1&e){const n=ln();y(0,"th"),y(1,"a",11),Z("click",function(o){const s=le(n).index;return w(2).updateSorting(""+s,o)}),k(2,"i",12),M(3),C(),y(4,"a",25),k(5,"i",26),C(),C()}if(2&e){const n=t.$implicit,r=t.index,o=w(2);g(2),D("ngClass",st(3,Ha,o.settings.sortBy===""+r&&"desc"===o.settings.sortOrder,o.settings.sortBy===""+r&&"asc"===o.settings.sortOrder,o.settings.sortBy!==""+r)),g(1),P(n.name),g(1),oi("href",n.explanationUrl,Vr)}}const AO=function(e,t){return{lightred:e,lightgreen:t}};function SO(e,t){if(1&e&&(y(0,"td",29),M(1),C()),2&e){const n=t.$implicit;D("ngClass",su(2,AO,n.exceeded,!n.exceeded)),g(1),P(n.value)}}function xO(e,t){if(1&e&&(y(0,"tr"),y(1,"td"),M(2),C(),y(3,"td"),y(4,"a",25),M(5),C(),C(),y(6,"td",27),y(7,"a",25),M(8),C(),C(),S(9,SO,2,5,"td",28),C()),2&e){const n=t.$implicit,r=w(2);g(2),P(n.assembly),g(2),D("href",n.reportPath+r.queryString,Vr),g(1),P(n.class),g(1),D("title",n.methodName),g(1),D("href",n.reportPath+r.queryString+"#file"+n.fileIndex+"_line"+n.line,Vr),g(1),oe(" ",n.methodShortName," "),g(1),D("ngForOf",n.metrics)}}function NO(e,t){if(1&e){const n=ln();y(0,"div"),y(1,"div",1),y(2,"div"),y(3,"select",2),Z("ngModelChange",function(o){return le(n),w().settings.assembly=o})("ngModelChange",function(){return le(n),w().updateRiskHotpots()}),y(4,"option",3),M(5),C(),S(6,CO,2,2,"option",4),C(),C(),y(7,"div",5),S(8,vO,2,1,"span",0),S(9,IO,7,5,"select",6),C(),k(10,"div",5),y(11,"div",7),y(12,"span"),M(13),C(),y(14,"input",8),Z("ngModelChange",function(o){return le(n),w().settings.filter=o})("ngModelChange",function(){return le(n),w().updateRiskHotpots()}),C(),C(),C(),y(15,"table",9),y(16,"colgroup"),k(17,"col"),k(18,"col"),k(19,"col"),S(20,MO,1,0,"col",10),C(),y(21,"thead"),y(22,"tr"),y(23,"th"),y(24,"a",11),Z("click",function(o){return le(n),w().updateSorting("assembly",o)}),k(25,"i",12),M(26),C(),C(),y(27,"th"),y(28,"a",11),Z("click",function(o){return le(n),w().updateSorting("class",o)}),k(29,"i",12),M(30),C(),C(),y(31,"th"),y(32,"a",11),Z("click",function(o){return le(n),w().updateSorting("method",o)}),k(33,"i",12),M(34),C(),C(),S(35,TO,6,7,"th",13),C(),C(),y(36,"tbody"),S(37,xO,10,7,"tr",13),function(e,t){const n=J();let r;const o=e+20;n.firstCreatePass?(r=function(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}throw new Qn("302",`The pipe '${e}' could not be found!`)}(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(o,r.onDestroy)):r=n.data[o];const i=r.factory||(r.factory=Xn(r.type)),s=An(I);try{const a=us(!1),l=i();us(a),function(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,b(),o,l)}finally{An(s)}}(38,"slice"),C(),C(),C()}if(2&e){const n=w();g(3),D("ngModel",n.settings.assembly),g(2),P(n.translations.assembly),g(1),D("ngForOf",n.assemblies),g(2),D("ngIf",n.totalNumberOfRiskHotspots>10),g(1),D("ngIf",n.totalNumberOfRiskHotspots>10),g(4),oe("",n.translations.filter," "),g(1),D("ngModel",n.settings.filter),g(6),D("ngForOf",n.riskHotspotMetrics),g(5),D("ngClass",st(20,Ha,"assembly"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"assembly"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"assembly"!==n.settings.sortBy)),g(1),P(n.translations.assembly),g(3),D("ngClass",st(24,Ha,"class"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"class"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"class"!==n.settings.sortBy)),g(1),P(n.translations.class),g(3),D("ngClass",st(28,Ha,"method"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"method"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"method"!==n.settings.sortBy)),g(1),P(n.translations.method),g(1),D("ngForOf",n.riskHotspotMetrics),g(2),D("ngForOf",M_(38,16,n.riskHotspots,0,n.settings.numberOfRiskHotspots))}}let RO=(()=>{class e{constructor(n){this.queryString="",this.riskHotspotMetrics=[],this.riskHotspots=[],this.totalNumberOfRiskHotspots=0,this.assemblies=[],this.translations={},this.settings=new yO,this.window=n.nativeWindow}ngOnInit(){this.riskHotspotMetrics=this.window.riskHotspotMetrics,this.translations=this.window.translations,void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.riskHotspotsSettings&&(console.log("Risk hotspots: Restoring from history",this.window.history.state.riskHotspotsSettings),this.settings=JSON.parse(JSON.stringify(this.window.history.state.riskHotspotsSettings)));const n=window.location.href.indexOf("?");n>-1&&(this.queryString=window.location.href.substr(n)),this.updateRiskHotpots()}onDonBeforeUnlodad(){if(void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Risk hotspots: Updating history",this.settings);let n=new lv;null!==window.history.state&&(n=JSON.parse(JSON.stringify(this.window.history.state))),n.riskHotspotsSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(n,"")}}updateRiskHotpots(){const n=this.window.riskHotspots;if(this.totalNumberOfRiskHotspots=n.length,0===this.assemblies.length){let s=[];for(let a=0;a0)},directives:[yo,Hi,gd,Ba,Rd,Od,Yu,Pi,Ni],pipes:[Yy],encapsulation:2}),e})(),FO=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=mn({type:e,bootstrap:[RO,_O]}),e.\u0275inj=Ft({providers:[kd],imports:[[iR,oF]]}),e})();rR().bootstrapModule(FO).catch(e=>console.error(e))}},wo=>{wo(wo.s=15)}]); \ No newline at end of file diff --git a/docs/coverage/report.css b/docs/coverage/report.css deleted file mode 100644 index 27ef3f3c..00000000 --- a/docs/coverage/report.css +++ /dev/null @@ -1,564 +0,0 @@ -html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } -body { margin: 0; padding: 0; height: 100%; color: #000; } -h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } -h1:first-of-type { margin-top: 0; } -h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } -h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } -a { color: #c00; text-decoration: none; } -a:hover { color: #000; text-decoration: none; } -h1 a.back { color: #fff; background-color: #949494; display: inline-block; margin: -12px 5px -10px -10px; padding: 10px; border-right: 1px solid #fff; } -h1 a.back:hover { background-color: #ccc; } -h1 a.button { color: #000; background-color: #bebebe; margin: -5px 0 0 10px; padding: 5px 8px 5px 8px; border: 1px solid #fff; font-size: 0.9em; border-radius: 3px; float:right; } -h1 a.button:hover { background-color: #ccc; } -h1 a.button i { position: relative; top: 1px; } - -.container { margin: auto; max-width: 1650px; width: 90%; background-color: #fff; display: flex; box-shadow: 0 0 60px #7d7d7d; min-height: 100%; } -.containerleft { padding: 0 20px 20px 20px; flex: 1; } -.containerright { width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } -.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; border-left: solid 1px #6f6f6f; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } -.containerrightfixed h1 { background-color: #c00; } -.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; width: 100%; max-width: 300px; text-overflow: ellipsis; } -.containerright a { margin-bottom: 3px; } - -@media screen and (max-width:1200px){ - .container { box-shadow: none; width: 100%; } - .containerright { display: none; } -} - -.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } - -th { text-align: left; } -.table-fixed { table-layout: fixed; } -.overview { border: solid 1px #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } -.overview th { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 4px 2px 4px; background-color: #ddd; } -.overview tr.namespace th { background-color: #dcdcdc; } -.overview thead th { background-color: #d1d1d1; } -.overview th a { color: #000; } -.overview tr.namespace a { margin-left: 15px; display: block; } -.overview td { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } -div.currenthistory { margin: -2px -5px 0 -5px; padding: 2px 5px 2px 5px; height: 16px; } -.coverage { border-collapse: collapse; font-size: 5px; height: 10px; } -.coverage td { padding: 0; border: none; } -.stripped tr:nth-child(2n+1) { background-color: #F3F3F3; } - -.customizebox { font-size: 0.75em; margin-bottom: 7px; } -.customizebox>div { width: 25%; display: inline-block; } -.customizebox div.right input { width: 150px; } -#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } - -.percentagebar { - padding-left: 3px; -} -a.percentagebar { - padding-left: 6px; -} -.percentagebarundefined { - border-left: 2px solid #fff; -} -.percentagebar0 { - border-left: 2px solid #c10909; -} -.percentagebar10 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 90%, #0aad0a 90%, #0aad0a 100%) 1; -} -.percentagebar20 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 80%, #0aad0a 80%, #0aad0a 100%) 1; -} -.percentagebar30 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 70%, #0aad0a 70%, #0aad0a 100%) 1; -} -.percentagebar40 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 60%, #0aad0a 60%, #0aad0a 100%) 1; -} -.percentagebar50 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 50%, #0aad0a 50%, #0aad0a 100%) 1; -} -.percentagebar60 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 40%, #0aad0a 40%, #0aad0a 100%) 1; -} -.percentagebar70 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 30%, #0aad0a 30%, #0aad0a 100%) 1; -} -.percentagebar80 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 20%, #0aad0a 20%, #0aad0a 100%) 1; -} -.percentagebar90 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 10%, #0aad0a 10%, #0aad0a 100%) 1; -} -.percentagebar100 { - border-left: 2px solid #0aad0a; -} - -.hidden, .ng-hide { display: none; } -.right { text-align: right; } -.center { text-align: center; } -.rightmargin { padding-right: 8px; } -.leftmargin { padding-left: 5px; } -.green { background-color: #0aad0a; } -.lightgreen { background-color: #dcf4dc; } -.red { background-color: #c10909; } -.lightred { background-color: #f7dede; } -.orange { background-color: #FFA500; } -.lightorange { background-color: #FFEFD5; } -.gray { background-color: #dcdcdc; } -.lightgray { color: #888888; } -.lightgraybg { background-color: #dadada; } - -code { font-family: Consolas, monospace; font-size: 0.9em; } - -.toggleZoom { text-align:right; } - -.ct-chart { position: relative; } -.ct-chart .ct-line { stroke-width: 2px !important; } -.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } -.ct-chart .ct-point:hover { stroke-width: 10px !important; } -.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} -.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} - -.tinylinecoveragechart, .tinybranchcoveragechart { background-color: #fff; margin-left: -3px; float: left; border: solid 1px #c1c1c1; width: 30px; height: 18px; } -.historiccoverageoffset { margin-top: 7px; } - -.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line { stroke-width: 1px !important; } -.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } - -.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } -.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } - -.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D; color: #453D3F; pointer-events: none; z-index: 1; min-width: 250px; } - -.column1324 { max-width: 1324px; } -.column674 { max-width: 674px; } -.column60 { width: 60px; } -.column70 { width: 70px; } -.column90 { width: 90px; } -.column98 { width: 98px; } -.column100 { width: 100px; } -.column105 { width: 105px; } -.column112 { width: 112px; } -.column135 { width: 135px; } -.column150 { width: 150px; } - -.covered0 { width: 0px; } -.covered1 { width: 1px; } -.covered2 { width: 2px; } -.covered3 { width: 3px; } -.covered4 { width: 4px; } -.covered5 { width: 5px; } -.covered6 { width: 6px; } -.covered7 { width: 7px; } -.covered8 { width: 8px; } -.covered9 { width: 9px; } -.covered10 { width: 10px; } -.covered11 { width: 11px; } -.covered12 { width: 12px; } -.covered13 { width: 13px; } -.covered14 { width: 14px; } -.covered15 { width: 15px; } -.covered16 { width: 16px; } -.covered17 { width: 17px; } -.covered18 { width: 18px; } -.covered19 { width: 19px; } -.covered20 { width: 20px; } -.covered21 { width: 21px; } -.covered22 { width: 22px; } -.covered23 { width: 23px; } -.covered24 { width: 24px; } -.covered25 { width: 25px; } -.covered26 { width: 26px; } -.covered27 { width: 27px; } -.covered28 { width: 28px; } -.covered29 { width: 29px; } -.covered30 { width: 30px; } -.covered31 { width: 31px; } -.covered32 { width: 32px; } -.covered33 { width: 33px; } -.covered34 { width: 34px; } -.covered35 { width: 35px; } -.covered36 { width: 36px; } -.covered37 { width: 37px; } -.covered38 { width: 38px; } -.covered39 { width: 39px; } -.covered40 { width: 40px; } -.covered41 { width: 41px; } -.covered42 { width: 42px; } -.covered43 { width: 43px; } -.covered44 { width: 44px; } -.covered45 { width: 45px; } -.covered46 { width: 46px; } -.covered47 { width: 47px; } -.covered48 { width: 48px; } -.covered49 { width: 49px; } -.covered50 { width: 50px; } -.covered51 { width: 51px; } -.covered52 { width: 52px; } -.covered53 { width: 53px; } -.covered54 { width: 54px; } -.covered55 { width: 55px; } -.covered56 { width: 56px; } -.covered57 { width: 57px; } -.covered58 { width: 58px; } -.covered59 { width: 59px; } -.covered60 { width: 60px; } -.covered61 { width: 61px; } -.covered62 { width: 62px; } -.covered63 { width: 63px; } -.covered64 { width: 64px; } -.covered65 { width: 65px; } -.covered66 { width: 66px; } -.covered67 { width: 67px; } -.covered68 { width: 68px; } -.covered69 { width: 69px; } -.covered70 { width: 70px; } -.covered71 { width: 71px; } -.covered72 { width: 72px; } -.covered73 { width: 73px; } -.covered74 { width: 74px; } -.covered75 { width: 75px; } -.covered76 { width: 76px; } -.covered77 { width: 77px; } -.covered78 { width: 78px; } -.covered79 { width: 79px; } -.covered80 { width: 80px; } -.covered81 { width: 81px; } -.covered82 { width: 82px; } -.covered83 { width: 83px; } -.covered84 { width: 84px; } -.covered85 { width: 85px; } -.covered86 { width: 86px; } -.covered87 { width: 87px; } -.covered88 { width: 88px; } -.covered89 { width: 89px; } -.covered90 { width: 90px; } -.covered91 { width: 91px; } -.covered92 { width: 92px; } -.covered93 { width: 93px; } -.covered94 { width: 94px; } -.covered95 { width: 95px; } -.covered96 { width: 96px; } -.covered97 { width: 97px; } -.covered98 { width: 98px; } -.covered99 { width: 99px; } -.covered100 { width: 100px; } - - @media print { - html, body { background-color: #fff; } - .container { max-width: 100%; width: 100%; padding: 0; } - .overview colgroup col:first-child { width: 300px; } -} - -.icon-up-dir_active { - background-image: url(icon_up-dir.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDEyMTZxMCAyNi0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMC00NS0xOXQtMTktNDUgMTktNDVsNDQ4LTQ0OHExOS0xOSA0NS0xOXQ0NSAxOWw0NDggNDQ4cTE5IDE5IDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-down-dir_active { - background-image: url(icon_up-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-down-dir { - background-image: url(icon_down-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-info-circled { - background-image: url(icon_info-circled.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; -} -.icon-plus { - background-image: url(icon_plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTQxNnY0MTZxMCA0MC0yOCA2OHQtNjggMjhoLTE5MnEtNDAgMC02OC0yOHQtMjgtNjh2LTQxNmgtNDE2cS00MCAwLTY4LTI4dC0yOC02OHYtMTkycTAtNDAgMjgtNjh0NjgtMjhoNDE2di00MTZxMC00MCAyOC02OHQ2OC0yOGgxOTJxNDAgMCA2OCAyOHQyOCA2OHY0MTZoNDE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-minus { - background-image: url(icon_minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTEyMTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-wrench { - background-image: url(icon_wrench.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik00NDggMTQ3MnEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOSA0NS0xOSAxOS00NXptNjQ0LTQyMGwtNjgyIDY4MnEtMzcgMzctOTAgMzctNTIgMC05MS0zN2wtMTA2LTEwOHEtMzgtMzYtMzgtOTAgMC01MyAzOC05MWw2ODEtNjgxcTM5IDk4IDExNC41IDE3My41dDE3My41IDExNC41em02MzQtNDM1cTAgMzktMjMgMTA2LTQ3IDEzNC0xNjQuNSAyMTcuNXQtMjU4LjUgODMuNXEtMTg1IDAtMzE2LjUtMTMxLjV0LTEzMS41LTMxNi41IDEzMS41LTMxNi41IDMxNi41LTEzMS41cTU4IDAgMTIxLjUgMTYuNXQxMDcuNSA0Ni41cTE2IDExIDE2IDI4dC0xNiAyOGwtMjkzIDE2OXYyMjRsMTkzIDEwN3E1LTMgNzktNDguNXQxMzUuNS04MSA3MC41LTM1LjVxMTUgMCAyMy41IDEwdDguNSAyNXoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-fork { - background-image: url(icon_fork.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNmZmYiIC8+PHBhdGggZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-cube { - background-image: url(icon_cube.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTYyOWw2NDAtMzQ5di02MzZsLTY0MCAyMzN2NzUyem0tNjQtODY1bDY5OC0yNTQtNjk4LTI1NC02OTggMjU0em04MzItMjUydjc2OHEwIDM1LTE4IDY1dC00OSA0N2wtNzA0IDM4NHEtMjggMTYtNjEgMTZ0LTYxLTE2bC03MDQtMzg0cS0zMS0xNy00OS00N3QtMTgtNjV2LTc2OHEwLTQwIDIzLTczdDYxLTQ3bDcwNC0yNTZxMjItOCA0NC04dDQ0IDhsNzA0IDI1NnEzOCAxNCA2MSA0N3QyMyA3M3oiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-search-plus { - background-image: url(icon_search-plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtMjI0djIyNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yMjRoLTIyNHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTY0cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoMjI0di0yMjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41djIyNGgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-search-minus { - background-image: url(icon_search-minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNTc2cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg1NzZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-star { - background-image: url(icon_star.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-sponsor { - background-image: url(icon_sponsor.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTY2NHEtMjYgMC00NC0xOGwtNjI0LTYwMnEtMTAtOC0yNy41LTI2dC01NS41LTY1LjUtNjgtOTcuNS01My41LTEyMS0yMy41LTEzOHEwLTIyMCAxMjctMzQ0dDM1MS0xMjRxNjIgMCAxMjYuNSAyMS41dDEyMCA1OCA5NS41IDY4LjUgNzYgNjhxMzYtMzYgNzYtNjh0OTUuNS02OC41IDEyMC01OCAxMjYuNS0yMS41cTIyNCAwIDM1MSAxMjR0MTI3IDM0NHEwIDIyMS0yMjkgNDUwbC02MjMgNjAwcS0xOCAxOC00NCAxOHoiIGZpbGw9IiNlYTRhYWEiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} - -@media (prefers-color-scheme: dark) { - @media screen { - html { - background-color: #333; - color: #fff; - } - - body { - color: #fff; - } - - h1 { - background-color: #555453; - color: #fff; - } - - .container { - background-color: #333; - box-shadow: 0 0 60px #0c0c0c; - } - - .containerrightfixed { - background-color: #3D3C3C; - border-left: solid 1px #515050; - } - - .containerrightfixed h1 { - background-color: #484747; - } - - .overview tr:hover { - background-color: #2E2D2C; - } - - .overview th { - background-color: #444; - border: solid 1px #3B3A39; - } - - .overview thead th { - background-color: #444; - } - - .overview th a { - color: #fff; - color: rgba(255, 255, 255, 0.95); - } - - .overview th a:hover { - color: #0078d4; - } - - .overview td { - border: solid 1px #3B3A39; - } - - .overview .coverage td { - border: none; - } - - .stripped tr:nth-child(2n+1) { - background-color: #3c3c3c; - } - - input, select { - background-color: #333; - color: #fff; - border: 1px solid #A19F9D; - } - - a { - color: #fff; - color: rgba(255, 255, 255, 0.95); - } - - a:hover { - color: #0078d4; - } - - h1 a.back { - background-color: #4a4846; - } - - h1 a.button { - color: #fff; - background-color: #565656; - border-color: #c1c1c1; - } - - h1 a.button:hover { - background-color: #8d8d8d; - } - - .gray { - background-color: #484747; - } - - .lightgray { - color: #ebebeb; - } - - .lightgraybg { - background-color: #474747; - } - - .lightgreen { - background-color: #406540; - } - - .lightorange { - background-color: #ab7f36; - } - - .lightred { - background-color: #954848; - } - - .ct-label { - color: #fff !important; - } - - .ct-grid { - stroke: #fff !important; - } - - .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { - stroke: #0078D4 !important; - } - - .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { - stroke: #6dc428 !important; - } - - .linecoverage { - background-color: #0078D4; - } - - .branchcoverage { - background-color: #6dc428; - } - - .tinylinecoveragechart, .tinybranchcoveragechart { - background-color: #333; - } - - .tinybranchcoveragechart .ct-series.ct-series-a .ct-line { - stroke: #6dc428 !important; - } - - .icon-down-dir { - background-image: url(icon_down-dir_active_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE0MDggNzA0cTAgMjYtMTkgNDVsLTQ0OCA0NDhxLTE5IDE5LTQ1IDE5dC00NS0xOWwtNDQ4LTQ0OHEtMTktMTktMTktNDV0MTktNDUgNDUtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6Ii8+PC9zdmc+); - } - - .icon-info-circled { - background-image: url(icon_info-circled_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); - } - - .icon-plus { - background-image: url(icon_plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtMTkycS00MCAwLTY4LTI4dC0yOC02OHYtNDE2aC00MTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGg0MTZ2LTQxNnEwLTQwIDI4LTY4dDY4LTI4aDE5MnE0MCAwIDY4IDI4dDI4IDY4djQxNmg0MTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); - } - - .icon-minus { - background-image: url(icon_minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtMTIxNnEtNDAgMC02OC0yOHQtMjgtNjh2LTE5MnEwLTQwIDI4LTY4dDY4LTI4aDEyMTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); - } - - .icon-wrench { - background-image: url(icon_wrench_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JEQkRCRiIgZD0iTTQ0OCAxNDcycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em02NDQtNDIwbC02ODIgNjgycS0zNyAzNy05MCAzNy01MiAwLTkxLTM3bC0xMDYtMTA4cS0zOC0zNi0zOC05MCAwLTUzIDM4LTkxbDY4MS02ODFxMzkgOTggMTE0LjUgMTczLjV0MTczLjUgMTE0LjV6bTYzNC00MzVxMCAzOS0yMyAxMDYtNDcgMTM0LTE2NC41IDIxNy41dC0yNTguNSA4My41cS0xODUgMC0zMTYuNS0xMzEuNXQtMTMxLjUtMzE2LjUgMTMxLjUtMzE2LjUgMzE2LjUtMTMxLjVxNTggMCAxMjEuNSAxNi41dDEwNy41IDQ2LjVxMTYgMTEgMTYgMjh0LTE2IDI4bC0yOTMgMTY5djIyNGwxOTMgMTA3cTUtMyA3OS00OC41dDEzNS41LTgxIDcwLjUtMzUuNXExNSAwIDIzLjUgMTB0OC41IDI1eiIvPjwvc3ZnPg==); - } - - .icon-fork { - background-image: url(icon_fork_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); - } - - .icon-cube { - background-image: url(icon_cube_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTg5NiAxNjI5bDY0MC0zNDl2LTYzNmwtNjQwIDIzM3Y3NTJ6bS02NC04NjVsNjk4LTI1NC02OTgtMjU0LTY5OCAyNTR6bTgzMi0yNTJ2NzY4cTAgMzUtMTggNjV0LTQ5IDQ3bC03MDQgMzg0cS0yOCAxNi02MSAxNnQtNjEtMTZsLTcwNC0zODRxLTMxLTE3LTQ5LTQ3dC0xOC02NXYtNzY4cTAtNDAgMjMtNzN0NjEtNDdsNzA0LTI1NnEyMi04IDQ0LTh0NDQgOGw3MDQgMjU2cTM4IDE0IDYxIDQ3dDIzIDczeiIvPjwvc3ZnPg==); - } - - .icon-search-plus { - background-image: url(icon_search-plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC0yMjR2MjI0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTIyNGgtMjI0cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWgyMjR2LTIyNHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MjI0aDIyNHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); - } - - .icon-search-minus { - background-image: url(icon_search-minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC01NzZxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di02NHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDU3NnExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); - } - - .icon-star { - background-image: url(icon_star_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=); - } - } -} - -.ct-double-octave:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-grid-background,.ct-line{fill:none}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{content:"";display:table;clear:both}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..e9302556 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,218 @@ + + + + + + index + + + + + + + + + + + + + + + + + + + + + + +
    +

    What is ImageProcessing?

    +

    A library for image processing using GPGPU and agents for parallel computing.

    +
    +
    +
    +
    +
    +
    Tutorials
    +

    How to get started with ImageProcessing

    +
    + +
    +
    +
    +
    +
    +
    How-To Guides
    +

    Learn how to work with the ImageProcessing library directly in your code

    +
    + +
    +
    +
    +
    +
    +
    Explanations
    +

    Learn about the structure of the library

    +
    + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/index.json b/docs/index.json new file mode 100644 index 00000000..58c595ac --- /dev/null +++ b/docs/index.json @@ -0,0 +1 @@ +[{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing.html","title":"ImageProcessing","content":"Agents \nArguments \nCpuProcessing \nGpuKernels \nGpuProcessing \nImageArrayProcessing \nKernels \nMain \nMyImage \nTypes"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html","title":"Agents","content":"Agents \n\n Module with implementation of agents for image processing\n \nAgents.listAllFiles \nlistAllFiles \nAgents.outFile \noutFile \nAgents.imgSaver \nimgSaver \nAgents.imgProcessor \nimgProcessor \nAgents.msgLogger \nmsgLogger \nAgents.superAgent \nsuperAgent \nAgents.superImageProcessing \nsuperImageProcessing"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#listAllFiles","title":"Agents.listAllFiles","content":"Agents.listAllFiles \nlistAllFiles \n\n List of all files in directory\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#outFile","title":"Agents.outFile","content":"Agents.outFile \noutFile \n\n Creation of path to save the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#imgSaver","title":"Agents.imgSaver","content":"Agents.imgSaver \nimgSaver \n\n Agent for saving images\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#imgProcessor","title":"Agents.imgProcessor","content":"Agents.imgProcessor \nimgProcessor \n\n Agent for image processing\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#msgLogger","title":"Agents.msgLogger","content":"Agents.msgLogger \nmsgLogger \n\n Agent for logging\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#superAgent","title":"Agents.superAgent","content":"Agents.superAgent \nsuperAgent \n\n Agent with the ability to process and save the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-agents.html#superImageProcessing","title":"Agents.superImageProcessing","content":"Agents.superImageProcessing \nsuperImageProcessing \n\n Image processing using superAgents\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html","title":"Arguments","content":"Arguments \n\n Module with implementation of work via console commands\n \nArguments.CliArguments \nCliArguments \nArguments.first \nfirst \nArguments.second \nsecond \nArguments.third \nthird \nArguments.fourth \nfourth \nArguments.modificationParser \nmodificationParser \nArguments.modificationGpuParser \nmodificationGpuParser \nArguments.deviceParser \ndeviceParser"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#first","title":"Arguments.first","content":"Arguments.first \nfirst \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#second","title":"Arguments.second","content":"Arguments.second \nsecond \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#third","title":"Arguments.third","content":"Arguments.third \nthird \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#fourth","title":"Arguments.fourth","content":"Arguments.fourth \nfourth \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#modificationParser","title":"Arguments.modificationParser","content":"Arguments.modificationParser \nmodificationParser \n\n Parsing of CPU modification\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#modificationGpuParser","title":"Arguments.modificationGpuParser","content":"Arguments.modificationGpuParser \nmodificationGpuParser \n\n Parsing of GPU modification\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments.html#deviceParser","title":"Arguments.deviceParser","content":"Arguments.deviceParser \ndeviceParser \n\n Parsing of device\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html","title":"CliArguments","content":"CliArguments \n \nCliArguments.InputPath \nInputPath \nCliArguments.OutputPath \nOutputPath \nCliArguments.Agents \nAgents \nCliArguments.SuperAgents \nSuperAgents \nCliArguments.Modifications \nModifications \nCliArguments.GpGpu \nGpGpu"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html#InputPath","title":"CliArguments.InputPath","content":"CliArguments.InputPath \nInputPath \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html#OutputPath","title":"CliArguments.OutputPath","content":"CliArguments.OutputPath \nOutputPath \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html#Agents","title":"CliArguments.Agents","content":"CliArguments.Agents \nAgents \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html#SuperAgents","title":"CliArguments.SuperAgents","content":"CliArguments.SuperAgents \nSuperAgents \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html#Modifications","title":"CliArguments.Modifications","content":"CliArguments.Modifications \nModifications \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-arguments-cliarguments.html#GpGpu","title":"CliArguments.GpGpu","content":"CliArguments.GpGpu \nGpGpu \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-cpuprocessing.html","title":"CpuProcessing","content":"CpuProcessing \n\n Module with functions for image processing on the CPU\n \nCpuProcessing.applyFilter \napplyFilter \nCpuProcessing.rotate \nrotate \nCpuProcessing.mirror \nmirror \nCpuProcessing.fishEye \nfishEye"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-cpuprocessing.html#applyFilter","title":"CpuProcessing.applyFilter","content":"CpuProcessing.applyFilter \napplyFilter \n\n Filter application\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-cpuprocessing.html#rotate","title":"CpuProcessing.rotate","content":"CpuProcessing.rotate \nrotate \n\n Rotate of image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-cpuprocessing.html#mirror","title":"CpuProcessing.mirror","content":"CpuProcessing.mirror \nmirror \n\n Image Reflection\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-cpuprocessing.html#fishEye","title":"CpuProcessing.fishEye","content":"CpuProcessing.fishEye \nfishEye \n\n Applying \u0022FishEye\u0022 to an image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html","title":"GpuKernels","content":"GpuKernels \n\n Module with kernels for image processing on the GPU\n \nGpuKernels.applyFilterKernel \napplyFilterKernel \nGpuKernels.applyFilterProcessor \napplyFilterProcessor \nGpuKernels.rotateKernel \nrotateKernel \nGpuKernels.rotateKernelProcessor \nrotateKernelProcessor \nGpuKernels.mirrorKernel \nmirrorKernel \nGpuKernels.mirrorKernelProcessor \nmirrorKernelProcessor \nGpuKernels.fishEyeKernel \nfishEyeKernel \nGpuKernels.fishEyeKernelProcessor \nfishEyeKernelProcessor"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#applyFilterKernel","title":"GpuKernels.applyFilterKernel","content":"GpuKernels.applyFilterKernel \napplyFilterKernel \n\n Compilation of kernel to apply filter to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#applyFilterProcessor","title":"GpuKernels.applyFilterProcessor","content":"GpuKernels.applyFilterProcessor \napplyFilterProcessor \n\n Asynchronous application of the filter kernel to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#rotateKernel","title":"GpuKernels.rotateKernel","content":"GpuKernels.rotateKernel \nrotateKernel \n\n Compilation of kernel to rotate the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#rotateKernelProcessor","title":"GpuKernels.rotateKernelProcessor","content":"GpuKernels.rotateKernelProcessor \nrotateKernelProcessor \n\n Asynchronous application of the rotation kernel to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#mirrorKernel","title":"GpuKernels.mirrorKernel","content":"GpuKernels.mirrorKernel \nmirrorKernel \n\n Compilation of kernel to reflect the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#mirrorKernelProcessor","title":"GpuKernels.mirrorKernelProcessor","content":"GpuKernels.mirrorKernelProcessor \nmirrorKernelProcessor \n\n Asynchronous application of the reflection kernel to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#fishEyeKernel","title":"GpuKernels.fishEyeKernel","content":"GpuKernels.fishEyeKernel \nfishEyeKernel \n\n Compilation of kernel to apply FishEye to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpukernels.html#fishEyeKernelProcessor","title":"GpuKernels.fishEyeKernelProcessor","content":"GpuKernels.fishEyeKernelProcessor \nfishEyeKernelProcessor \n\n Asynchronous application of the fisheye kernel to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpuprocessing.html","title":"GpuProcessing","content":"GpuProcessing \n\n Module with functions for image processing on the GPU\n \nGpuProcessing.applyFilter \napplyFilter \nGpuProcessing.rotate \nrotate \nGpuProcessing.mirror \nmirror \nGpuProcessing.fishEye \nfishEye"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpuprocessing.html#applyFilter","title":"GpuProcessing.applyFilter","content":"GpuProcessing.applyFilter \napplyFilter \n\n Filter application\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpuprocessing.html#rotate","title":"GpuProcessing.rotate","content":"GpuProcessing.rotate \nrotate \n\n Rotate of image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpuprocessing.html#mirror","title":"GpuProcessing.mirror","content":"GpuProcessing.mirror \nmirror \n\n Reflection of image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-gpuprocessing.html#fishEye","title":"GpuProcessing.fishEye","content":"GpuProcessing.fishEye \nfishEye \n\n Applying fisheye filter to the image\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-imagearrayprocessing.html","title":"ImageArrayProcessing","content":"ImageArrayProcessing \n\n Module with implementation of processing array of images\n \nImageArrayProcessing.extensions \nextensions \nImageArrayProcessing.listAllFiles \nlistAllFiles \nImageArrayProcessing.arrayOfImagesProcessing \narrayOfImagesProcessing"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-imagearrayprocessing.html#extensions","title":"ImageArrayProcessing.extensions","content":"ImageArrayProcessing.extensions \nextensions \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-imagearrayprocessing.html#listAllFiles","title":"ImageArrayProcessing.listAllFiles","content":"ImageArrayProcessing.listAllFiles \nlistAllFiles \n\n List of all files in directory with correct extensions\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-imagearrayprocessing.html#arrayOfImagesProcessing","title":"ImageArrayProcessing.arrayOfImagesProcessing","content":"ImageArrayProcessing.arrayOfImagesProcessing \narrayOfImagesProcessing \n\n Processing array of images\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-kernels.html","title":"Kernels","content":"Kernels \n\n Module with kernels for image processing\n \nKernels.gaussianBlurKernel \ngaussianBlurKernel \nKernels.edgesKernel \nedgesKernel \nKernels.gaussianBlur7x7Kernel \ngaussianBlur7x7Kernel \nKernels.sharpenKernel \nsharpenKernel \nKernels.embossKernel \nembossKernel"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-kernels.html#gaussianBlurKernel","title":"Kernels.gaussianBlurKernel","content":"Kernels.gaussianBlurKernel \ngaussianBlurKernel \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-kernels.html#edgesKernel","title":"Kernels.edgesKernel","content":"Kernels.edgesKernel \nedgesKernel \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-kernels.html#gaussianBlur7x7Kernel","title":"Kernels.gaussianBlur7x7Kernel","content":"Kernels.gaussianBlur7x7Kernel \ngaussianBlur7x7Kernel \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-kernels.html#sharpenKernel","title":"Kernels.sharpenKernel","content":"Kernels.sharpenKernel \nsharpenKernel \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-kernels.html#embossKernel","title":"Kernels.embossKernel","content":"Kernels.embossKernel \nembossKernel \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-main.html","title":"Main","content":"Main \n\n Module for processing console commands\n \nMain.main \nmain"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-main.html#main","title":"Main.main","content":"Main.main \nmain \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage.html","title":"MyImage","content":"MyImage \n\n Module for working with images\n \nMyImage.MyImage \nMyImage \nMyImage.loadAsImage \nloadAsImage \nMyImage.saveImage \nsaveImage"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage.html#loadAsImage","title":"MyImage.loadAsImage","content":"MyImage.loadAsImage \nloadAsImage \n\n Load image as MyImage type\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage.html#saveImage","title":"MyImage.saveImage","content":"MyImage.saveImage \nsaveImage \n\n Save MyImage in a specific directory\n "},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage-myimage.html","title":"MyImage","content":"MyImage \n\n Type to represent images\n \nMyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \nMyImage.Data \nData \nMyImage.Width \nWidth \nMyImage.Height \nHeight \nMyImage.Name \nName"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage-myimage.html#\u0060\u0060.ctor\u0060\u0060","title":"MyImage.\u0060\u0060.ctor\u0060\u0060","content":"MyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage-myimage.html#Data","title":"MyImage.Data","content":"MyImage.Data \nData \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage-myimage.html#Width","title":"MyImage.Width","content":"MyImage.Width \nWidth \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage-myimage.html#Height","title":"MyImage.Height","content":"MyImage.Height \nHeight \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-myimage-myimage.html#Name","title":"MyImage.Name","content":"MyImage.Name \nName \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types.html","title":"Types","content":"Types \n\n Module with necessary algebraic types\n \nTypes.AgentStatus \nAgentStatus \nTypes.Devices \nDevices \nTypes.MirrorDirection \nMirrorDirection \nTypes.Modifications \nModifications \nTypes.Msg \nMsg \nTypes.Side \nSide"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-agentstatus.html","title":"AgentStatus","content":"AgentStatus \n\n Type for determining the status of an agent\n \nAgentStatus.On \nOn \nAgentStatus.Off \nOff"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-agentstatus.html#On","title":"AgentStatus.On","content":"AgentStatus.On \nOn \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-agentstatus.html#Off","title":"AgentStatus.Off","content":"AgentStatus.Off \nOff \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-devices.html","title":"Devices","content":"Devices \n\n Type for defining the executor of transformations\n \nDevices.AnyGpu \nAnyGpu \nDevices.Nvidia \nNvidia \nDevices.Amd \nAmd \nDevices.Intel \nIntel"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-devices.html#AnyGpu","title":"Devices.AnyGpu","content":"Devices.AnyGpu \nAnyGpu \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-devices.html#Nvidia","title":"Devices.Nvidia","content":"Devices.Nvidia \nNvidia \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-devices.html#Amd","title":"Devices.Amd","content":"Devices.Amd \nAmd \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-devices.html#Intel","title":"Devices.Intel","content":"Devices.Intel \nIntel \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-mirrordirection.html","title":"MirrorDirection","content":"MirrorDirection \n\n Type for determining the direction of image reflection\n \nMirrorDirection.Vertical \nVertical \nMirrorDirection.Horizontal \nHorizontal"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-mirrordirection.html#Vertical","title":"MirrorDirection.Vertical","content":"MirrorDirection.Vertical \nVertical \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-mirrordirection.html#Horizontal","title":"MirrorDirection.Horizontal","content":"MirrorDirection.Horizontal \nHorizontal \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html","title":"Modifications","content":"Modifications \n\n Type for determining the applied image transformation\n \nModifications.Gauss5x5 \nGauss5x5 \nModifications.Gauss7x7 \nGauss7x7 \nModifications.Edges \nEdges \nModifications.Sharpen \nSharpen \nModifications.Emboss \nEmboss \nModifications.ClockwiseRotation \nClockwiseRotation \nModifications.CounterClockwiseRotation \nCounterClockwiseRotation \nModifications.MirrorVertical \nMirrorVertical \nModifications.MirrorHorizontal \nMirrorHorizontal \nModifications.FishEye \nFishEye"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#Gauss5x5","title":"Modifications.Gauss5x5","content":"Modifications.Gauss5x5 \nGauss5x5 \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#Gauss7x7","title":"Modifications.Gauss7x7","content":"Modifications.Gauss7x7 \nGauss7x7 \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#Edges","title":"Modifications.Edges","content":"Modifications.Edges \nEdges \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#Sharpen","title":"Modifications.Sharpen","content":"Modifications.Sharpen \nSharpen \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#Emboss","title":"Modifications.Emboss","content":"Modifications.Emboss \nEmboss \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#ClockwiseRotation","title":"Modifications.ClockwiseRotation","content":"Modifications.ClockwiseRotation \nClockwiseRotation \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#CounterClockwiseRotation","title":"Modifications.CounterClockwiseRotation","content":"Modifications.CounterClockwiseRotation \nCounterClockwiseRotation \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#MirrorVertical","title":"Modifications.MirrorVertical","content":"Modifications.MirrorVertical \nMirrorVertical \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#MirrorHorizontal","title":"Modifications.MirrorHorizontal","content":"Modifications.MirrorHorizontal \nMirrorHorizontal \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-modifications.html#FishEye","title":"Modifications.FishEye","content":"Modifications.FishEye \nFishEye \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-msg.html","title":"Msg","content":"Msg \n\n Type to define a message to be forwarded between agents\n \nMsg.Img \nImg \nMsg.Path \nPath \nMsg.EOS \nEOS \nMsg.Message \nMessage"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-msg.html#Img","title":"Msg.Img","content":"Msg.Img \nImg \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-msg.html#Path","title":"Msg.Path","content":"Msg.Path \nPath \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-msg.html#EOS","title":"Msg.EOS","content":"Msg.EOS \nEOS \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-msg.html#Message","title":"Msg.Message","content":"Msg.Message \nMessage \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-side.html","title":"Side","content":"Side \n\n Type for determining the rotation side of the image\n \nSide.Right \nRight \nSide.Left \nLeft"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-side.html#Right","title":"Side.Right","content":"Side.Right \nRight \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingreference/imageprocessing-types-side.html#Left","title":"Side.Left","content":"Side.Left \nLeft \n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingindex.html","title":"index","content":"## What is ImageProcessing?\r\n\r\nA library for image processing using GPGPU and agents for parallel computing. \r\n\r\n---\r\n\r\n\u003Cdiv class=\u0022row row-cols-1 row-cols-md-2\u0022\u003E\r\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003ETutorials\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003EHow to get started with ImageProcessing \u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}Tutorials/Tutorial.html\u0022 class=\u0022btn btn-primary\u0022\u003EGet started\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003EHow-To Guides\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003ELearn how to work with the ImageProcessing library directly in your code \u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}/How_Tos/Code.html\u0022 class=\u0022btn btn-primary\u0022\u003EHow to code\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022col mb-4 mb-md-0\u0022\u003E\r\n \u003Cdiv class=\u0022card h-100\u0022\u003E\r\n \u003Cdiv class=\u0022card-body\u0022\u003E\r\n \u003Ch5 class=\u0022card-title\u0022\u003EExplanations\u003C/h5\u003E\r\n \u003Cp class=\u0022card-text\u0022\u003ELearn about the structure of the library\u003C/p\u003E\r\n \u003C/div\u003E\r\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\r\n \u003Ca href=\u0022{{root}}Explanations/Structure.html\u0022 class=\u0022btn btn-primary\u0022\u003EStructure\u003C/a\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n \u003C/div\u003E\r\n\u003C/div\u003E"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingExplanations/Structure.html","title":"Structure","content":"---\r\ntitle: Structure\r\ncategory: Explanations\r\ncategoryindex: 3\r\nindex: 1\r\n---\r\n\r\n# Structure of ImageProcessing library\r\n\r\n![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/gh-pages/images/Structure.png)"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingHow_Tos/Code.html","title":"How to code","content":"---\r\ntitle: How to code\r\ncategory: Guides\r\ncategoryindex: 1\r\nindex: 100\r\n---\r\n\r\n# How to code\r\n\r\nIn this tutorial, we will look at how to work with the ImageProcessing library using code rather than console commands.\r\n\r\n## Installing ImageProcessing\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0\r\n\u0060\u0060\u0060\r\n\u003Cdiv class=\u0022alert alert-primary\u0022 role=\u0022alert\u0022\u003E\r\n \u003Cp\u003E\r\n NOTE: The library uses .NET 7.0. Make sure your application complies with this requirement.\r\n \u003C/p\u003E\r\n\u003C/div\u003E\r\n\r\nLoad your image using the \u0060loadAsImage\u0060 function from the \u0060MyImage\u0060 module.\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E let image = loadAsImage \u0022path to the image\u0022\r\n\u0060\u0060\u0060\r\n\r\nFor CPU and GPU the list of transforms is identical, decide what you want to process your image on and select the appropriate function to process from the \u0060CpuProcessing\u0060 module or the \u0060GpuProcessing\u0060 module respectively.\r\n\r\n### In the case of CPU processing:\r\n\r\nApply the fisheye filter to the uploaded image.\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E let newImage = fishEye image\r\n\u0060\u0060\u0060\r\n\r\nDon\u0027t forget to save the processed image using the saveImage function from the \u0060MyImage\u0060 module!\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E let newImage = saveImage \u0022path\u0022\r\n\u0060\u0060\u0060\r\n\r\n### In the case of GPU processing:\r\n\r\nIn the case of GPU processing, you have to go through a few extra steps to achieve your goal:\r\n\r\nPrepare OpenCl context and queue(from \u0060Brahma.FSharp\u0060 module):\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E let clContext = ClContext(ClDevice.GetFirstAppropriateDevice(device))\r\n\u003E let queue = clContext.QueueProvider.CreateQueue()\r\n\u0060\u0060\u0060\r\n\r\nCompile the kernel to apply the filter using the \u0060fishEyeKernel\u0060 function from the \u0060GpuKernels\u0060 module: \r\n\r\n\u0060\u0060\u0060sh\r\n\u003E let fishKernel = fishEyeKernel clContext\r\n\u0060\u0060\u0060\r\n\r\nProcess the image using the \u0060fishEye\u0060 function from the \u0060GpuProcessing\u0060 module:\r\n\r\n\u0060\u0060\u0060sh\r\nlet newImage = fishEye fishKernel clContext 64 queue image\r\n\u0060\u0060\u0060\r\n\r\nDon\u0027t forget to save the new image:\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E let newImage = saveImage \u0022path\u0022\r\n\u0060\u0060\u0060\r\n\r\n\u003Cdiv class=\u0022alert alert-primary\u0022 role=\u0022alert\u0022\u003E\r\n \u003Cp\u003E\r\n For more info about GPU processing please check \u003Ca href=\u0022https://yaccconstructor.github.io/Brahma.FSharp/\u0022\u003EBrahma\r\n \u003C/p\u003E\r\n\u003C/div\u003E\r\n"},{"uri":"https://LeonidLodygin.github.io/ImageProcessingTutorials/Tutorial.html","title":"Get Started","content":"---\r\ntitle: Get Started\r\ncategory: Tutorials\r\ncategoryindex: 0\r\nindex: 100\r\n---\r\n\r\n# Get Started\r\n\r\nIn this tutorial we will look at how to get started with the ImageProcessing library and process your first images.\r\n\r\n## Installing ImageProcessing\r\n\r\n\u0060\u0060\u0060sh\r\n\u003E dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0\r\n\u0060\u0060\u0060\r\n\r\n## Processing of images\r\n\r\n### Prepare your images\r\n\r\nDecide on the image you want to process. You can also process several images at once, in which case specify the path to the directory with your images.\r\n\r\nIn the command line parameter \u0022-i\u0022 use the path to the image, for \u0022-o\u0022 use the path where you want to save the image.\r\n\u003Cdiv class=\u0022alert alert-primary\u0022 role=\u0022alert\u0022\u003E\r\n \u003Cp\u003E\r\n NOTE: Do not use the same directory as your images for saving, if you do, you will lose the original images!\r\n \u003C/p\u003E\r\n\u003C/div\u003E\r\n\r\n### Choose the desired modifications\r\n\r\nDecide on the modifications you want to apply to the image. Here is a complete list of available modifications:\r\n\r\n- Gauss5x5 \r\n- Gauss7x7\r\n- Edges\r\n- Sharpen\r\n- Emboss\r\n- ClockwiseRotation\r\n- CounterClockwiseRotation\r\n- MirrorVertical\r\n- MirrorHorizontal\r\n- FishEye\r\n\r\nUse the selected modification or modification list for the \u0022-mod\u0022 parameter.\r\n\r\n### CPU or GPU processing?\r\n\r\nBy default, all processing will be done at the expense of the CPU. If you want to process images using GPGPU, use the \u0022-gpu\u0022 parameter (if the device has a video card):\r\n\r\n- AnyGpu\r\n- Nvidia\r\n- Amd\r\n- Intel\r\n\r\n### How many logical cores does your system have?\r\n\r\nIn the case of processing a large number of images, it would be logical to utilize the parallel processing power of your device. To do this, use the \u0022-ag\u0022 or \u0022-sag\u0022 parameter. The \u0022-ag\u0022 parameter will split image processing and saving tasks into two separate computational threads. The \u0022-sag\u0022 parameter will allocate the number of threads you need to process and save images independently. For this parameter you should specify the number of threads you need.\r\n\r\n### Let\u0027s start processing!\r\n\r\nThe end result may look like the following:\r\n\u0060\u0060\u0060sh\r\n\u003E dotnet run -i *input path* -o *output path* -mod FishEye -gpu AnyGpu\r\n\u0060\u0060\u0060"}] \ No newline at end of file diff --git a/docs/reference/imageprocessing-agents.html b/docs/reference/imageprocessing-agents.html new file mode 100644 index 00000000..b83611f0 --- /dev/null +++ b/docs/reference/imageprocessing-agents.html @@ -0,0 +1,1021 @@ + + + + + + Agents (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Agents Module +

    + +
    +
    +

    + + Module with implementation of agents for image processing + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + imgProcessor filter imgSaver logger + + +

    +
    +
    +
    + Full Usage: + imgProcessor filter imgSaver logger +
    +
    + Parameters: + +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent for image processing + +

    +
    +
    +
    +
    + + filter + + : + MyImage -> MyImage +
    +
    +

    + Filter for application +

    +
    +
    + + imgSaver + + : + MailboxProcessor<Msg> +
    +
    +

    + Saving Agent +

    +
    +
    + + logger + + : + MailboxProcessor<Msg> +
    +
    +

    + Logging Agent +

    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + imgSaver outDir logger + + +

    +
    +
    +
    + Full Usage: + imgSaver outDir logger +
    +
    + Parameters: +
      + + + outDir + + : + string + - + Path to save + +
      + + + logger + + : + MailboxProcessor<Msg> + - + Logging Agent + +
      +
    +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent for saving images + +

    +
    +
    +
    +
    + + outDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + logger + + : + MailboxProcessor<Msg> +
    +
    +

    + Logging Agent +

    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + listAllFiles dir + + +

    +
    +
    +
    + Full Usage: + listAllFiles dir +
    +
    + Parameters: +
      + + + dir + + : + string + +
      +
    +
    + + Returns: + string list + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + List of all files in directory + +

    +
    +
    +
    +
    + + dir + + : + string +
    +
    +
    +
    +
    + + Returns: + + string list +
    +
    +
    +
    +
    +
    + +

    + + + msgLogger () + + +

    +
    +
    +
    + Full Usage: + msgLogger () +
    +
    + Parameters: +
      + + + () + + : + unit + +
      +
    +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent for logging + +

    +
    +
    +
    +
    + + () + + : + unit +
    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + outFile imgName outDir + + +

    +
    +
    +
    + Full Usage: + outFile imgName outDir +
    +
    + Parameters: +
      + + + imgName + + : + string + +
      + + + outDir + + : + string + +
      +
    +
    + + Returns: + string + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Creation of path to save the image + +

    +
    +
    +
    +
    + + imgName + + : + string +
    +
    +
    + + outDir + + : + string +
    +
    +
    +
    +
    + + Returns: + + string +
    +
    +
    +
    +
    +
    + +

    + + + superAgent outputDir conversion logger + + +

    +
    +
    +
    + Full Usage: + superAgent outputDir conversion logger +
    +
    + Parameters: +
      + + + outputDir + + : + string + - + Path to save + +
      + + + conversion + + : + MyImage -> MyImage + - + Image transformation + +
      + + + logger + + : + MailboxProcessor<Msg> + - + Logging Agent + +
      +
    +
    + + Returns: + MailboxProcessor<Msg> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Agent with the ability to process and save the image + +

    +
    +
    +
    +
    + + outputDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + conversion + + : + MyImage -> MyImage +
    +
    +

    + Image transformation +

    +
    +
    + + logger + + : + MailboxProcessor<Msg> +
    +
    +

    + Logging Agent +

    +
    +
    +
    +
    + + Returns: + + MailboxProcessor<Msg> +
    +
    +
    +
    +
    +
    + +

    + + + superImageProcessing inputDir outputDir conversion countOfAgents + + +

    +
    +
    +
    + Full Usage: + superImageProcessing inputDir outputDir conversion countOfAgents +
    +
    + Parameters: +
      + + + inputDir + + : + string + - + Path to image or images + +
      + + + outputDir + + : + string + - + Path to save + +
      + + + conversion + + : + MyImage -> MyImage + - + Image transformation + +
      + + + countOfAgents + + : + int + - + Count of superAgents to processing + +
      +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Image processing using superAgents + +

    +
    +
    +
    +
    + + inputDir + + : + string +
    +
    +

    + Path to image or images +

    +
    +
    + + outputDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + conversion + + : + MyImage -> MyImage +
    +
    +

    + Image transformation +

    +
    +
    + + countOfAgents + + : + int +
    +
    +

    + Count of superAgents to processing +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-arguments-cliarguments.html b/docs/reference/imageprocessing-arguments-cliarguments.html new file mode 100644 index 00000000..ef5995df --- /dev/null +++ b/docs/reference/imageprocessing-arguments-cliarguments.html @@ -0,0 +1,522 @@ + + + + + + CliArguments (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + CliArguments Type +

    + +
    +
    +

    + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Agents + + +

    +
    +
    +
    + Full Usage: + Agents +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + GpGpu device + + +

    +
    +
    +
    + Full Usage: + GpGpu device +
    +
    + Parameters: +
      + + + device + + : + Devices + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + device + + : + Devices +
    +
    +
    +
    +
    + +

    + + + InputPath inputPath + + +

    +
    +
    +
    + Full Usage: + InputPath inputPath +
    +
    + Parameters: +
      + + + inputPath + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + inputPath + + : + string +
    +
    +
    +
    +
    + +

    + + + Modifications modifications + + +

    +
    +
    +
    + Full Usage: + Modifications modifications +
    +
    + Parameters: + +
    +
    +
    +
    +
    +
    +
    + + modifications + + : + List<Modifications> +
    +
    +
    +
    +
    + +

    + + + OutputPath outputPath + + +

    +
    +
    +
    + Full Usage: + OutputPath outputPath +
    +
    + Parameters: +
      + + + outputPath + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + outputPath + + : + string +
    +
    +
    +
    +
    + +

    + + + SuperAgents count + + +

    +
    +
    +
    + Full Usage: + SuperAgents count +
    +
    + Parameters: +
      + + + count + + : + int + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + count + + : + int +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-arguments.html b/docs/reference/imageprocessing-arguments.html new file mode 100644 index 00000000..6ba1035d --- /dev/null +++ b/docs/reference/imageprocessing-arguments.html @@ -0,0 +1,1032 @@ + + + + + + Arguments (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Arguments Module +

    + +
    +
    +

    + + Module with implementation of work via console commands + +

    +
    +
    +
    +

    + Types +

    + + + + + + + + + + + + + +
    + Type + + Description +
    +

    + + + CliArguments + + +

    +
    +
    + + + + + + +

    + +

    +
    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + deviceParser device + + +

    +
    +
    +
    + Full Usage: + deviceParser device +
    +
    + Parameters: +
      + + + device + + : + Devices + +
      +
    +
    + + Returns: + Platform + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Parsing of device + +

    +
    +
    +
    +
    + + device + + : + Devices +
    +
    +
    +
    +
    + + Returns: + + Platform +
    +
    +
    +
    +
    +
    + +

    + + + first (x, arg2, arg3, arg4) + + +

    +
    +
    +
    + Full Usage: + first (x, arg2, arg3, arg4) +
    +
    + Parameters: +
      + + + x + + : + 'a + +
      + + + arg1 + + : + 'b + +
      + + + arg2 + + : + 'c + +
      + + + arg3 + + : + 'd + +
      +
    +
    + + Returns: + 'a + +
    +
    +
    +
    +
    +
    +
    + + x + + : + 'a +
    +
    +
    + + arg1 + + : + 'b +
    +
    +
    + + arg2 + + : + 'c +
    +
    +
    + + arg3 + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'a +
    +
    +
    +
    +
    + +

    + + + fourth (arg1, arg2, arg3, x) + + +

    +
    +
    +
    + Full Usage: + fourth (arg1, arg2, arg3, x) +
    +
    + Parameters: +
      + + + arg0 + + : + 'a + +
      + + + arg1 + + : + 'b + +
      + + + arg2 + + : + 'c + +
      + + + x + + : + 'd + +
      +
    +
    + + Returns: + 'd + +
    +
    +
    +
    +
    +
    +
    + + arg0 + + : + 'a +
    +
    +
    + + arg1 + + : + 'b +
    +
    +
    + + arg2 + + : + 'c +
    +
    +
    + + x + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'd +
    +
    +
    +
    +
    + +

    + + + modificationGpuParser modification (arg2, arg3, arg4, arg5) + + +

    +
    +
    +
    + Full Usage: + modificationGpuParser modification (arg2, arg3, arg4, arg5) +
    +
    + Parameters: + +
    + + Returns: + ClContext -> int -> MailboxProcessor<Msg> -> MyImage -> MyImage + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Parsing of GPU modification + +

    +
    +
    +
    +
    + + modification + + : + Modifications +
    +
    +
    + + arg1 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + arg2 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + arg3 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + arg4 + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    +
    +
    + + Returns: + + ClContext -> int -> MailboxProcessor<Msg> -> MyImage -> MyImage +
    +
    +
    +
    +
    +
    + +

    + + + modificationParser modification + + +

    +
    +
    +
    + Full Usage: + modificationParser modification +
    +
    + Parameters: + +
    + + Returns: + MyImage -> MyImage + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Parsing of CPU modification + +

    +
    +
    +
    +
    + + modification + + : + Modifications +
    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +
    +
    +
    +
    + +

    + + + second (arg1, x, arg3, arg4) + + +

    +
    +
    +
    + Full Usage: + second (arg1, x, arg3, arg4) +
    +
    + Parameters: +
      + + + arg0 + + : + 'a + +
      + + + x + + : + 'b + +
      + + + arg2 + + : + 'c + +
      + + + arg3 + + : + 'd + +
      +
    +
    + + Returns: + 'b + +
    +
    +
    +
    +
    +
    +
    + + arg0 + + : + 'a +
    +
    +
    + + x + + : + 'b +
    +
    +
    + + arg2 + + : + 'c +
    +
    +
    + + arg3 + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'b +
    +
    +
    +
    +
    + +

    + + + third (arg1, arg2, x, arg4) + + +

    +
    +
    +
    + Full Usage: + third (arg1, arg2, x, arg4) +
    +
    + Parameters: +
      + + + arg0 + + : + 'a + +
      + + + arg1 + + : + 'b + +
      + + + x + + : + 'c + +
      + + + arg3 + + : + 'd + +
      +
    +
    + + Returns: + 'c + +
    +
    +
    +
    +
    +
    +
    + + arg0 + + : + 'a +
    +
    +
    + + arg1 + + : + 'b +
    +
    +
    + + x + + : + 'c +
    +
    +
    + + arg3 + + : + 'd +
    +
    +
    +
    +
    + + Returns: + + 'c +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-cpuprocessing.html b/docs/reference/imageprocessing-cpuprocessing.html new file mode 100644 index 00000000..6e4d0395 --- /dev/null +++ b/docs/reference/imageprocessing-cpuprocessing.html @@ -0,0 +1,671 @@ + + + + + + CpuProcessing (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + CpuProcessing Module +

    + +
    +
    +

    + + Module with functions for image processing on the CPU + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + applyFilter filter img + + +

    +
    +
    +
    + Full Usage: + applyFilter filter img +
    +
    + Parameters: +
      + + + filter + + : + float32[][] + - + A two-dimensional array applied to an image as a filter + +
      + + + img + + : + MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Filter application + +

    +
    +
    +
    +
    + + filter + + : + float32[][] +
    +
    +

    + A two-dimensional array applied to an image as a filter +

    +
    +
    + + img + + : + MyImage +
    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + fishEye image + + +

    +
    +
    +
    + Full Usage: + fishEye image +
    +
    + Parameters: +
      + + + image + + : + MyImage + - + Image with type MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Applying "FishEye" to an image + +

    +
    +
    +
    +
    + + image + + : + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + mirror side image + + +

    +
    +
    +
    + Full Usage: + mirror side image +
    +
    + Parameters: +
      + + + side + + : + MirrorDirection + - + The side to which the image will be reflected + +
      + + + image + + : + MyImage + - + Image with type MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Image Reflection + +

    +
    +
    +
    +
    + + side + + : + MirrorDirection +
    +
    +

    + The side to which the image will be reflected +

    +
    +
    + + image + + : + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + rotate side image + + +

    +
    +
    +
    + Full Usage: + rotate side image +
    +
    + Parameters: +
      + + + side + + : + Side + - + The side to which the image will be rotated + +
      + + + image + + : + MyImage + - + Image with type MyImage + +
      +
    +
    + + Returns: + MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Rotate of image + +

    +
    +
    +
    +
    + + side + + : + Side +
    +
    +

    + The side to which the image will be rotated +

    +
    +
    + + image + + : + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-gpukernels.html b/docs/reference/imageprocessing-gpukernels.html new file mode 100644 index 00000000..a462d458 --- /dev/null +++ b/docs/reference/imageprocessing-gpukernels.html @@ -0,0 +1,1351 @@ + + + + + + GpuKernels (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + GpuKernels Module +

    + +
    +
    +

    + + Module with kernels for image processing on the GPU + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + applyFilterKernel clContext + + +

    +
    +
    +
    + Full Usage: + applyFilterKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to apply filter to the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + applyFilterProcessor kernel localWorkSize commandQueue filter filterD img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + applyFilterProcessor kernel localWorkSize commandQueue filter filterD img imgH imgW result +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> + +
      + + + localWorkSize + + : + int + +
      + + + commandQueue + + : + MailboxProcessor<Msg> + +
      + + + filter + + : + ClArray<float32> + +
      + + + filterD + + : + int + +
      + + + img + + : + ClArray<byte> + +
      + + + imgH + + : + int + +
      + + + imgW + + : + int + +
      + + + result + + : + ClArray<byte> + +
      +
    +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the filter kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + filter + + : + ClArray<float32> +
    +
    +
    + + filterD + + : + int +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    + +

    + + + fishEyeKernel clContext + + +

    +
    +
    +
    + Full Usage: + fishEyeKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<'a> -> int -> int -> ClArray<'a> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to apply FishEye to the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<'a> -> int -> int -> ClArray<'a> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + fishEyeKernelProcessor kernel localWorkSize commandQueue img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + fishEyeKernelProcessor kernel localWorkSize commandQueue img imgH imgW result +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> + +
      + + + localWorkSize + + : + int + +
      + + + commandQueue + + : + MailboxProcessor<Msg> + +
      + + + img + + : + ClArray<byte> + +
      + + + imgH + + : + int + +
      + + + imgW + + : + int + +
      + + + result + + : + ClArray<byte> + +
      +
    +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the fisheye kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    + +

    + + + mirrorKernel clContext + + +

    +
    +
    +
    + Full Usage: + mirrorKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to reflect the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + mirrorKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + mirrorKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result +
    +
    + Parameters: + +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the reflection kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + side + + : + MirrorDirection +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    + +

    + + + rotateKernel clContext + + +

    +
    +
    +
    + Full Usage: + rotateKernel clContext +
    +
    + Parameters: + +
    + + Returns: + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Compilation of kernel to rotate the image + +

    +
    +
    +
    +
    + + clContext + + : + ClContext +
    +
    +
    +
    +
    + + Returns: + + ClProgram<Range1D, (ClArray<'a> -> int -> int -> int -> ClArray<'a> -> unit)> +
    +
    +
    +
    +
    +
    + +

    + + + rotateKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result + + +

    +
    +
    +
    + Full Usage: + rotateKernelProcessor kernel localWorkSize side commandQueue img imgH imgW result +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> + +
      + + + localWorkSize + + : + int + +
      + + + side + + : + Side + +
      + + + commandQueue + + : + MailboxProcessor<Msg> + +
      + + + img + + : + ClArray<byte> + +
      + + + imgH + + : + int + +
      + + + imgW + + : + int + +
      + + + result + + : + ClArray<byte> + +
      +
    +
    + + Returns: + ClArray<byte> + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Asynchronous application of the rotation kernel to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +
    + + localWorkSize + + : + int +
    +
    +
    + + side + + : + Side +
    +
    +
    + + commandQueue + + : + MailboxProcessor<Msg> +
    +
    +
    + + img + + : + ClArray<byte> +
    +
    +
    + + imgH + + : + int +
    +
    +
    + + imgW + + : + int +
    +
    +
    + + result + + : + ClArray<byte> +
    +
    +
    +
    +
    + + Returns: + + ClArray<byte> +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-gpuprocessing.html b/docs/reference/imageprocessing-gpuprocessing.html new file mode 100644 index 00000000..4113d59a --- /dev/null +++ b/docs/reference/imageprocessing-gpuprocessing.html @@ -0,0 +1,941 @@ + + + + + + GpuProcessing (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + GpuProcessing Module +

    + +
    +
    +

    + + Module with functions for image processing on the GPU + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + applyFilter filter kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + applyFilter filter kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + filter + + : + float32[][] + - + A two-dimensional array applied to an image as a filter + +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for filter application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Filter application + +

    +
    +
    +
    +
    + + filter + + : + float32[][] +
    +
    +

    + A two-dimensional array applied to an image as a filter +

    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<float32> -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for filter application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + fishEye kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + fishEye kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for fisheye filter application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Applying fisheye filter to the image + +

    +
    +
    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for fisheye filter application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + mirror side kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + mirror side kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + side + + : + MirrorDirection + - + The side to which the image will be reflected + +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for reflection application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Reflection of image + +

    +
    +
    +
    +
    + + side + + : + MirrorDirection +
    +
    +

    + The side to which the image will be reflected +

    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for reflection application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    + +

    + + + rotate side kernel clContext localWorkSize queue + + +

    +
    +
    +
    + Full Usage: + rotate side kernel clContext localWorkSize queue +
    +
    + Parameters: +
      + + + side + + : + Side + - + The side to which the image will be rotated + +
      + + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> + - + Compiled kernel for rotation application + +
      + + + clContext + + : + ClContext + - + Abstraction over OpenCL context + +
      + + + localWorkSize + + : + int + - + Local workgroup size + +
      + + + queue + + : + MailboxProcessor<Msg> + - + Command queue capable of handling messages of type Msg + +
      +
    +
    + + Returns: + MyImage -> MyImage + + Image with type MyImage +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Rotate of image + +

    +
    +
    +
    +
    + + side + + : + Side +
    +
    +

    + The side to which the image will be rotated +

    +
    +
    + + kernel + + : + ClProgram<Range1D, (ClArray<byte> -> int -> int -> int -> ClArray<byte> -> unit)> +
    +
    +

    + Compiled kernel for rotation application +

    +
    +
    + + clContext + + : + ClContext +
    +
    +

    + Abstraction over OpenCL context +

    +
    +
    + + localWorkSize + + : + int +
    +
    +

    + Local workgroup size +

    +
    +
    + + queue + + : + MailboxProcessor<Msg> +
    +
    +

    + Command queue capable of handling messages of type Msg +

    +
    +
    +
    +
    + + Returns: + + MyImage -> MyImage +
    +
    +

    + Image with type MyImage +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-imagearrayprocessing.html b/docs/reference/imageprocessing-imagearrayprocessing.html new file mode 100644 index 00000000..b72b24f2 --- /dev/null +++ b/docs/reference/imageprocessing-imagearrayprocessing.html @@ -0,0 +1,496 @@ + + + + + + ImageArrayProcessing (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + ImageArrayProcessing Module +

    + +
    +
    +

    + + Module with implementation of processing array of images + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + arrayOfImagesProcessing inputDir outputDir conversion agentMod + + +

    +
    +
    +
    + Full Usage: + arrayOfImagesProcessing inputDir outputDir conversion agentMod +
    +
    + Parameters: +
      + + + inputDir + + : + string + - + Path to the folder with images + +
      + + + outputDir + + : + string + - + Path to save + +
      + + + conversion + + : + MyImage -> MyImage + - + Image transformation + +
      + + + agentMod + + : + AgentStatus + - + Processing with or without agent assistance + +
      +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Processing array of images + +

    +
    +
    +
    +
    + + inputDir + + : + string +
    +
    +

    + Path to the folder with images +

    +
    +
    + + outputDir + + : + string +
    +
    +

    + Path to save +

    +
    +
    + + conversion + + : + MyImage -> MyImage +
    +
    +

    + Image transformation +

    +
    +
    + + agentMod + + : + AgentStatus +
    +
    +

    + Processing with or without agent assistance +

    +
    +
    +
    +
    +
    + +

    + + + extensions + + +

    +
    +
    +
    + Full Usage: + extensions +
    +
    + + Returns: + string[] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + string[] +
    +
    +
    +
    +
    + +

    + + + listAllFiles dir + + +

    +
    +
    +
    + Full Usage: + listAllFiles dir +
    +
    + Parameters: +
      + + + dir + + : + string + +
      +
    +
    + + Returns: + string list + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + List of all files in directory with correct extensions + +

    +
    +
    +
    +
    + + dir + + : + string +
    +
    +
    +
    +
    + + Returns: + + string list +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-kernels.html b/docs/reference/imageprocessing-kernels.html new file mode 100644 index 00000000..eb2b4ae2 --- /dev/null +++ b/docs/reference/imageprocessing-kernels.html @@ -0,0 +1,426 @@ + + + + + + Kernels (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Kernels Module +

    + +
    +
    +

    + + Module with kernels for image processing + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + edgesKernel + + +

    +
    +
    +
    + Full Usage: + edgesKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + embossKernel + + +

    +
    +
    +
    + Full Usage: + embossKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + gaussianBlur7x7Kernel + + +

    +
    +
    +
    + Full Usage: + gaussianBlur7x7Kernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + gaussianBlurKernel + + +

    +
    +
    +
    + Full Usage: + gaussianBlurKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    + +

    + + + sharpenKernel + + +

    +
    +
    +
    + Full Usage: + sharpenKernel +
    +
    + + Returns: + float32[][] + +
    +
    +
    +
    +
    +
    +
    + + Returns: + + float32[][] +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-main.html b/docs/reference/imageprocessing-main.html new file mode 100644 index 00000000..f8dcd9b0 --- /dev/null +++ b/docs/reference/imageprocessing-main.html @@ -0,0 +1,292 @@ + + + + + + Main (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Main Module +

    + +
    +
    +

    + + Module for processing console commands + +

    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + main argv + + +

    +
    +
    +
    + Full Usage: + main argv +
    +
    + Parameters: +
      + + + argv + + : + string[] + +
      +
    +
    + + Returns: + int + +
    +
    +
    +
    +
    +
    +
    + + argv + + : + string[] +
    +
    +
    +
    +
    + + Returns: + + int +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-myimage-myimage.html b/docs/reference/imageprocessing-myimage-myimage.html new file mode 100644 index 00000000..2578913f --- /dev/null +++ b/docs/reference/imageprocessing-myimage-myimage.html @@ -0,0 +1,539 @@ + + + + + + MyImage (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + MyImage Type +

    + +
    +
    +

    + + Type to represent images + +

    +
    +
    +
    +
    +
    +
    +
    +

    + Record fields +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Record Field + + Description +
    +
    + +

    + + + Data + + +

    +
    +
    +
    + Full Usage: + Data +
    +
    + + Field type: + byte array + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + byte array +
    +
    +
    +
    +
    + +

    + + + Height + + +

    +
    +
    +
    + Full Usage: + Height +
    +
    + + Field type: + int + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + int +
    +
    +
    +
    +
    + +

    + + + Name + + +

    +
    +
    +
    + Full Usage: + Name +
    +
    + + Field type: + string + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + string +
    +
    +
    +
    +
    + +

    + + + Width + + +

    +
    +
    +
    + Full Usage: + Width +
    +
    + + Field type: + int + +
    +
    +
    +
    +
    +
    +
    + + Field type: + + int +
    +
    +
    +
    +
    +
    +
    +

    + Constructors +

    + + + + + + + + + + + + + +
    + Constructor + + Description +
    +
    + +

    + + + MyImage(data, width, height, name) + + +

    +
    +
    +
    + Full Usage: + MyImage(data, width, height, name) +
    +
    + Parameters: +
      + + + data + + : + byte array + +
      + + + width + + : + int + +
      + + + height + + : + int + +
      + + + name + + : + string + +
      +
    +
    + + Returns: + MyImage + +
    +
    +
    +
    +
    +
    +
    + + data + + : + byte array +
    +
    +
    + + width + + : + int +
    +
    +
    + + height + + : + int +
    +
    +
    + + name + + : + string +
    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-myimage.html b/docs/reference/imageprocessing-myimage.html new file mode 100644 index 00000000..50aec451 --- /dev/null +++ b/docs/reference/imageprocessing-myimage.html @@ -0,0 +1,452 @@ + + + + + + MyImage (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + MyImage Module +

    + +
    +
    +

    + + Module for working with images + +

    +
    +
    +
    +

    + Types +

    + + + + + + + + + + + + + +
    + Type + + Description +
    +

    + + + MyImage + + +

    +
    +
    + + + + + + +

    + + Type to represent images + +

    +
    +
    +
    +
    +

    + Functions and values +

    + + + + + + + + + + + + + + + + + +
    + Function or value + + Description +
    +
    + +

    + + + loadAsImage file + + +

    +
    +
    +
    + Full Usage: + loadAsImage file +
    +
    + Parameters: +
      + + + file + + : + string + +
      +
    +
    + + Returns: + MyImage + +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Load image as MyImage type + +

    +
    +
    +
    +
    + + file + + : + string +
    +
    +
    +
    +
    + + Returns: + + MyImage +
    +
    +
    +
    +
    +
    + +

    + + + saveImage image file + + +

    +
    +
    +
    + Full Usage: + saveImage image file +
    +
    + Parameters: +
      + + + image + + : + MyImage + +
      + + + file + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + +

    + + Save MyImage in a specific directory + +

    +
    +
    +
    +
    + + image + + : + MyImage +
    +
    +
    + + file + + : + string +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types-agentstatus.html b/docs/reference/imageprocessing-types-agentstatus.html new file mode 100644 index 00000000..11c54007 --- /dev/null +++ b/docs/reference/imageprocessing-types-agentstatus.html @@ -0,0 +1,321 @@ + + + + + + AgentStatus (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + AgentStatus Type +

    + +
    +
    +

    + + Type for determining the status of an agent + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Off + + +

    +
    +
    +
    + Full Usage: + Off +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + On + + +

    +
    +
    +
    + Full Usage: + On +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types-devices.html b/docs/reference/imageprocessing-types-devices.html new file mode 100644 index 00000000..b5f61300 --- /dev/null +++ b/docs/reference/imageprocessing-types-devices.html @@ -0,0 +1,389 @@ + + + + + + Devices (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Devices Type +

    + +
    +
    +

    + + Type for defining the executor of transformations + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Amd + + +

    +
    +
    +
    + Full Usage: + Amd +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + AnyGpu + + +

    +
    +
    +
    + Full Usage: + AnyGpu +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Intel + + +

    +
    +
    +
    + Full Usage: + Intel +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Nvidia + + +

    +
    +
    +
    + Full Usage: + Nvidia +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types-mirrordirection.html b/docs/reference/imageprocessing-types-mirrordirection.html new file mode 100644 index 00000000..0af32ca2 --- /dev/null +++ b/docs/reference/imageprocessing-types-mirrordirection.html @@ -0,0 +1,321 @@ + + + + + + MirrorDirection (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + MirrorDirection Type +

    + +
    +
    +

    + + Type for determining the direction of image reflection + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Horizontal + + +

    +
    +
    +
    + Full Usage: + Horizontal +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Vertical + + +

    +
    +
    +
    + Full Usage: + Vertical +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types-modifications.html b/docs/reference/imageprocessing-types-modifications.html new file mode 100644 index 00000000..c0bc9cfb --- /dev/null +++ b/docs/reference/imageprocessing-types-modifications.html @@ -0,0 +1,593 @@ + + + + + + Modifications (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Modifications Type +

    + +
    +
    +

    + + Type for determining the applied image transformation + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + ClockwiseRotation + + +

    +
    +
    +
    + Full Usage: + ClockwiseRotation +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + CounterClockwiseRotation + + +

    +
    +
    +
    + Full Usage: + CounterClockwiseRotation +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Edges + + +

    +
    +
    +
    + Full Usage: + Edges +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Emboss + + +

    +
    +
    +
    + Full Usage: + Emboss +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + FishEye + + +

    +
    +
    +
    + Full Usage: + FishEye +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Gauss5x5 + + +

    +
    +
    +
    + Full Usage: + Gauss5x5 +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Gauss7x7 + + +

    +
    +
    +
    + Full Usage: + Gauss7x7 +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + MirrorHorizontal + + +

    +
    +
    +
    + Full Usage: + MirrorHorizontal +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + MirrorVertical + + +

    +
    +
    +
    + Full Usage: + MirrorVertical +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Sharpen + + +

    +
    +
    +
    + Full Usage: + Sharpen +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types-msg.html b/docs/reference/imageprocessing-types-msg.html new file mode 100644 index 00000000..b1a9c6a1 --- /dev/null +++ b/docs/reference/imageprocessing-types-msg.html @@ -0,0 +1,435 @@ + + + + + + Msg (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Msg Type +

    + +
    +
    +

    + + Type to define a message to be forwarded between agents + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + EOS AsyncReplyChannel<unit> + + +

    +
    +
    +
    + Full Usage: + EOS AsyncReplyChannel<unit> +
    +
    + Parameters: + +
    +
    +
    +
    +
    +
    +
    + + Item + + : + AsyncReplyChannel<unit> +
    +
    +
    +
    +
    + +

    + + + Img MyImage + + +

    +
    +
    +
    + Full Usage: + Img MyImage +
    +
    + Parameters: + +
    +
    +
    +
    +
    +
    +
    + + Item + + : + MyImage +
    +
    +
    +
    +
    + +

    + + + Message string + + +

    +
    +
    +
    + Full Usage: + Message string +
    +
    + Parameters: +
      + + + Item + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + Item + + : + string +
    +
    +
    +
    +
    + +

    + + + Path string + + +

    +
    +
    +
    + Full Usage: + Path string +
    +
    + Parameters: +
      + + + Item + + : + string + +
      +
    +
    +
    +
    +
    +
    +
    +
    + + Item + + : + string +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types-side.html b/docs/reference/imageprocessing-types-side.html new file mode 100644 index 00000000..c9ee6f3d --- /dev/null +++ b/docs/reference/imageprocessing-types-side.html @@ -0,0 +1,321 @@ + + + + + + Side (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Side Type +

    + +
    +
    +

    + + Type for determining the rotation side of the image + +

    +
    +
    +
    +
    +
    +
    +

    + Union cases +

    + + + + + + + + + + + + + + + + + +
    + Union case + + Description +
    +
    + +

    + + + Left + + +

    +
    +
    +
    + Full Usage: + Left +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    + +

    + + + Right + + +

    +
    +
    +
    + Full Usage: + Right +
    +
    +
    +
    +
    +
    +
    + + + + +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing-types.html b/docs/reference/imageprocessing-types.html new file mode 100644 index 00000000..744c7cd8 --- /dev/null +++ b/docs/reference/imageprocessing-types.html @@ -0,0 +1,415 @@ + + + + + + Types (ImageProcessing) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + Types Module +

    + +
    +
    +

    + + Module with necessary algebraic types + +

    +
    +
    +
    +

    + Types +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Type + + Description +
    +

    + + + AgentStatus + + +

    +
    +
    + + + + + + +

    + + Type for determining the status of an agent + +

    +
    +
    +

    + + + Devices + + +

    +
    +
    + + + + + + +

    + + Type for defining the executor of transformations + +

    +
    +
    +

    + + + MirrorDirection + + +

    +
    +
    + + + + + + +

    + + Type for determining the direction of image reflection + +

    +
    +
    +

    + + + Modifications + + +

    +
    +
    + + + + + + +

    + + Type for determining the applied image transformation + +

    +
    +
    +

    + + + Msg + + +

    +
    +
    + + + + + + +

    + + Type to define a message to be forwarded between agents + +

    +
    +
    +

    + + + Side + + +

    +
    +
    + + + + + + +

    + + Type for determining the rotation side of the image + +

    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/imageprocessing.html b/docs/reference/imageprocessing.html new file mode 100644 index 00000000..7c9930d4 --- /dev/null +++ b/docs/reference/imageprocessing.html @@ -0,0 +1,519 @@ + + + + + + ImageProcessing + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + ImageProcessing Namespace +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Modules + + Description +
    +

    + + + Agents + + +

    +
    +
    + + + + + + +

    + + Module with implementation of agents for image processing + +

    +
    +
    +

    + + + Arguments + + +

    +
    +
    + + + + + + +

    + + Module with implementation of work via console commands + +

    +
    +
    +

    + + + CpuProcessing + + +

    +
    +
    + + + + + + +

    + + Module with functions for image processing on the CPU + +

    +
    +
    +

    + + + GpuKernels + + +

    +
    +
    + + + + + + +

    + + Module with kernels for image processing on the GPU + +

    +
    +
    +

    + + + GpuProcessing + + +

    +
    +
    + + + + + + +

    + + Module with functions for image processing on the GPU + +

    +
    +
    +

    + + + ImageArrayProcessing + + +

    +
    +
    + + + + + + +

    + + Module with implementation of processing array of images + +

    +
    +
    +

    + + + Kernels + + +

    +
    +
    + + + + + + +

    + + Module with kernels for image processing + +

    +
    +
    +

    + + + Main + + +

    +
    +
    + + + + + + +

    + + Module for processing console commands + +

    +
    +
    +

    + + + MyImage + + +

    +
    +
    + + + + + + +

    + + Module for working with images + +

    +
    +
    +

    + + + Types + + +

    +
    +
    + + + + + + +

    + + Module with necessary algebraic types + +

    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 00000000..00f79e9a --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,209 @@ + + + + + + ImageProcessing (API Reference) + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    + API Reference +

    +

    + Available Namespaces: +

    + + + + + + + + + + + + + +
    + Namespace + + Description +
    + + ImageProcessing + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docsSrc/Explanations/Structure.md b/docsSrc/Explanations/Structure.md new file mode 100644 index 00000000..f427bc88 --- /dev/null +++ b/docsSrc/Explanations/Structure.md @@ -0,0 +1,10 @@ +--- +title: Structure +category: Explanations +categoryindex: 3 +index: 1 +--- + +# Structure of ImageProcessing library + +![image](https://raw.githubusercontent.com/LeonidLodygin/ImageProcessing/gh-pages/images/Structure.png) \ No newline at end of file diff --git a/docsSrc/How_Tos/Code.md b/docsSrc/How_Tos/Code.md new file mode 100644 index 00000000..871ac0f1 --- /dev/null +++ b/docsSrc/How_Tos/Code.md @@ -0,0 +1,78 @@ +--- +title: How to code +category: Guides +categoryindex: 1 +index: 100 +--- + +# How to code + +In this tutorial, we will look at how to work with the ImageProcessing library using code rather than console commands. + +## Installing ImageProcessing + +```sh +> dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0 +``` + + +Load your image using the `loadAsImage` function from the `MyImage` module. + +```sh +> let image = loadAsImage "path to the image" +``` + +For CPU and GPU the list of transforms is identical, decide what you want to process your image on and select the appropriate function to process from the `CpuProcessing` module or the `GpuProcessing` module respectively. + +### In the case of CPU processing: + +Apply the fisheye filter to the uploaded image. + +```sh +> let newImage = fishEye image +``` + +Don't forget to save the processed image using the saveImage function from the `MyImage` module! + +```sh +> let newImage = saveImage "path" +``` + +### In the case of GPU processing: + +In the case of GPU processing, you have to go through a few extra steps to achieve your goal: + +Prepare OpenCl context and queue(from `Brahma.FSharp` module): + +```sh +> let clContext = ClContext(ClDevice.GetFirstAppropriateDevice(device)) +> let queue = clContext.QueueProvider.CreateQueue() +``` + +Compile the kernel to apply the filter using the `fishEyeKernel` function from the `GpuKernels` module: + +```sh +> let fishKernel = fishEyeKernel clContext +``` + +Process the image using the `fishEye` function from the `GpuProcessing` module: + +```sh +let newImage = fishEye fishKernel clContext 64 queue image +``` + +Don't forget to save the new image: + +```sh +> let newImage = saveImage "path" +``` + + diff --git a/docsSrc/Tutorials/Tutorial.md b/docsSrc/Tutorials/Tutorial.md new file mode 100644 index 00000000..ec210940 --- /dev/null +++ b/docsSrc/Tutorials/Tutorial.md @@ -0,0 +1,66 @@ +--- +title: Get Started +category: Tutorials +categoryindex: 0 +index: 100 +--- + +# Get Started + +In this tutorial we will look at how to get started with the ImageProcessing library and process your first images. + +## Installing ImageProcessing + +```sh +> dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0 +``` + +## Processing of images + +### Prepare your images + +Decide on the image you want to process. You can also process several images at once, in which case specify the path to the directory with your images. + +In the command line parameter "-i" use the path to the image, for "-o" use the path where you want to save the image. + + +### Choose the desired modifications + +Decide on the modifications you want to apply to the image. Here is a complete list of available modifications: + +- Gauss5x5 +- Gauss7x7 +- Edges +- Sharpen +- Emboss +- ClockwiseRotation +- CounterClockwiseRotation +- MirrorVertical +- MirrorHorizontal +- FishEye + +Use the selected modification or modification list for the "-mod" parameter. + +### CPU or GPU processing? + +By default, all processing will be done at the expense of the CPU. If you want to process images using GPGPU, use the "-gpu" parameter (if the device has a video card): + +- AnyGpu +- Nvidia +- Amd +- Intel + +### How many logical cores does your system have? + +In the case of processing a large number of images, it would be logical to utilize the parallel processing power of your device. To do this, use the "-ag" or "-sag" parameter. The "-ag" parameter will split image processing and saving tasks into two separate computational threads. The "-sag" parameter will allocate the number of threads you need to process and save images independently. For this parameter you should specify the number of threads you need. + +### Let's start processing! + +The end result may look like the following: +```sh +> dotnet run -i *input path* -o *output path* -mod FishEye -gpu AnyGpu +``` \ No newline at end of file diff --git a/docsSrc/index.md b/docsSrc/index.md index f6ffdcd6..3e2b7291 100644 --- a/docsSrc/index.md +++ b/docsSrc/index.md @@ -1,7 +1,3 @@ -# LeonidLodygin.ImageProcessing - ---- - ## What is ImageProcessing? A library for image processing using GPGPU and agents for parallel computing. @@ -13,10 +9,10 @@ A library for image processing using GPGPU and agents for parallel computing. @@ -24,10 +20,10 @@ A library for image processing using GPGPU and agents for parallel computing.
    How-To Guides
    -

    Guides you through the steps involved in addressing key problems and use-cases.

    +

    Learn how to work with the ImageProcessing library directly in your code

    @@ -35,21 +31,10 @@ A library for image processing using GPGPU and agents for parallel computing.
    Explanations
    -

    Discusses key topics and concepts at a fairly high level and provide useful background information and explanation..

    -
    - -
    - -
    -
    -
    -
    Reference
    -

    Contain technical references.

    +

    Learn about the structure of the library

    diff --git a/images/Structure.png b/images/Structure.png new file mode 100644 index 0000000000000000000000000000000000000000..b1db1e3083aa19184ddc688b0b2a08e2a38dd2fa GIT binary patch literal 36300 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

    !O-=F@WA!0OV0l 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%0Dh~e2%j;_dVbQG_I0Y|dj88768}nCy;zMEw=< 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 T9;Vk6@K0M^U#;Z0-KGBpNhz-1 literal 0 HcmV?d00001 diff --git a/src/ImageProcessing/Main.fs b/src/ImageProcessing/Main.fs index 619f9138..91cc1554 100644 --- a/src/ImageProcessing/Main.fs +++ b/src/ImageProcessing/Main.fs @@ -8,6 +8,9 @@ open ImageArrayProcessing open Agents open Brahma.FSharp +///

    +/// Module for processing console commands +/// module Main = [] diff --git a/src/ImageProcessing/MyImage.fs b/src/ImageProcessing/MyImage.fs index f9826d8c..c6e4029f 100644 --- a/src/ImageProcessing/MyImage.fs +++ b/src/ImageProcessing/MyImage.fs @@ -1,4 +1,7 @@ -module ImageProcessing.MyImage +/// +/// Module for working with images +/// +module ImageProcessing.MyImage open System open SixLabors.ImageSharp diff --git a/temp/watch-docs/Explanations/Structure.html b/temp/watch-docs/Explanations/Structure.html new file mode 100644 index 00000000..035b7826 --- /dev/null +++ b/temp/watch-docs/Explanations/Structure.html @@ -0,0 +1,210 @@ + + + + + + Structure + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/temp/watch-docs/Explanations/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" "b/temp/watch-docs/Explanations/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.txt" new file mode 100644 index 00000000..e69de29b diff --git a/temp/watch-docs/How_Tos/Code.html b/temp/watch-docs/How_Tos/Code.html new file mode 100644 index 00000000..5e126c86 --- /dev/null +++ b/temp/watch-docs/How_Tos/Code.html @@ -0,0 +1,240 @@ + + + + + + How to code + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    How to code

    +

    In this tutorial, we will look at how to work with the ImageProcessing library using code rather than console commands.

    +

    Installing ImageProcessing

    +
    > dotnet add package LeonidLodygin.ImageProcessing --version 1.0.0
    +
    + +

    Load your image using the loadAsImage function from the MyImage module.

    +
    > let image = loadAsImage "path to the image"
    +
    +

    For CPU and GPU the list of transforms is identical, decide what you want to process your image on and select the appropriate function to process from the CpuProcessing module or the GpuProcessing module respectively.

    +

    In the case of CPU processing:

    +

    Apply the fisheye filter to the uploaded image.

    +
    > let newImage = fishEye image
    +
    +

    Don't forget to save the processed image using the saveImage function from the MyImage module!

    +
    > let newImage = saveImage "path"
    +
    +

    In the case of GPU processing:

    +

    In the case of GPU processing, you have to go through a few extra steps to achieve your goal:

    +

    Prepare OpenCl context and queue(from Brahma.FSharp module):

    +
    > let clContext = ClContext(ClDevice.GetFirstAppropriateDevice(device))
    +> let queue = clContext.QueueProvider.CreateQueue()
    +
    +

    Compile the kernel to apply the filter using the fishEyeKernel function from the GpuKernels module:

    +
    > let fishKernel = fishEyeKernel clContext
    +
    +

    Process the image using the fishEye function from the GpuProcessing module:

    +
    let newImage = fishEye fishKernel clContext 64 queue image
    +
    +

    Don't forget to save the new image:

    +
    > let newImage = saveImage "path"
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/temp/watch-docs/Reference/imageprocessing-agents.html b/temp/watch-docs/Reference/imageprocessing-agents.html index dfe30216..791e1af8 100644 --- a/temp/watch-docs/Reference/imageprocessing-agents.html +++ b/temp/watch-docs/Reference/imageprocessing-agents.html @@ -106,7 +106,24 @@