Repository: scale-tone/DurableFunctionsMonitor Branch: master Commit: 6acaded3c44f Files: 201 Total size: 2.8 MB Directory structure: gitextract_sz7kn825/ ├── .gitignore ├── LICENSE ├── README.md ├── azure-pipelines.yml ├── custom-backends/ │ ├── README.md │ ├── mssql/ │ │ ├── .gitignore │ │ ├── Dfm.MsSql.csproj │ │ ├── README.md │ │ ├── Startup.cs │ │ ├── arm-template.json │ │ └── host.json │ ├── netcore21/ │ │ ├── .gitignore │ │ ├── Dfm.NetCore21.csproj │ │ ├── README.md │ │ ├── Startup.cs │ │ ├── arm-template.json │ │ └── host.json │ └── netcore31/ │ ├── .gitignore │ ├── Dfm.NetCore31.csproj │ ├── README.md │ ├── Startup.cs │ ├── arm-template.json │ └── host.json ├── durablefunctionsmonitor-vscodeext/ │ ├── .gitignore │ ├── .vscode/ │ │ ├── extensions.json │ │ ├── launch.json │ │ ├── settings.json │ │ └── tasks.json │ ├── .vscodeignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── BackendProcess.ts │ │ ├── ConnStringUtils.ts │ │ ├── FunctionGraphList.ts │ │ ├── FunctionGraphView.ts │ │ ├── MonitorTreeDataProvider.ts │ │ ├── MonitorView.ts │ │ ├── MonitorViewList.ts │ │ ├── Settings.ts │ │ ├── SharedConstants.ts │ │ ├── StorageAccountTreeItem.ts │ │ ├── StorageAccountTreeItems.ts │ │ ├── SubscriptionTreeItem.ts │ │ ├── SubscriptionTreeItems.ts │ │ ├── TaskHubTreeItem.ts │ │ ├── az-func-as-a-graph/ │ │ │ ├── FunctionsMap.d.ts │ │ │ ├── traverseFunctionProject.ts │ │ │ └── traverseFunctionProjectUtils.ts │ │ ├── extension.ts │ │ └── test/ │ │ ├── runTest.ts │ │ └── suite/ │ │ ├── extension.test.ts │ │ └── index.ts │ ├── tsconfig.json │ └── tslint.json ├── durablefunctionsmonitor.dotnetbackend/ │ ├── .gitignore │ ├── .vscode/ │ │ ├── extensions.json │ │ ├── launch.json │ │ ├── settings.json │ │ └── tasks.json │ ├── Common/ │ │ ├── Auth.cs │ │ ├── CustomTemplates.cs │ │ ├── DetailedOrchestrationStatus.cs │ │ ├── ExpandedOrchestrationStatus.cs │ │ ├── FilterClause.cs │ │ ├── Globals.cs │ │ ├── HttpHandlerBase.cs │ │ ├── OrchestrationHistory.cs │ │ ├── Setup.cs │ │ └── TableClient.cs │ ├── DfmStatics/ │ │ ├── index.html │ │ ├── manifest.json │ │ └── static/ │ │ ├── css/ │ │ │ ├── 2.62e7949a.chunk.css │ │ │ └── main.12374d2f.chunk.css │ │ └── js/ │ │ ├── 2.7e622828.chunk.js │ │ ├── 2.7e622828.chunk.js.LICENSE.txt │ │ ├── main.7371b08e.chunk.js │ │ └── runtime-main.edc3f937.js │ ├── Dockerfile │ ├── Functions/ │ │ ├── About.cs │ │ ├── CleanEntityStorage.cs │ │ ├── DeleteTaskHub.cs │ │ ├── EasyAuthConfig.cs │ │ ├── FunctionMap.cs │ │ ├── IdSuggestions.cs │ │ ├── ManageConnection.cs │ │ ├── Orchestration.cs │ │ ├── Orchestrations.cs │ │ ├── PurgeHistory.cs │ │ ├── ServeStatics.cs │ │ └── TaskHubNames.cs │ ├── LICENSE │ ├── NUGET_README.md │ ├── README.md │ ├── arm-template.json │ ├── dfm-aks-deployment.yaml │ ├── durablefunctionsmonitor.dotnetbackend.csproj │ ├── durablefunctionsmonitor.dotnetbackend.targets │ ├── host.json │ ├── nuspec.nuspec │ ├── proxies.json │ └── setup-and-run.js ├── durablefunctionsmonitor.functions/ │ └── README.md ├── durablefunctionsmonitor.react/ │ ├── .gitignore │ ├── README.md │ ├── copy-build-artifacts.js │ ├── package.json │ ├── public/ │ │ ├── index.html │ │ └── manifest.json │ ├── src/ │ │ ├── CancelToken.ts │ │ ├── DateTimeHelpers.ts │ │ ├── DfmContext.ts │ │ ├── components/ │ │ │ ├── ErrorMessage.css │ │ │ ├── ErrorMessage.tsx │ │ │ ├── FunctionGraph.css │ │ │ ├── FunctionGraph.tsx │ │ │ ├── FunctionGraphBase.tsx │ │ │ ├── FunctionGraphTabBase.tsx │ │ │ ├── LoginIcon.css │ │ │ ├── LoginIcon.tsx │ │ │ ├── Main.css │ │ │ ├── Main.tsx │ │ │ ├── MainMenu.css │ │ │ ├── MainMenu.tsx │ │ │ ├── OrchestrationLink.tsx │ │ │ ├── SaveAsSvgButton.tsx │ │ │ ├── details-view/ │ │ │ │ ├── DurableEntityButtons.tsx │ │ │ │ ├── DurableEntityFields.tsx │ │ │ │ ├── OrchestrationButtons.tsx │ │ │ │ ├── OrchestrationDetails.css │ │ │ │ ├── OrchestrationDetails.tsx │ │ │ │ ├── OrchestrationDetailsFunctionGraph.tsx │ │ │ │ └── OrchestrationFields.tsx │ │ │ ├── dialogs/ │ │ │ │ ├── CleanEntityStorageDialog.css │ │ │ │ ├── CleanEntityStorageDialog.tsx │ │ │ │ ├── ConnectionParamsDialog.tsx │ │ │ │ ├── LongJsonDialog.tsx │ │ │ │ ├── PurgeHistoryDialog.css │ │ │ │ ├── PurgeHistoryDialog.tsx │ │ │ │ ├── StartNewInstanceDialog.css │ │ │ │ └── StartNewInstanceDialog.tsx │ │ │ └── results-view/ │ │ │ ├── Orchestrations.css │ │ │ ├── Orchestrations.tsx │ │ │ ├── OrchestrationsFunctionGraph.css │ │ │ ├── OrchestrationsFunctionGraph.tsx │ │ │ ├── OrchestrationsGanttChart.tsx │ │ │ ├── OrchestrationsHistogram.tsx │ │ │ └── OrchestrationsList.tsx │ │ ├── index.css │ │ ├── index.tsx │ │ ├── react-app-env.d.ts │ │ ├── services/ │ │ │ ├── BackendClient.ts │ │ │ ├── IBackendClient.ts │ │ │ └── VsCodeBackendClient.ts │ │ ├── states/ │ │ │ ├── DurableOrchestrationStatus.ts │ │ │ ├── ErrorMessageState.ts │ │ │ ├── FilterOperatorEnum.ts │ │ │ ├── FunctionGraphState.ts │ │ │ ├── FunctionGraphStateBase.ts │ │ │ ├── ITypedLocalStorage.ts │ │ │ ├── LoginState.ts │ │ │ ├── MainMenuState.ts │ │ │ ├── MainState.ts │ │ │ ├── MermaidDiagramStateBase.ts │ │ │ ├── QueryString.ts │ │ │ ├── TypedLocalStorage.ts │ │ │ ├── VsCodeTypedLocalStorage.ts │ │ │ ├── az-func-as-a-graph/ │ │ │ │ ├── FunctionsMap.d.ts │ │ │ │ └── buildFunctionDiagramCode.ts │ │ │ ├── details-view/ │ │ │ │ ├── FunctionGraphTabState.ts │ │ │ │ ├── GanttDiagramTabState.ts │ │ │ │ ├── ICustomTabState.ts │ │ │ │ ├── LiquidMarkupTabState.ts │ │ │ │ ├── MermaidDiagramTabState.ts │ │ │ │ ├── OrchestrationDetailsState.ts │ │ │ │ └── SequenceDiagramTabState.ts │ │ │ ├── dialogs/ │ │ │ │ ├── CleanEntityStorageDialogState.ts │ │ │ │ ├── ConnectionParamsDialogState.ts │ │ │ │ ├── PurgeHistoryDialogState.ts │ │ │ │ └── StartNewInstanceDialogState.ts │ │ │ └── results-view/ │ │ │ ├── OrchestrationsState.ts │ │ │ ├── ResultsFunctionGraphTabState.ts │ │ │ ├── ResultsGanttDiagramTabState.ts │ │ │ ├── ResultsHistogramTabState.ts │ │ │ └── ResultsListTabState.ts │ │ └── theme.ts │ ├── tsconfig.json │ └── tslint.json └── tests/ └── durablefunctionsmonitor.dotnetbackend.tests/ ├── .gitignore ├── .vscode/ │ ├── launch.json │ └── tasks.json ├── AboutTests.cs ├── AuthTests.cs ├── EasyAuthConfigTests.cs ├── FilterClauseTests.cs ├── GlobalsTests.cs ├── IdSuggestionsTests.cs ├── ServeStaticsTests.cs ├── Shared.cs └── durablefunctionsmonitor.dotnetbackend.tests.csproj ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .vs ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2019 scale-tone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ *** # THIS PROJECT HAS MOVED TO https://github.com/microsoft/DurableFunctionsMonitor *** ![logo](https://raw.githubusercontent.com/scale-tone/DurableFunctionsMonitor/master/readme/screenshots/main-page.png) # Durable Functions Monitor A monitoring/debugging UI tool for Azure Durable Functions [Azure Durable Functions](https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview) provide an easy and elegant way of building cloud-native Reliable Stateful Services in the Serverless world. The only thing that's missing so far is a UI for monitoring, managing and debugging your orchestration instances. This project tries to bridge the gap. [Nuget](https://www.nuget.org/profiles/durablefunctionsmonitor) GitHub Repo stars [Visual Studio Marketplace Installs](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor) [](https://hub.docker.com/r/scaletone/durablefunctionsmonitor) [Nuget](https://www.nuget.org/profiles/durablefunctionsmonitor) # Prerequisites To run this on your devbox you need to have [Azure Functions Core Tools](https://www.npmjs.com/package/azure-functions-core-tools) **globally** installed (which is normally already the case, if you're working with Azure Functions - just ensure that you have the latest version of it). **OR** [Docker Desktop](https://www.docker.com/products/docker-desktop), if you prefer to run it locally [as a container](https://hub.docker.com/r/scaletone/durablefunctionsmonitor). # How to run As a [VsCode Extension](https://github.com/scale-tone/DurableFunctionsMonitor/blob/master/durablefunctionsmonitor-vscodeext/README.md#durable-functions-monitor-as-a-vscode-extension). * Install it [from the Marketplace](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor) or from [a VSIX-file](https://github.com/scale-tone/DurableFunctionsMonitor/releases). * (if you have [Azure Functions](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions) extension also installed) Goto **Azure Functions** View Container, observe all your TaskHubs under **DURABLE FUNCTIONS** tab and click on them to connect. * (if not) Type `Durable Functions Monitor` in your Command Palette and then confirm or provide Storage Connection String and Hub Name. **OR** [As a standalone service](https://github.com/scale-tone/DurableFunctionsMonitor/blob/master/durablefunctionsmonitor.dotnetbackend/README.md#durablefunctionsmonitordotnetbackend), either running locally on your devbox or deployed into Azure: [![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fscale-tone%2FDurableFunctionsMonitor%2Fmaster%2Fdurablefunctionsmonitor.dotnetbackend%2Farm-template.json) **OR** [Install it as a NuGet package](https://www.nuget.org/packages/DurableFunctionsMonitor.DotNetBackend) into your own Functions project (.Net Core only). # Features ## 1. View the list of your Orchestrations and/or Durable Entities, with sorting, infinite scrolling and auto-refresh: ## 2. Filter by time range and column values: ## 3. Visualize the filtered list of instances as a Time Histogram or as a Gantt chart: ## 4. Start new orchestration instances: ## 5. Monitor the status of a certain instance: ## 6. Quickly navigate to a certain instance by its ID: ## 7. Observe Sequence Diagrams and Gantt Charts for orchestrations: ## 8. Restart, Purge, Rewind, Terminate, Raise Events, Set Custom Status: ## 9. Purge Orchestration/Entity instances history: ## 10. Clean deleted Durable Entities: ## 11. Create custom Orchestration/Entity status tabs with [Liquid Templates](https://shopify.github.io/liquid/): 1. Create a [Liquid](https://shopify.github.io/liquid/) template file and name it like `[My Custom Tab Name].[orchestration-or-entity-name].liquid` or just `[My Custom Tab Name].liquid` (this one will be applied to any kind of entity). 2. In the same Storage Account (the account where your Durable Functions run in) create a Blob container called `durable-functions-monitor`. 3. Put your template file into a `tab-templates` virtual folder in that container (the full path should look like `/durable-functions-monitor/tab-templates/[My Custom Tab Name].[orchestration-or-entity-name].liquid`). 4. Restart Durable Functions Monitor. 5. Observe the newly appeared `My Custom Tab Name` tab on the Orchestration/Entity Details page: Sample Liquid Template: ```

These people were invited:

``` You can have multiple templates for each Orchestration/Entity type, and also multiple 'common' (applied to any Orchestration/Entity) templates. Here is [a couple](https://gist.github.com/scale-tone/13956ec804a70f5f66200c6ec97db673) [of more](https://github.com/scale-tone/repka-durable-func/blob/master/Repka%20Status.the-saga-of-repka.liquid) sample templates. NOTE1: [this .Net object](https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.webjobs.extensions.durabletask.durableorchestrationstatus?view=azure-dotnet) is passed to your templates as a parameter. Mind the property names and their casing. NOTE2: code inside your templates is still subject to these [Content Security Policies](https://github.com/scale-tone/DurableFunctionsMonitor/blob/master/durablefunctionsmonitor.react/public/index.html#L8), so no external scripts, sorry. ## 12. Connect to different Durable Function Hubs and Azure Storage Accounts: ## 13. Monitor non-default Storage Providers (Netherite, Microsoft SQL, etc.): For that you can use Durable Functions Monitor in 'injected' mode, aka added as a [NuGet package](https://www.nuget.org/profiles/durablefunctionsmonitor) to *your* project. 1. Create a .Net Core Function App project, that is [configured to use an alternative Storage Provider](https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-storage-providers#azure-storage) and make sure it compiles and starts. 2. Add [DurableFunctionsMonitor.DotNetBackend](https://www.nuget.org/profiles/durablefunctionsmonitor) package to it: ``` dotnet add package DurableFunctionsMonitor.DotNetBackend ``` 4. Add mandatory initialization code, that needs to run at your Function's startup: ``` [assembly: WebJobsStartup(typeof(StartupNs.Startup))] namespace StartupNs { public class Startup : IWebJobsStartup { public void Configure(IWebJobsBuilder builder) { DfmEndpoint.Setup(); } } } ``` Find more details on programmatic configuration options in the [package readme](https://www.nuget.org/packages/DurableFunctionsMonitor.DotNetBackend/). 6. Run the project: ``` func start ``` 8. Navigate to `http://localhost:7071/api`. You can customize the endpoint address as needed, as described [here](https://www.nuget.org/packages/DurableFunctionsMonitor.DotNetBackend/). ## 14. Visualize your Azure Function projects in form of an interactive graph: This functionality is powered by [az-func-as-a-graph](https://github.com/scale-tone/az-func-as-a-graph/blob/main/README.md) tool, but now it is also fully integrated into Durable Functions Monitor: ![image](https://user-images.githubusercontent.com/5447190/127571400-f83c7f96-55bc-4714-8323-04d26f3be74f.png) When running Durable Functions Monitor as [VsCode Extension](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor), the **Functions Graph** tab should appear automatically, once you have the relevant Functions project opened. When running in [standalone/injected mode](https://github.com/scale-tone/DurableFunctionsMonitor/tree/master/durablefunctionsmonitor.dotnetbackend#how-to-run) you'll need to generate and upload an intermediate Functions Map JSON file. 1. Generate it with [az-func-as-a-graph CLI](https://github.com/scale-tone/az-func-as-a-graph/blob/main/README.md#how-to-run-as-part-of-azure-devops-build-pipeline). Specify `dfm-func-map..json` (will be applied to that particular Task Hub only) or just `dfm-func-map.json` (will be applied to all Task Hubs) as the output name. 2. Upload this generated JSON file to `function-maps` virtual folder inside `durable-functions-monitor` BLOB container in the underlying Storage Account (the full path should look like `/durable-functions-monitor/function-maps/dfm-func-map..json`). 3. Restart Durable Functions Monitor. 4. Observe the newly appeared **Functions Graph** tab. ================================================ FILE: azure-pipelines.yml ================================================ pool: name: Azure Pipelines vmImage: 'ubuntu-18.04' demands: npm steps: - task: Npm@1 displayName: 'npm install durablefunctionsmonitor.react' inputs: workingDir: durablefunctionsmonitor.react verbose: false - task: Npm@1 displayName: 'npm build durablefunctionsmonitor.react' inputs: command: custom workingDir: durablefunctionsmonitor.react verbose: false customCommand: 'run build' - task: CopyFiles@2 displayName: 'copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics' inputs: SourceFolder: durablefunctionsmonitor.react/build Contents: | static/** index.html favicon.png logo.svg service-worker.js manifest.json TargetFolder: durablefunctionsmonitor.dotnetbackend/DfmStatics CleanTargetFolder: true - task: CopyFiles@2 displayName: 'copy durablefunctionsmonitor.dotnetbackend to ArtifactStagingDirectory' inputs: SourceFolder: durablefunctionsmonitor.dotnetbackend TargetFolder: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetbackend' OverWrite: true - task: DotNetCoreCLI@2 displayName: 'dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests' inputs: command: 'test' projects: 'tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj' - task: DotNetCoreCLI@2 displayName: 'dotnet publish durablefunctionsmonitor.dotnetbackend' inputs: command: publish publishWebProjects: false projects: durablefunctionsmonitor.dotnetbackend arguments: '--output $(Build.ArtifactStagingDirectory)/output' zipAfterPublish: false modifyOutputPath: false - task: CopyFiles@2 displayName: 'copy dotnetbackend to durablefunctionsmonitor-vscodeext/backend' inputs: SourceFolder: '$(Build.ArtifactStagingDirectory)/output' Contents: | ** !logo.svg TargetFolder: 'durablefunctionsmonitor-vscodeext/backend' CleanTargetFolder: true - task: CopyFiles@2 displayName: 'copy custom-backends to durablefunctionsmonitor-vscodeext/custom-backends' inputs: SourceFolder: 'custom-backends' Contents: | ** !*.md TargetFolder: 'durablefunctionsmonitor-vscodeext/custom-backends' CleanTargetFolder: true - task: Npm@1 displayName: 'npm install durablefunctionsmonitor-vscodeext' inputs: workingDir: 'durablefunctionsmonitor-vscodeext' verbose: false - task: Npm@1 displayName: 'package durablefunctionsmonitor-vscodeext to VSIX-file' inputs: command: custom workingDir: 'durablefunctionsmonitor-vscodeext' verbose: false customCommand: 'run package' - task: CopyFiles@2 displayName: 'copy VSIX-file to ArtifactStagingDirectory' inputs: SourceFolder: 'durablefunctionsmonitor-vscodeext' Contents: 'durablefunctionsmonitor*.vsix' TargetFolder: '$(Build.ArtifactStagingDirectory)' OverWrite: true - task: CopyFiles@2 displayName: 'copy LICENSE to output' inputs: Contents: | LICENSE TargetFolder: '$(Build.ArtifactStagingDirectory)/output' OverWrite: true - task: NuGetCommand@2 displayName: 'package dotnetbackend into a Nuget package' inputs: command: 'pack' packagesToPack: '$(Build.ArtifactStagingDirectory)/output/nuspec.nuspec' packDestination: '$(Build.ArtifactStagingDirectory)' versioningScheme: 'off' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' ================================================ FILE: custom-backends/README.md ================================================ # Custom backends for Durable Functions Monitor These are Azure Function projects with Durable Functions Monitor 'injected' as a [NuGet package](https://www.nuget.org/profiles/durablefunctionsmonitor). To be used for e.g. monitoring [custom storage providers](https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-storage-providers). * [netcore21](https://github.com/scale-tone/DurableFunctionsMonitor/tree/master/custom-backends/netcore21) - (legacy) Durable Functions Monitor backend, that runs on .Net Core 2.1. * [netcore31](https://github.com/scale-tone/DurableFunctionsMonitor/tree/master/custom-backends/netcore31) - Durable Functions Monitor backend, that runs on .Net Core 3.1. * [mssql](https://github.com/scale-tone/DurableFunctionsMonitor/tree/master/custom-backends/mssql) - Durable Functions Monitor backend to be used with [Durable Task SQL Provider](https://microsoft.github.io/durabletask-mssql/#/). ================================================ FILE: custom-backends/mssql/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # nuget.exe nuget.exe # Azure Functions localsettings file local.settings.json # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # DNX project.lock.json project.fragment.lock.json artifacts/ *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted #*.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config # NuGet v3's project.json files produces more ignoreable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings node_modules/ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc ================================================ FILE: custom-backends/mssql/Dfm.MsSql.csproj ================================================ netcoreapp3.1 v3 PreserveNewest PreserveNewest Never ================================================ FILE: custom-backends/mssql/README.md ================================================ # Durable Functions Monitor for MSSQL storage provider Custom Durable Functions Monitor backend project to be used with [Durable Task SQL Provider](https://microsoft.github.io/durabletask-mssql/#/). ## How to run locally * Clone this repo. * In the project's folder create a `local.settings.json` file, which should look like this: ``` { "IsEncrypted": false, "Values": { "AzureWebJobsSecretStorageType": "files", "DFM_SQL_CONNECTION_STRING": "your-mssql-connection-string", "DFM_HUB_NAME": "mssql", "DFM_NONCE": "i_sure_know_what_i_am_doing", "FUNCTIONS_WORKER_RUNTIME": "dotnet" }, "Host": { "LocalHttpPort": 7072 } } ``` * Go to the project's folder with your command prompt and type the following: ``` func start ``` * Navigate to http://localhost:7072 # How to deploy to Azure [![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fscale-tone%2FDurableFunctionsMonitor%2Fmaster%2Fcustom-backends%2Fmssql%2Farm-template.json) The above button will deploy *these sources* into *your newly created* Function App instance. ================================================ FILE: custom-backends/mssql/Startup.cs ================================================ using System; using System.Collections.Generic; using DurableFunctionsMonitor.DotNetBackend; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.DurableTask; using Microsoft.Azure.WebJobs.Hosting; using Microsoft.Data.SqlClient; [assembly: WebJobsStartup(typeof(Dfm.MsSql.Startup))] namespace Dfm.MsSql { public class Startup : IWebJobsStartup { public void Configure(IWebJobsBuilder builder) { DfmEndpoint.Setup(null, new DfmExtensionPoints { GetInstanceHistoryRoutine = GetInstanceHistory }); } /// /// Custom routine for fetching orchestration history /// public static IEnumerable GetInstanceHistory(IDurableClient durableClient, string connName, string hubName, string instanceId) { string sql = @"SELECT IIF(h2.TaskID IS NULL, h.Timestamp, h2.Timestamp) as Timestamp, IIF(h2.TaskID IS NULL, h.EventType, h2.EventType) as EventType, h.TaskID as EventId, h.Name as Name, IIF(h2.TaskID IS NULL, NULL, h.Timestamp) as ScheduledTime, p.Text as Result, p.Reason as Details, cih.InstanceID as SubOrchestrationId FROM dt.Instances i INNER JOIN dt.History h ON (i.InstanceID = h.InstanceID AND i.ExecutionID = h.ExecutionID) LEFT JOIN dt.History h2 ON ( h.EventType IN ('TaskScheduled', 'SubOrchestrationInstanceCreated') AND h2.EventType IN ('SubOrchestrationInstanceCompleted', 'SubOrchestrationInstanceFailed', 'TaskCompleted', 'TaskFailed') AND h.InstanceID = h2.InstanceID AND h.ExecutionID = h2.ExecutionID AND h.TaskID = h2.TaskID AND h.SequenceNumber != h2.SequenceNumber ) LEFT JOIN dt.Payloads p ON p.PayloadID = h2.DataPayloadID LEFT JOIN ( select cii.ParentInstanceID, cii.InstanceID, chh.TaskID from dt.Instances cii INNER JOIN dt.History chh ON (chh.InstanceID = cii.InstanceID AND chh.EventType = 'ExecutionStarted') ) cih ON (cih.ParentInstanceID = h.InstanceID AND cih.TaskID = h.TaskID) WHERE h.EventType IN ( 'ExecutionStarted', 'ExecutionCompleted', 'ExecutionFailed', 'ExecutionTerminated', 'TaskScheduled', 'SubOrchestrationInstanceCreated', 'ContinueAsNew', 'TimerCreated', 'TimerFired', 'EventRaised', 'EventSent' ) AND i.InstanceID = @OrchestrationInstanceId ORDER BY h.SequenceNumber"; string sqlConnectionString = Environment.GetEnvironmentVariable("DFM_SQL_CONNECTION_STRING"); using (var conn = new SqlConnection(sqlConnectionString)) { conn.Open(); using (var cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@OrchestrationInstanceId", instanceId); using (SqlDataReader reader = cmd.ExecuteReader()) { // Memorizing 'ExecutionStarted' event, to further correlate with 'ExecutionCompleted' DateTimeOffset? executionStartedTimestamp = null; while (reader.Read()) { var evt = ToHistoryEvent(reader, executionStartedTimestamp); if (evt.EventType == "ExecutionStarted") { executionStartedTimestamp = evt.Timestamp; } yield return evt; } } } } } private static HistoryEvent ToHistoryEvent(SqlDataReader reader, DateTimeOffset? executionStartTime) { var evt = new HistoryEvent { Timestamp = ((DateTime)reader["Timestamp"]).ToUniversalTime(), EventType = reader["EventType"].ToString(), EventId = reader["EventId"] is DBNull ? null : (int?)reader["EventId"], Name = reader["Name"].ToString(), Result = reader["Result"].ToString(), Details = reader["Details"].ToString(), SubOrchestrationId = reader["SubOrchestrationId"].ToString(), }; var rawScheduledTime = reader["ScheduledTime"]; if (!(rawScheduledTime is DBNull)) { evt.ScheduledTime = ((DateTime)rawScheduledTime).ToUniversalTime(); } else if(evt.EventType == "ExecutionCompleted") { evt.ScheduledTime = executionStartTime?.ToUniversalTime(); } if (evt.ScheduledTime.HasValue) { evt.DurationInMs = (evt.Timestamp - evt.ScheduledTime.Value).TotalMilliseconds; } return evt; } } } ================================================ FILE: custom-backends/mssql/arm-template.json ================================================ { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "functionAppName": { "type": "string", "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]", "metadata": { "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions." } }, "storageConnectionString": { "type": "securestring", "metadata": { "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings." } }, "sqlConnectionString": { "type": "securestring", "metadata": { "description": "Connection String for the database your MSSQL storage provider is using. Copy it from your Durable Functions App Settings." } }, "taskHubName": { "type": "string", "metadata": { "description": "Task Hub name to be monitored" } }, "aadAppClientId": { "type": "string", "metadata": { "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here." } }, "aadAppTenantId": { "type": "string", "defaultValue": "[subscription().tenantId]", "metadata": { "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId." } }, "allowedUserNames": { "type": "string", "metadata": { "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here." } } }, "resources": [ { "type": "Microsoft.Web/serverfarms", "apiVersion": "2016-09-01", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "sku": { "name": "Y1", "tier": "Dynamic" }, "properties": { "name": "[parameters('functionAppName')]", "computeMode": "Dynamic" } }, { "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "kind": "functionapp", "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]" ], "resources": [ { "apiVersion": "2015-08-01", "name": "web", "type": "sourcecontrols", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]" ], "properties": { "RepoUrl": "https://github.com/scale-tone/DurableFunctionsMonitor", "branch": "master", "IsManualIntegration": true } }, { "name": "[concat(parameters('functionAppName'), '/authsettings')]", "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites/config", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]" ], "properties": { "enabled": true, "unauthenticatedClientAction": "RedirectToLoginPage", "tokenStoreEnabled": true, "defaultProvider": "AzureActiveDirectory", "clientId": "[parameters('aadAppClientId')]", "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]" } } ], "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]", "siteConfig": { "appSettings": [ { "name": "DFM_SQL_CONNECTION_STRING", "value": "[parameters('sqlConnectionString')]" }, { "name": "DFM_HUB_NAME", "value": "[parameters('taskHubName')]" }, { "name": "DFM_ALLOWED_USER_NAMES", "value": "[parameters('allowedUserNames')]" }, { "name": "AzureWebJobsStorage", "value": "[parameters('storageConnectionString')]" }, { "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[parameters('storageConnectionString')]" }, { "name": "WEBSITE_CONTENTSHARE", "value": "[toLower(parameters('functionAppName'))]" }, { "name": "FUNCTIONS_EXTENSION_VERSION", "value": "~3" }, { "name": "FUNCTIONS_WORKER_RUNTIME", "value": "dotnet" }, { "name": "Project", "value": "custom-backends/mssql" } ] } } } ] } ================================================ FILE: custom-backends/mssql/host.json ================================================ { "version": "2.0", "extensions": { "http": { "routePrefix": "" }, "durableTask": { "hubName": "%DFM_HUB_NAME%", "extendedSessionsEnabled": "true", "UseGracefulShutdown": "true", "storageProvider": { "type": "mssql", "connectionStringName": "DFM_SQL_CONNECTION_STRING", "taskEventLockTimeout": "00:02:00" } } } } ================================================ FILE: custom-backends/netcore21/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # nuget.exe nuget.exe # Azure Functions localsettings file local.settings.json # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # DNX project.lock.json project.fragment.lock.json artifacts/ *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted #*.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config # NuGet v3's project.json files produces more ignoreable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings node_modules/ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc ================================================ FILE: custom-backends/netcore21/Dfm.NetCore21.csproj ================================================ netcoreapp2.1 v2 PreserveNewest PreserveNewest Never ================================================ FILE: custom-backends/netcore21/README.md ================================================ # Durable Functions Monitor on .Net Core 2.1 Custom Durable Functions Monitor backend project, configured to run on .Net Core 2.1. # How to deploy to Azure [![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fscale-tone%2FDurableFunctionsMonitor%2Fmaster%2Fcustom-backends%2Fnetcore21%2Farm-template.json) The above button will deploy *these sources* into *your newly created* Function App instance. ================================================ FILE: custom-backends/netcore21/Startup.cs ================================================ using DurableFunctionsMonitor.DotNetBackend; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Hosting; [assembly: WebJobsStartup(typeof(Dfm.NetCore21.Startup))] namespace Dfm.NetCore21 { public class Startup : IWebJobsStartup { public void Configure(IWebJobsBuilder builder) { DfmEndpoint.Setup(); } } } ================================================ FILE: custom-backends/netcore21/arm-template.json ================================================ { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "functionAppName": { "type": "string", "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]", "metadata": { "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions." } }, "storageConnectionString": { "type": "securestring", "metadata": { "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings." } }, "taskHubName": { "type": "string", "defaultValue": "", "metadata": { "description": "(optional) Comma-separated list of Task Hub names to be monitored. WARNING: if not set, this instance will expose ALL Task Hubs in your Storage account!" } }, "aadAppClientId": { "type": "string", "metadata": { "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here." } }, "aadAppTenantId": { "type": "string", "defaultValue": "[subscription().tenantId]", "metadata": { "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId." } }, "allowedUserNames": { "type": "string", "metadata": { "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here." } } }, "resources": [ { "type": "Microsoft.Web/serverfarms", "apiVersion": "2016-09-01", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "sku": { "name": "Y1", "tier": "Dynamic" }, "properties": { "name": "[parameters('functionAppName')]", "computeMode": "Dynamic" } }, { "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "kind": "functionapp", "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]" ], "resources": [ { "apiVersion": "2015-08-01", "name": "web", "type": "sourcecontrols", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]" ], "properties": { "RepoUrl": "https://github.com/scale-tone/DurableFunctionsMonitor", "branch": "master", "IsManualIntegration": true } }, { "name": "[concat(parameters('functionAppName'), '/authsettings')]", "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites/config", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]" ], "properties": { "enabled": true, "unauthenticatedClientAction": "RedirectToLoginPage", "tokenStoreEnabled": true, "defaultProvider": "AzureActiveDirectory", "clientId": "[parameters('aadAppClientId')]", "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]" } } ], "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]", "siteConfig": { "appSettings": [ { "name": "DFM_HUB_NAME", "value": "[parameters('taskHubName')]" }, { "name": "DFM_ALLOWED_USER_NAMES", "value": "[parameters('allowedUserNames')]" }, { "name": "AzureWebJobsStorage", "value": "[parameters('storageConnectionString')]" }, { "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[parameters('storageConnectionString')]" }, { "name": "WEBSITE_CONTENTSHARE", "value": "[toLower(parameters('functionAppName'))]" }, { "name": "FUNCTIONS_EXTENSION_VERSION", "value": "~2" }, { "name": "FUNCTIONS_WORKER_RUNTIME", "value": "dotnet" }, { "name": "Project", "value": "custom-backends/netcore21" } ] } } } ] } ================================================ FILE: custom-backends/netcore21/host.json ================================================ { "version": "2.0", "extensions": { "http": { "routePrefix": "" } } } ================================================ FILE: custom-backends/netcore31/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # nuget.exe nuget.exe # Azure Functions localsettings file local.settings.json # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # DNX project.lock.json project.fragment.lock.json artifacts/ *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted #*.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config # NuGet v3's project.json files produces more ignoreable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings node_modules/ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc ================================================ FILE: custom-backends/netcore31/Dfm.NetCore31.csproj ================================================ netcoreapp3.1 v3 PreserveNewest PreserveNewest Never ================================================ FILE: custom-backends/netcore31/README.md ================================================ # Durable Functions Monitor on .Net Core 3.1 Custom Durable Functions Monitor backend project, configured to run on .Net Core 3.1. # How to deploy to Azure [![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fscale-tone%2FDurableFunctionsMonitor%2Fmaster%2Fcustom-backends%2Fnetcore31%2Farm-template.json) The above button will deploy *these sources* into *your newly created* Function App instance. ================================================ FILE: custom-backends/netcore31/Startup.cs ================================================ using DurableFunctionsMonitor.DotNetBackend; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Hosting; [assembly: WebJobsStartup(typeof(Dfm.NetCore31.Startup))] namespace Dfm.NetCore31 { public class Startup : IWebJobsStartup { public void Configure(IWebJobsBuilder builder) { DfmEndpoint.Setup(); } } } ================================================ FILE: custom-backends/netcore31/arm-template.json ================================================ { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "functionAppName": { "type": "string", "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]", "metadata": { "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions." } }, "storageConnectionString": { "type": "securestring", "metadata": { "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings." } }, "taskHubName": { "type": "string", "defaultValue": "", "metadata": { "description": "(optional) Comma-separated list of Task Hub names to be monitored. WARNING: if not set, this instance will expose ALL Task Hubs in your Storage account!" } }, "aadAppClientId": { "type": "string", "metadata": { "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here." } }, "aadAppTenantId": { "type": "string", "defaultValue": "[subscription().tenantId]", "metadata": { "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId." } }, "allowedUserNames": { "type": "string", "metadata": { "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here." } } }, "resources": [ { "type": "Microsoft.Web/serverfarms", "apiVersion": "2016-09-01", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "sku": { "name": "Y1", "tier": "Dynamic" }, "properties": { "name": "[parameters('functionAppName')]", "computeMode": "Dynamic" } }, { "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "kind": "functionapp", "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]" ], "resources": [ { "apiVersion": "2015-08-01", "name": "web", "type": "sourcecontrols", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]" ], "properties": { "RepoUrl": "https://github.com/scale-tone/DurableFunctionsMonitor", "branch": "master", "IsManualIntegration": true } }, { "name": "[concat(parameters('functionAppName'), '/authsettings')]", "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites/config", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]" ], "properties": { "enabled": true, "unauthenticatedClientAction": "RedirectToLoginPage", "tokenStoreEnabled": true, "defaultProvider": "AzureActiveDirectory", "clientId": "[parameters('aadAppClientId')]", "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]" } } ], "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]", "siteConfig": { "appSettings": [ { "name": "DFM_HUB_NAME", "value": "[parameters('taskHubName')]" }, { "name": "DFM_ALLOWED_USER_NAMES", "value": "[parameters('allowedUserNames')]" }, { "name": "AzureWebJobsStorage", "value": "[parameters('storageConnectionString')]" }, { "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[parameters('storageConnectionString')]" }, { "name": "WEBSITE_CONTENTSHARE", "value": "[toLower(parameters('functionAppName'))]" }, { "name": "FUNCTIONS_EXTENSION_VERSION", "value": "~3" }, { "name": "FUNCTIONS_WORKER_RUNTIME", "value": "dotnet" }, { "name": "Project", "value": "custom-backends/netcore31" } ] } } } ] } ================================================ FILE: custom-backends/netcore31/host.json ================================================ { "version": "2.0", "extensions": { "http": { "routePrefix": "" } } } ================================================ FILE: durablefunctionsmonitor-vscodeext/.gitignore ================================================ # build output *.vsix # DurableFunctionsMonitor.Functions build output backend # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # TypeScript v1 declaration files typings/ # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env .env.test # parcel-bundler cache (https://parceljs.org/) .cache # next.js build output .next # nuxt.js build output .nuxt # vuepress build output .vuepress/dist # Serverless directories .serverless/ # FuseBox cache .fusebox/ # DynamoDB Local files .dynamodb/ # TypeScript output dist out # Azure Functions artifacts bin obj appsettings.json local.settings.json ================================================ FILE: durablefunctionsmonitor-vscodeext/.vscode/extensions.json ================================================ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format "recommendations": [ "ms-vscode.vscode-typescript-tslint-plugin" ] } ================================================ FILE: durablefunctionsmonitor-vscodeext/.vscode/launch.json ================================================ // A launch configuration that compiles the extension and then opens it inside a new window // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { "version": "0.2.0", "configurations": [ { "name": "Run Extension", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}" ], "outFiles": [ "${workspaceFolder}/out/**/*.js" ], "preLaunchTask": "npm: watch" }, { "name": "Extension Tests", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" ], "outFiles": [ "${workspaceFolder}/out/test/**/*.js" ], "preLaunchTask": "npm: watch" }, { "name": "Local Process with Kubernetes (Preview)", "type": "dev-spaces-connect-configuration", "request": "launch" } ] } ================================================ FILE: durablefunctionsmonitor-vscodeext/.vscode/settings.json ================================================ // Place your settings in this file to overwrite default and user settings. { "files.exclude": { "out": false // set this to true to hide the "out" folder with the compiled JS files }, "search.exclude": { "out": true // set this to false to include "out" folder in search results }, // Turn off tsc task auto detection since we have the necessary tasks as npm scripts "typescript.tsc.autoDetect": "off" } ================================================ FILE: durablefunctionsmonitor-vscodeext/.vscode/tasks.json ================================================ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { "version": "2.0.0", "tasks": [ { "type": "npm", "script": "watch", "problemMatcher": "$tsc-watch", "isBackground": true, "presentation": { "reveal": "never" }, "group": { "kind": "build", "isDefault": true } } ] } ================================================ FILE: durablefunctionsmonitor-vscodeext/.vscodeignore ================================================ .vscode/** .vscode-test/** out/test/** src/** .gitignore vsc-extension-quickstart.md **/tsconfig.json **/tslint.json **/*.map **/*.ts ================================================ FILE: durablefunctionsmonitor-vscodeext/CHANGELOG.md ================================================ # Change Log ## Version 5.1.0 - Instance execution history can now be filtered by time and other field values: ![image](https://user-images.githubusercontent.com/5447190/140803804-84ef440b-bce7-432d-aaf9-4b663f2ef5cd.png) - 'In' and 'Not In' filter operators. Filter values should be comma-separated or in form of a JSON array. - Backend migrated to .Net Core 3.1. - Direct requests that DfMon makes against Azure Table Storage now contain custom **User-Agent** header: `DurableFunctionsMonitor-Standalone`, `DurableFunctionsMonitor-VsCodeExt` or `DurableFunctionsMonitor-Injected`. Note that the majority of calls is still done via DurableClient, and those cannot be instrumented like this yet. - Minor bugfixes. ## Version 5.0.0 - UI improvements for instance filter and in some other places. - Minor bugfixes. ## Version 4.8.2 - Minor hotfix (DfMon's View Container might become unresponsive after a debug session). ## Version 4.8.1 - Workaround for https://github.com/Azure/azure-functions-durable-extension/issues/1926 (being unable to execute .Reset() and .StartNew() against a Task Hub named 'TestHubName'). ## Version 4.8 - 'Start New Orchestration Instance' feature: - Should now work seamlessly in [GitHub Codespaces](https://github.com/features/codespaces). - Full support for [Microsoft SQL storage provider](https://github.com/microsoft/durabletask-mssql). - Latest [az-func-as-a-graph](https://github.com/scale-tone/az-func-as-a-graph) integrated. - Minor bugfixes. ## Version 4.7.1 - Hotfix for incompatibility with Storage Emulator ([#112](https://github.com/scale-tone/DurableFunctionsMonitor/issues/112)). ## Version 4.7 - Latest [az-func-as-a-graph](https://github.com/scale-tone/az-func-as-a-graph) integrated, and it is now used as yet another visualization tab for both search results and instance details, with instance counts and statuses rendered on top of it. So it now acts as an *animated* code map of your project: ![image](https://user-images.githubusercontent.com/5447190/127571400-f83c7f96-55bc-4714-8323-04d26f3be74f.png) - 'Open XXXInstances/XXXHistory in Storage Explorer' menu items for Task Hubs: - Long JSON (or just long error messages) can now be viewed in a popup window ([#109](https://github.com/scale-tone/DurableFunctionsMonitor/issues/109)). - Minor bugfixes. ## Version 4.6 - Added a sortable **Duration** column to the list of results. Now you can quickly find quickest and longest instances. - Gantt charts are now interactive (lines are clickable). - Custom backends: you can now switch to a .Net Core 3.1 backend, or even to your own customized one: ![image](https://user-images.githubusercontent.com/5447190/123545702-c3aeb500-d759-11eb-9d6d-7c69db167ca2.png) - (Limited) support for [Microsoft SQL storage provider](https://github.com/microsoft/durabletask-mssql). When you open a project that uses it, the relevant Task Hub should appear in the **DURABLE FUNCTIONS** view container: ![image](https://user-images.githubusercontent.com/5447190/123545989-281e4400-d75b-11eb-865e-b8aa3cee690a.png) - Minor bugfixes. ## Version 4.5 - Time can now be shown in local time zone. **File->Preferences->Settings->Durable Functions Monitor->Show Time As**. - F# support for Functions Graphs. - Instance Details tab is now integrated with Functions Graph. If relevant Functions project is currently open, the Details tab will allow navigating to Functions Graph and to Orchestration/Entity/Activity source code. - Minor bugfixes. ## Version 4.4 - Now you can get a quick overview of _any_ Azure Functions project in form of a graph. **Command Palette -> Visualize Functions as a Graph...**. For Durable Functions/Durable Entities the tool also tries to infer and show their relationships. Function nodes are clickable and lead to function's code. - Minor bugfixes. ## Version 4.3 - Fixed time ranges ('Last Minute', 'Last Hour' etc.). - Multiple choice for filtering by instance status ('Running', 'Completed' etc.). - 'Not Equals', 'Not Starts With' and 'Not Contains' filter operators. - Performance improvements. - Minor bugfixes. ## Version 4.2 - Orchestrations/Entities are now also visualized as a time histogram and as a Gantt chart. Time histogram is interactive, you can zoom it in/out with your mouse. - 'Send Signal' button for Durable Entities. - Minor bugfixes. ## Version 4.1 - Dark color mode. - Minor bugfixes. ## Version 4.0 - It is now one backend per Storage Account, not per each Task Hub. Works faster and consumes less resources. - Minor bugfixes. ## Version 3.9 - Gantt Charts for orchestrations (in addition to Sequence Diagrams). - 'Go to instanceId...' feature to quickly navigate to an orchestration/entity instance by its id (with autocomplete supported). **Right-click on a Task Hub->Go to instanceId...**. - DotLiquid replaced with [Fluid](https://github.com/sebastienros/fluid) for rendering custom status tabs. [Fluid](https://github.com/sebastienros/fluid) looks much more mature (most of [Liquid](https://shopify.github.io/liquid/) seems to be supported) and more alive library. - 'Save as .SVG' button for diagrams. - Status tabs now refresh much smoother. - Minor bugfixes. ## Version 3.8 - WebViews are now persistent (do not reload every time you switch between them) and even persist their state (filters, sorting etc.) across restarts. - 'Restart' button for orchestrations (triggers the new [.RestartAsync()](https://github.com/Azure/azure-functions-durable-extension/pull/1545) method). - Sequence diagrams now show some timing (start times and durations). - 'Detach from all Task Hubs...' button for quickly killing all backends. - All logs (when enabled) now go to 'Durable Functions Monitor' output channel. - Minor bugfixes. ## Version 3.7 - Now settings are stored in VsCode's settings.json. **File->Preferences->Settings->Durable Functions Monitor**: - Local Storage Emulator, Azure Government and other exotic Storage Account types are now supported. If your Local Storage Emulator is running and there're some TaskHubs in it - they will appear automatically on your Azure Functions View Container (if not, try to modify the 'Storage Emulator Connection String' parameter on the Settings page). - Long-awaited 'Cancel' button on the Orchestrations page. - Now you can hide the columns you're not interested in: - Minor other UI improvements. ## Version 3.6 - 'Clear Entity Storage...' menu item for doing garbage collection of deleted Durable Entities. Executes the recently added [IDurableEntityClient.CleanEntityStorageAsync()](https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.webjobs.extensions.durabletask.idurableentityclient.cleanentitystorageasync?view=azure-dotnet) method. - Custom status visualisation for orchestrations/entities in form of [Liquid templates](https://shopify.github.io/liquid/). 1. Create a [DotLiquid](https://github.com/dotliquid/dotliquid) template file. 2. Name it like `[My Custom Tab Name].[orchestration-or-entity-name].liquid` or just `[My Custom Tab Name].liquid` (this one will be applied to any kind of entity). 3. In the same Storage Account create a container called `durable-functions-monitor`. 4. Put your template file into a `tab-templates` virtual folder in that container (the full path should look like `/durable-functions-monitor/tab-templates/[My Custom Tab Name].[orchestration-or-entity-name].liquid`). 5. Restart Durable Functions Monitor. 6. Observe the newly appeared `My Custom Tab Name` tab on the Orchestration/Entity Details page. - Performance improvements for loading the list of Orchestrations/Entities. ## Version 3.5 - Now the **Orchestration Details** page features a nice [mermaid](https://www.npmjs.com/package/mermaid)-based sequence diagram: - Also it's now possible to navigate to suborchestrations from the history list on the **Orchestration Details** page. ## Version 3.4 - Now integrated with [Azure Account](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azure-account) extension, so once logged in to Azure, you can now see and connect to all your TaskHubs. It is also still possible to connect with connection strings, as before. NOTE1: only filtered Azure Subscriptions are shown, so make sure your filter is set correctly with [Azure: Select Subscriptions](https://docs.microsoft.com/en-us/azure/governance/policy/how-to/extension-for-vscode#select-subscriptions) command. NOTE2: many things can go wrong when fetching the list of TaskHubs, so to investigate those problems you can [enable logging](https://github.com/scale-tone/DurableFunctionsMonitor/blob/master/durablefunctionsmonitor-vscodeext/CHANGELOG.md#version-21) and then check the 'Durable Functions Monitor' output channel. ## Version 3.3 - customStatus value of your orchestration instances can now be changed with 'Set Custom Status' button. - Minor bugfixes. ## Version 3.2 - You can now delete unused Task Hubs with 'Delete Task Hub...' context menu item. - Better (non-native) DateTime pickers. ## Version 3.1 - Minor security improvements. - List of existing Task Hubs is now loaded from your Storage Account and shown to you, when connecting to a Task Hub. ## Version 3.0 - A 'DURABLE FUNCTIONS' TreeView added to Azure Functions View Container. It displays all currently attached Task Hubs, allows to connect to multiple Task Hubs and switch between them. You need to have [Azure Functions](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions) extension installed to see it (which is typically the case if you work with Azure Functions in VSCode). ## Version 2.2 - Bulk purge for Durable Entities as well. - Prettified JSON on instance details page. ## Version 2.1 - Instances list sort order is now persisted as well. - Whenever backend initialization fails, its error message is now being shown immediately (instead of a generic 'timeout' message as before). - A complete backend output can now be logged into a file for debugging purposes. Open the **settings.json** file in extension's folder and set the **logging** setting to **true**. That will produce a **backend/backend-37072.log** file with full console output from func.exe. ## Version 2.0 - More native support for Durable Entities. - Backend migrated to Microsoft.Azure.WebJobs.Extensions.DurableTask 2.0.0. Please, ensure you have the latest Azure Functions Core Tools installed globally, otherwise the backend might fail to start. - Now displaying connection info (storage account name/hub name) in the tab title. ## Version 1.3 - Implemented purging orchestration instance history. Type 'Purge Durable Functions History...' in your Command Palette. - Added a context menu over a **host.json** file. ================================================ FILE: durablefunctionsmonitor-vscodeext/LICENSE ================================================ MIT License Copyright (c) 2019 scale-tone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: durablefunctionsmonitor-vscodeext/README.md ================================================ # Durable Functions Monitor as a VsCode Extension List/monitor/debug your Azure Durable Functions inside VsCode. **Command Palette -> Durable Functions Monitor**, or (if you have [Azure Functions](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions) extension also installed) **Azure Functions View Container -> DURABLE FUNCTIONS**, or right-click on your **host.json** file and use the context menu. ## Features * Get a bird's eye view of any Azure Functions project in form of a graph - **Command Palette -> Visualize Functions as a Graph...**. * List your Orchestrations and/or Durable Entities, with sorting, infinite scrolling and auto-refresh. * Monitor the status of a certain Orchestration/Durable Entity. Restart, Purge, Rewind, Terminate, Raise Events. * Start new orchestration instances - **Azure Functions View Container -> DURABLE FUNCTIONS -> [right-click on your TaskHub] -> Start New Orchestration Instance...** * Quickly navigate to an Orchestration/Entity instance by its ID - **Command Palette -> Durable Functions Monitor: Go to instanceId...** or **Azure Functions View Container -> DURABLE FUNCTIONS -> [right-click on your TaskHub] -> Go to instanceId...** * Purge Orchestrations/Durable Entities history - **Command Palette -> Durable Functions Monitor: Purge History...** * Cleanup deleted Durable Entities - **Command Palette -> Durable Functions Monitor: Clean Entity Storage...** * Observe all Task Hubs in your Azure Subscription and connect to them - **Azure Functions View Container -> DURABLE FUNCTIONS** * Delete Task Hubs - **Command Palette -> Delete Task Hub...** ## Pictures ## Prerequisites Make sure you have the latest [Azure Functions Core Tools](https://www.npmjs.com/package/azure-functions-core-tools) globally installed on your devbox. More info and sources on [the github repo](https://github.com/scale-tone/DurableFunctionsMonitor#features). ================================================ FILE: durablefunctionsmonitor-vscodeext/package.json ================================================ { "name": "durablefunctionsmonitor", "displayName": "Durable Functions Monitor", "description": "Monitoring/debugging UI tool for Azure Durable Functions. View->Command Palette...->Durable Functions Monitor", "version": "5.1.0", "engines": { "vscode": "^1.39.0" }, "categories": [ "Other", "Debuggers" ], "homepage": "https://github.com/scale-tone/DurableFunctionsMonitor", "repository": { "type": "git", "url": "https://github.com/scale-tone/DurableFunctionsMonitor" }, "bugs": { "url": "https://github.com/scale-tone/DurableFunctionsMonitor/issues" }, "icon": "logo.png", "keywords": [ "Azure Durable Functions", "Azure Durable Entities", "Azure Functions", "Serverless", "Azure" ], "publisher": "DurableFunctionsMonitor", "license": "MIT", "activationEvents": [ "onView:durableFunctionsMonitorTreeView", "onCommand:extension.durableFunctionsMonitor", "onCommand:extension.durableFunctionsMonitorPurgeHistory", "onCommand:extension.durableFunctionsMonitorCleanEntityStorage", "onCommand:durableFunctionsMonitorTreeView.attachToAnotherTaskHub", "onCommand:extension.durableFunctionsMonitorGotoInstanceId", "onCommand:extension.durableFunctionsMonitorVisualizeAsGraph", "onCommand:durableFunctionsMonitorTreeView.startNewInstance", "onDebug" ], "main": "./out/extension.js", "contributes": { "views": { "azure": [ { "id": "durableFunctionsMonitorTreeView", "name": "Durable Functions" } ] }, "commands": [ { "command": "extension.durableFunctionsMonitor", "title": "Durable Functions Monitor" }, { "command": "extension.durableFunctionsMonitorPurgeHistory", "title": "Durable Functions Monitor: Purge History..." }, { "command": "extension.durableFunctionsMonitorCleanEntityStorage", "title": "Durable Functions Monitor: Clean Entity Storage..." }, { "command": "extension.durableFunctionsMonitorGotoInstanceId", "title": "Durable Functions Monitor: Go to instanceId..." }, { "command": "extension.durableFunctionsMonitorVisualizeAsGraph", "title": "Visualize Functions as a Graph..." }, { "command": "durableFunctionsMonitorTreeView.attachToTaskHub", "title": "Attach" }, { "command": "durableFunctionsMonitorTreeView.detachFromTaskHub", "title": "Detach" }, { "command": "durableFunctionsMonitorTreeView.openInstancesInStorageExplorer", "title": "Open *Instances table in Storage Explorer" }, { "command": "durableFunctionsMonitorTreeView.openHistoryInStorageExplorer", "title": "Open *History table in Storage Explorer" }, { "command": "durableFunctionsMonitorTreeView.deleteTaskHub", "title": "Delete Task Hub..." }, { "command": "durableFunctionsMonitorTreeView.refresh", "title": "Refresh", "icon": { "light": "resources/light/refresh.svg", "dark": "resources/dark/refresh.svg" } }, { "command": "durableFunctionsMonitorTreeView.attachToAnotherTaskHub", "title": "Attach to Task Hub...", "icon": { "light": "resources/light/plug.svg", "dark": "resources/dark/plug.svg" } }, { "command": "durableFunctionsMonitorTreeView.detachFromAllTaskHubs", "title": "Detach from all Task Hubs...", "icon": { "light": "resources/light/unplug.svg", "dark": "resources/dark/unplug.svg" } }, { "command": "durableFunctionsMonitorTreeView.purgeHistory", "title": "Purge History..." }, { "command": "durableFunctionsMonitorTreeView.cleanEntityStorage", "title": "Clean Entity Storage..." }, { "command": "durableFunctionsMonitorTreeView.gotoInstanceId", "title": "Go to instanceId..." }, { "command": "durableFunctionsMonitorTreeView.startNewInstance", "title": "Start New Orchestration Instance..." } ], "menus": { "explorer/context": [ { "command": "extension.durableFunctionsMonitor", "when": "resourceFilename == host.json", "group": "DurableFunctionMonitorGroup@1" }, { "command": "extension.durableFunctionsMonitorPurgeHistory", "when": "resourceFilename == host.json", "group": "DurableFunctionMonitorGroup@2" }, { "command": "extension.durableFunctionsMonitorCleanEntityStorage", "when": "resourceFilename == host.json", "group": "DurableFunctionMonitorGroup@3" }, { "command": "extension.durableFunctionsMonitorGotoInstanceId", "when": "resourceFilename == host.json", "group": "DurableFunctionMonitorGroup@4" }, { "command": "extension.durableFunctionsMonitorVisualizeAsGraph", "when": "resourceFilename == host.json", "group": "DurableFunctionMonitorGroup@5" } ], "view/title": [ { "command": "durableFunctionsMonitorTreeView.refresh", "when": "view == durableFunctionsMonitorTreeView", "group": "navigation@1" }, { "command": "durableFunctionsMonitorTreeView.detachFromAllTaskHubs", "when": "view == durableFunctionsMonitorTreeView", "group": "navigation@2" }, { "command": "durableFunctionsMonitorTreeView.attachToAnotherTaskHub", "when": "view == durableFunctionsMonitorTreeView", "group": "navigation@3" } ], "view/item/context": [ { "command": "durableFunctionsMonitorTreeView.gotoInstanceId", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached", "group": "2_purge_history@3" }, { "command": "durableFunctionsMonitorTreeView.cleanEntityStorage", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached", "group": "2_purge_history@2" }, { "command": "durableFunctionsMonitorTreeView.purgeHistory", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached", "group": "2_purge_history@1" }, { "command": "durableFunctionsMonitorTreeView.startNewInstance", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached", "group": "2_purge_history@0" }, { "command": "durableFunctionsMonitorTreeView.deleteTaskHub", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached", "group": "3_delete_task_hub@1" }, { "command": "durableFunctionsMonitorTreeView.attachToTaskHub", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-detached", "group": "1_attach_detach@1" }, { "command": "durableFunctionsMonitorTreeView.detachFromTaskHub", "when": "view == durableFunctionsMonitorTreeView && viewItem == storageAccount-attached" }, { "command": "durableFunctionsMonitorTreeView.openInstancesInStorageExplorer", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached || viewItem == taskHub-detached", "group": "4_storage_explorer@1" }, { "command": "durableFunctionsMonitorTreeView.openHistoryInStorageExplorer", "when": "view == durableFunctionsMonitorTreeView && viewItem == taskHub-attached || viewItem == taskHub-detached", "group": "4_storage_explorer@2" } ], "commandPalette": [ { "command": "durableFunctionsMonitorTreeView.openInstancesInStorageExplorer", "when": "never" }, { "command": "durableFunctionsMonitorTreeView.openHistoryInStorageExplorer", "when": "never" } ] }, "configuration": { "title": "Durable Functions Monitor", "properties": { "durableFunctionsMonitor.backendBaseUrl": { "type": "string", "default": "http://localhost:{portNr}/a/p/i", "description": "URL the backend(s) to be started on. You might want e.g. to change 'localhost' to '127.0.0.1', if you're observing firewall issues. Also it is possible to lock the port number here, if needed (by default it is automatically chosen from the range 37072-38000)." }, "durableFunctionsMonitor.backendVersionToUse": { "type": "string", "enum": [ "Default", ".Net Core 3.1", ".Net Core 2.1" ], "default": "Default", "description": "Choose which backend binaries to use when starting a backend. Currently 'Default' backend targets .Net Core 2.1, but you can try other ones, if 'Default' doesn't work for you." }, "durableFunctionsMonitor.customPathToBackendBinaries": { "type": "string", "description": "Put local path to a custom backend implementation to use. Overrides 'Backend Version to Use' when set." }, "durableFunctionsMonitor.backendTimeoutInSeconds": { "type": "number", "default": "60", "description": "Number of seconds to wait for the backend to start." }, "durableFunctionsMonitor.storageEmulatorConnectionString": { "type": "string", "default": "AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;DefaultEndpointsProtocol=http;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;", "description": "Connection String to talk to local Storage Emulator. The AccountKey here is a well-known AccountKey. Customize endpoint URLs when needed." }, "durableFunctionsMonitor.enableLogging": { "type": "boolean", "default": false, "description": "Enable extensive logging and output logs into 'Durable Functions Monitor' output channel" }, "durableFunctionsMonitor.showTimeAs": { "type": "string", "default": "UTC", "enum": [ "UTC", "Local" ], "description": "In which time zone time values should be displayed" }, "durableFunctionsMonitor.showWhenDebugSessionStarts": { "type": "boolean", "default": false, "description": "Show Durable Functions Monitor when you start debugging a Durable Functions project" } } } }, "scripts": { "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "watch": "tsc -watch -p ./", "pretest": "npm run compile", "test": "node ./out/test/runTest.js", "package": "node ./node_modules/vsce/out/vsce package" }, "devDependencies": { "@types/glob": "^7.1.1", "@types/mocha": "^5.2.6", "@types/node": "^10.12.21", "@types/vscode": "^1.39.0", "glob": "^7.1.4", "mocha": "^8.2.0", "tslint": "^5.12.1", "typescript": "^3.3.1", "vsce": "^1.88.0", "vscode-test": "^1.2.0" }, "dependencies": { "@azure/arm-storage": "^15.1.0", "@types/crypto-js": "^3.1.47", "@types/rimraf": "^3.0.0", "rimraf": "^3.0.2", "axios": "^0.21.2", "crypto-js": "^4.0.0", "portscanner": "^2.2.0", "tree-kill": "^1.2.2" }, "extensionDependencies": [ "ms-vscode.azure-account" ] } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/BackendProcess.ts ================================================ const portscanner = require('portscanner'); import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; import * as crypto from 'crypto'; import * as killProcessTree from 'tree-kill'; import axios from 'axios'; import { spawn, spawnSync, ChildProcess } from 'child_process'; import * as CryptoJS from 'crypto-js'; import { ConnStringUtils } from "./ConnStringUtils"; import * as SharedConstants from './SharedConstants'; import { Settings } from './Settings'; // Responsible for running the backend process export class BackendProcess { constructor(private _binariesFolder: string, private _storageConnectionSettings: StorageConnectionSettings, private _removeMyselfFromList: () => void, private _log: (l: string) => void) { } // Underlying Storage Connection Strings get storageConnectionStrings(): string[] { return this._storageConnectionSettings.storageConnStrings; } // Information about the started backend (if it was successfully started) get backendUrl(): string { return this._backendUrl; } // Folder where backend is run from (might be different, if the backend needs to be published first) get binariesFolder(): string { return this._eventualBinariesFolder; } // Kills the pending backend process cleanup(): Promise { this._backendPromise = null; this._backendUrl = ''; if (!this._funcProcess) { return Promise.resolve(); } console.log('Killing func process...'); return new Promise((resolve) => { // The process is a shell. So to stop func.exe, we need to kill the entire process tree. killProcessTree(this._funcProcess!.pid, resolve); this._funcProcess = null; }); } get backendCommunicationNonce(): string { return this._backendCommunicationNonce; } // Ensures that the backend is running (starts it, if needed) and returns its properties getBackend(): Promise { if (!!this._backendPromise) { return this._backendPromise; } this._backendPromise = new Promise((resolve, reject) => { vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: `Starting the backend `, cancellable: true }, (progress, token) => new Promise(stopProgress => { // Starting the backend on a first available port portscanner.findAPortNotInUse(37072, 38000).then((portNr: number) => { const backendUrl = Settings().backendBaseUrl.replace('{portNr}', portNr.toString()); progress.report({ message: backendUrl }); // Now running func.exe in backend folder this.startBackendOnPort(portNr, backendUrl, token) .then(resolve, reject) .finally(() => stopProgress(undefined)); }, (err: any) => { stopProgress(undefined); reject(`Failed to choose port for backend: ${err.message}`); }); })); }); // Allowing the user to try again this._backendPromise.catch(() => { // This call is important, without it a typo in connString would persist until vsCode restart this._removeMyselfFromList(); }); return this._backendPromise; } // Reference to the shell instance running func.exe private _funcProcess: ChildProcess | null = null; // Promise that resolves when the backend is started successfully private _backendPromise: Promise | null = null; // Information about the started backend (if it was successfully started) private _backendUrl: string = ''; // Folder where backend is run from (might be different, if the backend needs to be published first) private _eventualBinariesFolder: string = this._binariesFolder; // A nonce for communicating with the backend private _backendCommunicationNonce = crypto.randomBytes(64).toString('base64'); // Runs the backend Function instance on some port private startBackendOnPort(portNr: number, backendUrl: string, cancelToken: vscode.CancellationToken): Promise { return new Promise((resolve, reject) => { this._log(`Attempting to start the backend from ${this._binariesFolder} on ${backendUrl}...`); if (!fs.existsSync(this._binariesFolder)) { reject(`Couldn't find backend binaries in ${this._binariesFolder}`); return; } // If this is a source code project if (fs.readdirSync(this._binariesFolder).some(fn => fn.toLowerCase().endsWith('.csproj'))) { const publishFolder = path.join(this._binariesFolder, 'publish'); // if it wasn't published yet if (!fs.existsSync(publishFolder)) { // publishing it const publishProcess = spawnSync('dotnet', ['publish', '-o', publishFolder], { cwd: this._binariesFolder, encoding: 'utf8' } ); if (!!publishProcess.stdout) { this._log(publishProcess.stdout.toString()); } if (publishProcess.status !== 0) { const err = 'dotnet publish failed. ' + (!!publishProcess.stderr ? publishProcess.stderr.toString() : `status: ${publishProcess.status}`); this._log(`ERROR: ${err}`); reject(err); return; } } this._eventualBinariesFolder = publishFolder; } // Important to inherit the context from VsCode, so that globally installed tools can be found const env = process.env; env[SharedConstants.NonceEnvironmentVariableName] = this._backendCommunicationNonce; // Also setting AzureWebJobsSecretStorageType to 'files', so that the backend doesn't need Azure Storage env['AzureWebJobsSecretStorageType'] = 'files'; if (this._storageConnectionSettings.isMsSql) { env[SharedConstants.MsSqlConnStringEnvironmentVariableName] = this._storageConnectionSettings.storageConnStrings[0]; // For MSSQL just need to set DFM_HUB_NAME to something, doesn't matter what it is so far env[SharedConstants.HubNameEnvironmentVariableName] = this._storageConnectionSettings.hubName; } else { // Need to unset this, in case it was set previously delete env[SharedConstants.HubNameEnvironmentVariableName]; env['AzureWebJobsStorage'] = this._storageConnectionSettings.storageConnStrings[0]; } this._funcProcess = spawn('func', ['start', '--port', portNr.toString(), '--csharp'], { cwd: this._eventualBinariesFolder, shell: true, env }); this._funcProcess.stdout.on('data', (data) => { const msg = data.toString(); this._log(msg); if (msg.toLowerCase().includes('no valid combination of account information found')) { reject('The provided Storage Connection String and/or Hub Name seem to be invalid.'); } }); this._funcProcess!.stderr.on('data', (data) => { const msg = data.toString(); this._log(`ERROR: ${msg}`); reject(`Func: ${msg}`); }); console.log(`Waiting for ${backendUrl} to respond...`); // Waiting for the backend to be ready const timeoutInSeconds = Settings().backendTimeoutInSeconds; const intervalInMs = 500, numOfTries = timeoutInSeconds * 1000 / intervalInMs; var i = numOfTries; const intervalToken = setInterval(() => { const headers: any = {}; headers[SharedConstants.NonceHeaderName] = this._backendCommunicationNonce; // Pinging the backend and returning its URL when ready axios.get(`${backendUrl}/--${this._storageConnectionSettings.hubName}/about`, { headers }).then(response => { console.log(`The backend is now running on ${backendUrl}`); clearInterval(intervalToken); this._backendUrl = backendUrl; resolve(); }, err => { if (!!err.response && err.response.status === 401) { // This typically happens when mistyping Task Hub name clearInterval(intervalToken); reject(err.message); } }); if (cancelToken.isCancellationRequested) { clearInterval(intervalToken); reject(`Cancelled by the user`); } else if (--i <= 0) { console.log(`Timed out waiting for the backend!`); clearInterval(intervalToken); reject(`No response within ${timeoutInSeconds} seconds. Ensure you have the latest Azure Functions Core Tools installed globally.`); } }, intervalInMs); }); } } export class StorageConnectionSettings { get storageConnStrings(): string[] { return this._connStrings; }; get hubName(): string { return this._hubName; }; get connStringHashKey(): string { return this._connStringHashKey; } get hashKey(): string { return this._hashKey; } get isFromLocalSettingsJson(): boolean { return this._fromLocalSettingsJson; } get isMsSql(): boolean { return !!ConnStringUtils.GetSqlServerName(this._connStrings[0]); } constructor(private _connStrings: string[], private _hubName: string, private _fromLocalSettingsJson: boolean = false) { this._connStringHashKey = StorageConnectionSettings.GetConnStringHashKey(this._connStrings); this._hashKey = this._connStringHashKey + this._hubName.toLowerCase(); } static GetConnStringHashKey(connStrings: string[]): string { const sqlServerName = ConnStringUtils.GetSqlServerName(connStrings[0]); if (!!sqlServerName) { return sqlServerName + ConnStringUtils.GetSqlDatabaseName(connStrings[0]); } return ConnStringUtils.GetTableEndpoint(connStrings[0]).toLowerCase(); } static MaskStorageConnString(connString: string): string { return connString.replace(/AccountKey=[^;]+/gi, 'AccountKey=*****'); } private readonly _connStringHashKey: string; private readonly _hashKey: string; } // Creates the SharedKeyLite signature to query Table Storage REST API, also adds other needed headers export function CreateAuthHeadersForTableStorage(accountName: string, accountKey: string, queryUrl: string): {} { const dateInUtc = new Date().toUTCString(); const signature = CryptoJS.HmacSHA256(`${dateInUtc}\n/${accountName}/${queryUrl}`, CryptoJS.enc.Base64.parse(accountKey)); return { 'Authorization': `SharedKeyLite ${accountName}:${signature.toString(CryptoJS.enc.Base64)}`, 'x-ms-date': dateInUtc, 'x-ms-version': '2015-12-11', 'Accept': 'application/json;odata=nometadata' }; } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/ConnStringUtils.ts ================================================ import { Settings } from './Settings'; export class ConnStringUtils { // Extracts AccountName from Storage Connection String static GetAccountName(connString: string): string { const match = /AccountName=([^;]+)/i.exec(connString); return (!!match && match.length > 0) ? match[1] : ''; } // Extracts AccountKey from Storage Connection String static GetAccountKey(connString: string): string { const match = /AccountKey=([^;]+)/i.exec(connString); return (!!match && match.length > 0) ? match[1] : ''; } // Extracts DefaultEndpointsProtocol from Storage Connection String static GetDefaultEndpointsProtocol(connString: string): string { const match = /DefaultEndpointsProtocol=([^;]+)/i.exec(connString); return (!!match && match.length > 0) ? match[1] : 'https'; } // Extracts TableEndpoint from Storage Connection String static GetTableEndpoint(connString: string): string { const accountName = ConnStringUtils.GetAccountName(connString); if (!accountName) { return ''; } const endpointsProtocol = ConnStringUtils.GetDefaultEndpointsProtocol(connString); const suffixMatch = /EndpointSuffix=([^;]+)/i.exec(connString); if (!!suffixMatch && suffixMatch.length > 0) { return `${endpointsProtocol}://${accountName}.table.${suffixMatch[1]}/`; } const endpointMatch = /TableEndpoint=([^;]+)/i.exec(connString); return (!!endpointMatch && endpointMatch.length > 0) ? endpointMatch[1] : `${endpointsProtocol}://${accountName}.table.core.windows.net/`; } // Replaces 'UseDevelopmentStorage=true' with full Storage Emulator connection string static ExpandEmulatorShortcutIfNeeded(connString: string): string { if (connString.includes('UseDevelopmentStorage=true')) { return Settings().storageEmulatorConnectionString; } return connString; } // Extracts server name from MSSQL Connection String static GetSqlServerName(connString: string): string { const match = /(Data Source|Server)=([^;]+)/i.exec(connString); return (!!match && match.length > 1) ? match[2] : ''; } // Extracts database name from MSSQL Connection String static GetSqlDatabaseName(connString: string): string { const match = /Initial Catalog=([^;]+)/i.exec(connString); return (!!match && match.length > 0) ? match[1] : ''; } // Extracts human-readable storage name from a bunch of connection strings static GetStorageName(connStrings: string[]): string { const serverName = this.GetSqlServerName(connStrings[0]); if (!serverName) { return this.GetAccountName(connStrings[0]); } const dbName = this.GetSqlDatabaseName(connStrings[0]); return serverName + (!dbName ? '' : '/' + dbName); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/FunctionGraphList.ts ================================================ import * as vscode from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; import * as rimraf from 'rimraf'; import { FunctionGraphView } from "./FunctionGraphView"; import { traverseFunctionProject } from './az-func-as-a-graph/traverseFunctionProject'; import { FunctionsMap, ProxiesMap } from './az-func-as-a-graph/FunctionsMap'; export type TraversalResult = { functions: FunctionsMap; proxies: ProxiesMap; }; // Aggregates Function Graph views export class FunctionGraphList { constructor(private _context: vscode.ExtensionContext, logChannel?: vscode.OutputChannel) { this._log = !logChannel ? (s: any) => { } : (s: any) => logChannel!.append(s); } traverseFunctions(projectPath: string): Promise { const isCurrentProject = projectPath === vscode.workspace.rootPath; if (isCurrentProject && !!this._traversalResult) { return Promise.resolve(this._traversalResult); } return traverseFunctionProject(projectPath, this._log).then(result => { this._tempFolders.push(...result.tempFolders); // Caching current project's functions if (isCurrentProject) { this._traversalResult = { functions: result.functions, proxies: result.proxies }; // And cleanup the cache on any change to the file system if (!!this._watcher) { this._watcher.dispose(); } this._watcher = vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(projectPath, '**/*')); const cacheCleanupRoutine = () => { this._traversalResult = undefined; if (!!this._watcher) { this._watcher.dispose(); this._watcher = undefined; } } this._watcher.onDidCreate(cacheCleanupRoutine); this._watcher.onDidDelete(cacheCleanupRoutine); this._watcher.onDidChange(cacheCleanupRoutine); } return { functions: result.functions, proxies: result.proxies }; }); } visualize(item?: vscode.Uri): void { // If host.json was clicked if (!!item && item.scheme === 'file' && item.fsPath.toLowerCase().endsWith('host.json')) { this.visualizeProjectPath(path.dirname(item.fsPath)); return; } var defaultProjectPath = ''; const ws = vscode.workspace; if (!!ws.rootPath && fs.existsSync(path.join(ws.rootPath, 'host.json'))) { defaultProjectPath = ws.rootPath; } vscode.window.showInputBox({ value: defaultProjectPath, prompt: 'Local path or link to GitHub repo' }).then(projectPath => { if (!!projectPath) { this.visualizeProjectPath(projectPath); } }); } visualizeProjectPath(projectPath: string): void { this._views.push(new FunctionGraphView(this._context, projectPath, this)); } // Closes all views cleanup(): void { if (!!this._watcher) { this._watcher.dispose(); this._watcher = undefined; } for (const view of this._views) { view.cleanup(); } for (var tempFolder of this._tempFolders) { this._log(`Removing ${tempFolder}`); try { rimraf.sync(tempFolder) } catch (err) { this._log(`Failed to remove ${tempFolder}: ${err.message}`); } } } private _views: FunctionGraphView[] = []; private _traversalResult?: TraversalResult; private _watcher?: vscode.FileSystemWatcher; private _tempFolders: string[] = []; private _log: (line: string) => void; } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/FunctionGraphView.ts ================================================ import * as vscode from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; import { MonitorView } from './MonitorView'; import { FunctionGraphList, TraversalResult } from './FunctionGraphList'; // Represents the function graph view export class FunctionGraphView { constructor(private _context: vscode.ExtensionContext, private _functionProjectPath: string, private _functionGraphList: FunctionGraphList) { this._staticsFolder = path.join(this._context.extensionPath, 'backend', 'DfmStatics'); this._webViewPanel = this.showWebView(); } // Closes this web view cleanup(): void { if (!!this._webViewPanel) { this._webViewPanel.dispose(); } } // Path to html statics private _staticsFolder: string; // Reference to the already opened WebView with the main page private _webViewPanel: vscode.WebviewPanel | null = null; // Functions and proxies currently shown private _traversalResult?: TraversalResult; private static readonly ViewType = 'durableFunctionsMonitorFunctionGraph'; // Opens a WebView with function graph page in it private showWebView(): vscode.WebviewPanel { const title = `Functions Graph (${this._functionProjectPath})`; const panel = vscode.window.createWebviewPanel( FunctionGraphView.ViewType, title, vscode.ViewColumn.One, { retainContextWhenHidden: true, enableScripts: true, localResourceRoots: [vscode.Uri.file(this._staticsFolder)] } ); var html = fs.readFileSync(path.join(this._staticsFolder, 'index.html'), 'utf8'); html = MonitorView.fixLinksToStatics(html, this._staticsFolder, panel.webview); html = this.embedTheme(html); html = this.embedParams(html, !!this._functionProjectPath); panel.webview.html = html; // handle events from WebView panel.webview.onDidReceiveMessage(request => { switch (request.method) { case 'SaveAs': // Just to be extra sure... if (!MonitorView.looksLikeSvg(request.data)) { vscode.window.showErrorMessage(`Invalid data format. Save failed.`); return; } // Saving some file to local hard drive vscode.window.showSaveDialog({ filters: { 'SVG Images': ['svg'] } }).then(filePath => { if (!filePath || !filePath.fsPath) { return; } fs.writeFile(filePath!.fsPath, request.data, err => { if (!err) { vscode.window.showInformationMessage(`Saved to ${filePath!.fsPath}`); } else { vscode.window.showErrorMessage(`Failed to save. ${err}`); } }); }); return; case 'SaveFunctionGraphAsJson': if (!this._traversalResult) { return; } // Saving some file to local hard drive vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file('dfm-func-map.json'), filters: { 'JSON': ['json'] } }).then(filePath => { if (!filePath || !filePath.fsPath) { return; } fs.writeFile(filePath!.fsPath, JSON.stringify(this._traversalResult, null, 3), err => { if (!err) { vscode.window.showInformationMessage(`Saved to ${filePath!.fsPath}`); } else { vscode.window.showErrorMessage(`Failed to save. ${err}`); } }); }); return; case 'GotoFunctionCode': if (!this._traversalResult) { return; } const functionName = request.url; var functionOrProxy: any = null; if (functionName.startsWith('proxy.')) { functionOrProxy = this._traversalResult.proxies[functionName.substr(6)]; } else { functionOrProxy = this._traversalResult.functions[functionName]; } vscode.window.showTextDocument(vscode.Uri.file(functionOrProxy.filePath)).then(ed => { const pos = ed.document.positionAt(!!functionOrProxy.pos ? functionOrProxy.pos : 0); ed.selection = new vscode.Selection(pos, pos); ed.revealRange(new vscode.Range(pos, pos)); }); return; } // Intercepting request for Function Map if (request.method === "GET" && request.url === '/function-map') { if (!this._functionProjectPath) { return; } const requestId = request.id; this._functionGraphList.traverseFunctions(this._functionProjectPath).then(result => { this._traversalResult = result; panel.webview.postMessage({ id: requestId, data: { functions: result.functions, proxies: result.proxies } }); }, err => { // err might fail to serialize here, so passing err.message only panel.webview.postMessage({ id: requestId, err: { message: err.message } }); }); } }, undefined, this._context.subscriptions); return panel; } // Embeds the current color theme private embedTheme(html: string): string { if ([2, 3].includes((vscode.window as any).activeColorTheme.kind)) { return html.replace('', ''); } return html; } // Embeds some other parameters in the HTML served private embedParams(html: string, isFunctionGraphAvailable: boolean): string { return html .replace( ``, `` ) .replace( ``, `` ); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/MonitorTreeDataProvider.ts ================================================ import * as vscode from 'vscode'; import { MonitorView } from "./MonitorView"; import { MonitorViewList } from "./MonitorViewList"; import { StorageAccountTreeItem } from './StorageAccountTreeItem'; import { StorageAccountTreeItems } from './StorageAccountTreeItems'; import { TaskHubTreeItem } from './TaskHubTreeItem'; import { SubscriptionTreeItems } from './SubscriptionTreeItems'; import { SubscriptionTreeItem } from './SubscriptionTreeItem'; import { FunctionGraphList } from './FunctionGraphList'; import { Settings, UpdateSetting } from './Settings'; import { StorageConnectionSettings } from './BackendProcess'; // Root object in the hierarchy. Also serves data for the TreeView. export class MonitorTreeDataProvider implements vscode.TreeDataProvider { constructor(private _context: vscode.ExtensionContext, functionGraphList: FunctionGraphList, logChannel?: vscode.OutputChannel) { this._monitorViews = new MonitorViewList(this._context, functionGraphList, () => this._onDidChangeTreeData.fire(), !logChannel ? () => { } : (l) => logChannel.append(l)); const resourcesFolderPath = this._context.asAbsolutePath('resources'); this._storageAccounts = new StorageAccountTreeItems(resourcesFolderPath, this._monitorViews); // Using Azure Account extension to connect to Azure, get subscriptions etc. const azureAccountExtension = vscode.extensions.getExtension('ms-vscode.azure-account'); // Typings for azureAccount are here: https://github.com/microsoft/vscode-azure-account/blob/master/src/azure-account.api.d.ts const azureAccount = !!azureAccountExtension ? azureAccountExtension.exports : undefined; if (!!azureAccount && !!azureAccount.onFiltersChanged) { // When user changes their list of filtered subscriptions (or just relogins to Azure)... this._context.subscriptions.push(azureAccount.onFiltersChanged(() => this.refresh())); } this._subscriptions = new SubscriptionTreeItems( this._context, azureAccount, this._storageAccounts, () => this._onDidChangeTreeData.fire(), resourcesFolderPath, !logChannel ? () => { } : (l) => logChannel.appendLine(l) ); // Also trying to parse current project's files and create a Task Hub node for them const connSettingsFromCurrentProject = this._monitorViews.getStorageConnectionSettingsFromCurrentProject(); if (!!connSettingsFromCurrentProject) { this._storageAccounts.addNodeForConnectionSettings(connSettingsFromCurrentProject); } } // Does nothing, actually getTreeItem(element: vscode.TreeItem): vscode.TreeItem { return element; } // Returns the children of `element` or root if no element is passed. getChildren(element?: vscode.TreeItem): Promise { if (!element) { return this._subscriptions.getNonEmptyNodes(); } const subscriptionNode = element as SubscriptionTreeItem; if (subscriptionNode.isSubscriptionTreeItem) { const storageAccountNodes = subscriptionNode.storageAccountNodes; // Initially collapsing those storage nodes, that don't have attached TaskHubs at the moment for (const n of storageAccountNodes) { if (!n.isAttached) { n.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed; } } return Promise.resolve(storageAccountNodes); } // If this is a storage account tree item const item = element as StorageAccountTreeItem; if (this._storageAccounts.nodes.includes(item)) { return Promise.resolve(item.childItems); } return Promise.resolve([]); } // Handles 'Attach' context menu item or a click on a tree node attachToTaskHub(taskHubItem: TaskHubTreeItem | null, messageToWebView: any = undefined): void { if (!!this._inProgress) { console.log(`Another operation already in progress...`); return; } // This could happen, if the command is executed via Command Palette (and not via menu) if (!taskHubItem) { this.createOrActivateMonitorView(false, messageToWebView); return; } this._inProgress = true; const monitorView = this._monitorViews.getOrCreateFromStorageConnectionSettings(taskHubItem.storageConnectionSettings); monitorView.show(messageToWebView).then(() => { this._onDidChangeTreeData.fire(); this._inProgress = false; }, (err: any) => { // .finally() doesn't work here - vscode.window.showErrorMessage() blocks it until user // closes the error message. As a result, _inProgress remains true until then, which blocks all commands this._inProgress = false; vscode.window.showErrorMessage(!err.message ? err : err.message); }); } // Triggers when F5 is being hit handleOnDebugSessionStarted() { if (!!this._monitorViews.isAnyMonitorViewVisible()) { return; } const DfmDoNotAskUponDebugSession = 'DfmDoNotAskUponDebugSession'; const doNotAsk = this._context.globalState.get(DfmDoNotAskUponDebugSession, false); if (!Settings().showWhenDebugSessionStarts && !!doNotAsk) { return; } const defaultTaskHubName = 'TestHubName'; const curConnSettings = this._monitorViews.getStorageConnectionSettingsFromCurrentProject(defaultTaskHubName); if (!curConnSettings) { return; } if (!Settings().showWhenDebugSessionStarts) { const prompt = `Do you want Durable Functions Monitor to be automatically shown when you start debugging a Durable Functions project? You can always change this preference via Settings.`; vscode.window.showWarningMessage(prompt, `Yes`, `No, and don't ask again`).then(answer => { if (answer === `No, and don't ask again`) { UpdateSetting('showWhenDebugSessionStarts', false); this._context.globalState.update(DfmDoNotAskUponDebugSession, true); } else if (answer === `Yes`) { UpdateSetting('showWhenDebugSessionStarts', true); this.showUponDebugSession( curConnSettings.hubName !== defaultTaskHubName ? curConnSettings : undefined ); } }); } else { this.showUponDebugSession( curConnSettings.hubName !== defaultTaskHubName ? curConnSettings : undefined ); } } // Handles 'Detach' context menu item detachFromTaskHub(storageAccountItem: StorageAccountTreeItem) { if (!storageAccountItem) { vscode.window.showInformationMessage('This command is only available via context menu'); return; } if (!!this._inProgress) { console.log(`Another operation already in progress...`); return; } this._inProgress = true; this._monitorViews.detachBackend(storageAccountItem.storageConnStrings).then(() => { this._onDidChangeTreeData.fire(); this._inProgress = false; }, err => { this._inProgress = false; vscode.window.showErrorMessage(`Failed to detach from Task Hub. ${err}`); }); } // Handles 'Delete Task Hub' context menu item deleteTaskHub(taskHubItem: TaskHubTreeItem) { if (!taskHubItem) { vscode.window.showInformationMessage('This command is only available via context menu'); return; } if (!!this._inProgress) { console.log(`Another operation already in progress...`); return; } const monitorView = this._monitorViews.getOrCreateFromStorageConnectionSettings(taskHubItem.storageConnectionSettings); if (!monitorView) { console.log(`Tried to delete a detached Task Hub`); return; } const prompt = `This will permanently delete all Azure Storage resources used by '${taskHubItem.label}' orchestration service. There should be no running Function instances for this Task Hub present. Are you sure you want to proceed?`; vscode.window.showWarningMessage(prompt, 'Yes', 'No').then(answer => { if (answer === 'Yes') { this._inProgress = true; monitorView.deleteTaskHub().then(() => { taskHubItem.removeFromTree(); this._onDidChangeTreeData.fire(); this._inProgress = false; }, (err) => { this._inProgress = false; vscode.window.showErrorMessage(`Failed to delete Task Hub. ${err}`); }); } }); } // Handles 'Open in Storage Explorer' context menu item async openTableInStorageExplorer(taskHubItem: TaskHubTreeItem, table: 'Instances' | 'History') { // Using Azure Storage extension for this var storageExt = vscode.extensions.getExtension('ms-azuretools.vscode-azurestorage'); if (!storageExt) { vscode.window.showErrorMessage(`For this to work, please, install [Azure Storage](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestorage) extension.`); return; } try { if (!storageExt.isActive) { await storageExt.activate(); } await vscode.commands.executeCommand('azureStorage.openTable', { root: { storageAccountId: taskHubItem.storageAccountId, subscriptionId: taskHubItem.subscriptionId }, tableName: taskHubItem.hubName + table }); } catch (err) { vscode.window.showErrorMessage(`Failed to execute command. ${err}`); } } // Handles 'Attach' button attachToAnotherTaskHub() { this.createOrActivateMonitorView(true); } // Handles 'Refresh' button refresh() { this._subscriptions.cleanup(); this._onDidChangeTreeData.fire(); } // Handles 'Detach from all Task Hubs' button detachFromAllTaskHubs() { if (!!this._inProgress) { console.log(`Another operation already in progress...`); return; } this._inProgress = true; this.cleanup().catch(err => { vscode.window.showErrorMessage(`Failed to detach from Task Hub. ${err}`); }).finally(() => { this._onDidChangeTreeData.fire(); this._inProgress = false; }); } // Handles 'Go to instanceId...' context menu item gotoInstanceId(taskHubItem: TaskHubTreeItem | null) { // Trying to get a running backend instance. // If the relevant MonitorView is currently not visible, don't want to show it - that's why all the custom logic here. var monitorView = !taskHubItem ? this._monitorViews.firstOrDefault() : this._monitorViews.getOrCreateFromStorageConnectionSettings(taskHubItem.storageConnectionSettings); if (!!monitorView) { monitorView.gotoInstanceId(); } else { this.createOrActivateMonitorView(false).then(view => { if (!!view) { // Not sure why this timeout here is needed, but without it the quickPick isn't shown setTimeout(() => { view.gotoInstanceId(); }, 1000); } }); } } // Stops all backend processes and closes all views cleanup(): Promise { return this._monitorViews.cleanup(); } private _inProgress: boolean = false; private _monitorViews: MonitorViewList; private _storageAccounts: StorageAccountTreeItems; private _subscriptions: SubscriptionTreeItems; private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; // Shows or makes active the main view private createOrActivateMonitorView(alwaysCreateNew: boolean, messageToWebView: any = undefined): Promise { if (!!this._inProgress) { console.log(`Another operation already in progress...`); return Promise.resolve(null); } return new Promise((resolve, reject) => { this._monitorViews.getOrAdd(alwaysCreateNew).then(monitorView => { this._inProgress = true; monitorView.show(messageToWebView).then(() => { this._storageAccounts.addNodeForMonitorView(monitorView); this._onDidChangeTreeData.fire(); this._inProgress = false; resolve(monitorView); }, (err) => { // .finally() doesn't work here - vscode.window.showErrorMessage() blocks it until user // closes the error message. As a result, _inProgress remains true until then, which blocks all commands this._inProgress = false; vscode.window.showErrorMessage(!err.message ? err : err.message); }); }, vscode.window.showErrorMessage); }); } // Shows the main view upon a debug session private showUponDebugSession(connSettingsFromCurrentProject?: StorageConnectionSettings) { if (!!this._inProgress) { console.log(`Another operation already in progress...`); return; } this._monitorViews.showUponDebugSession(connSettingsFromCurrentProject).then(monitorView => { this._inProgress = true; monitorView.show().then(() => { this._storageAccounts.addNodeForMonitorView(monitorView); this._onDidChangeTreeData.fire(); this._inProgress = false; }, (err) => { // .finally() doesn't work here - vscode.window.showErrorMessage() blocks it until user // closes the error message. As a result, _inProgress remains true until then, which blocks all commands this._inProgress = false; vscode.window.showErrorMessage(!err.message ? err : err.message); }); }, vscode.window.showErrorMessage); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/MonitorView.ts ================================================ import * as vscode from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; import axios from 'axios'; import * as SharedConstants from './SharedConstants'; import { BackendProcess, StorageConnectionSettings } from './BackendProcess'; import { ConnStringUtils } from './ConnStringUtils'; import { Settings } from './Settings'; import { FunctionGraphList } from './FunctionGraphList'; // Represents the main view, along with all detailed views export class MonitorView { // Storage Connection settings (connString and hubName) of this Monitor View get storageConnectionSettings(): StorageConnectionSettings { return new StorageConnectionSettings(this._backend.storageConnectionStrings, this._hubName); } get isVisible(): boolean { return !!this._webViewPanel; } // Path to html statics get staticsFolder(): string { return path.join(this._backend.binariesFolder, 'DfmStatics'); } constructor(private _context: vscode.ExtensionContext, private _backend: BackendProcess, private _hubName: string, private _functionGraphList: FunctionGraphList, private _onViewStatusChanged: () => void) { const ws = vscode.workspace; if (!!ws.rootPath && fs.existsSync(path.join(ws.rootPath, 'host.json'))) { this._functionProjectPath = ws.rootPath; } } // Closes all WebViews cleanup(): void { for (var childPanel of this._childWebViewPanels) { childPanel.dispose(); } this._childWebViewPanels = []; if (!!this._webViewPanel) { this._webViewPanel.dispose(); } } // Shows or makes active the main view show(messageToWebView: any = undefined): Promise { if (!!this._webViewPanel) { // Didn't find a way to check whether the panel still exists. // So just have to catch a "panel disposed" exception here. try { this._webViewPanel.reveal(); if (!!messageToWebView) { // BUG: WebView might actually appear in 3 states: disposed, visible and inactive. // Didn't find the way to distinguish the last two. // But when it is inactive, it will be activated with above reveal() method, // and then miss this message we're sending here. No good solution for this problem so far... this._webViewPanel.webview.postMessage(messageToWebView); } return Promise.resolve(); } catch (err) { this._webViewPanel = null; } } return new Promise((resolve, reject) => { this._backend.getBackend().then(() => { try { this._webViewPanel = this.showWebView('', messageToWebView); this._webViewPanel.onDidDispose(() => { this._webViewPanel = null; this._onViewStatusChanged(); }); resolve(); } catch (err) { reject(`WebView failed: ${err}`); } }, reject); }); } // Permanently deletes all underlying Storage resources for this Task Hub deleteTaskHub(): Promise { if (!this._backend.backendUrl) { return Promise.reject('Backend is not started'); } const headers: any = {}; headers[SharedConstants.NonceHeaderName] = this._backend.backendCommunicationNonce; return new Promise((resolve, reject) => { const url = `${this._backend.backendUrl}/--${this._hubName}/delete-task-hub`; axios.post(url, {}, { headers }).then(() => { this.cleanup(); resolve(); }, err => reject(err.message)); }); } // Handles 'Goto instanceId...' context menu item gotoInstanceId() { this.askForInstanceId().then(instanceId => { // Opening another WebView this._childWebViewPanels.push(this.showWebView(instanceId)); }); } // Converts script and CSS links static fixLinksToStatics(originalHtml: string, pathToBackend: string, webView: vscode.Webview): string { var resultHtml: string = originalHtml; const regex = / (href|src)="\/([0-9a-z.\/]+)"/ig; var match: RegExpExecArray | null; while (match = regex.exec(originalHtml)) { const relativePath = match[2]; const localPath = path.join(pathToBackend, relativePath); const newPath = webView.asWebviewUri(vscode.Uri.file(localPath)).toString(); resultHtml = resultHtml.replace(`/${relativePath}`, newPath); } return resultHtml; } // Validates incoming SVG, just to be extra sure... static looksLikeSvg(data: string): boolean { return data.startsWith('') && !data.includes(' { switch (request.method) { case 'IAmReady': // Sending an initial message (if any), when the webView is ready if (!!messageToWebView) { panel.webview.postMessage(messageToWebView); messageToWebView = undefined; } return; case 'PersistState': // Persisting state values const webViewState = this._context.globalState.get(MonitorView.GlobalStateName, {}) as any; webViewState[request.key] = request.data; this._context.globalState.update(MonitorView.GlobalStateName, webViewState); return; case 'OpenInNewWindow': // Opening another WebView this._childWebViewPanels.push(this.showWebView(request.url)); return; case 'SaveAs': // Just to be extra sure... if (!MonitorView.looksLikeSvg(request.data)) { vscode.window.showErrorMessage(`Invalid data format. Save failed.`); return; } // Saving some file to local hard drive vscode.window.showSaveDialog({ filters: { 'SVG Images': ['svg'] } }).then(filePath => { if (!filePath || !filePath.fsPath) { return; } fs.writeFile(filePath!.fsPath, request.data, err => { if (!err) { vscode.window.showInformationMessage(`Saved to ${filePath!.fsPath}`); } else { vscode.window.showErrorMessage(`Failed to save. ${err}`); } }); }); return; case 'GotoFunctionCode': const func = this._functionsAndProxies[request.url]; if (!!func && !!func.filePath) { vscode.window.showTextDocument(vscode.Uri.file(func.filePath)).then(ed => { const pos = ed.document.positionAt(!!func.pos ? func.pos : 0); ed.selection = new vscode.Selection(pos, pos); ed.revealRange(new vscode.Range(pos, pos)); }); } return; case 'VisualizeFunctionsAsAGraph': const ws = vscode.workspace; if (!!ws.rootPath && fs.existsSync(path.join(ws.rootPath, 'host.json'))) { this._functionGraphList.visualizeProjectPath(ws.rootPath); } return; } // Intercepting request for Function Map if (request.method === "GET" && request.url === '/function-map') { if (!this._functionProjectPath) { return; } const requestId = request.id; this._functionGraphList.traverseFunctions(this._functionProjectPath).then(result => { this._functionsAndProxies = {}; for (const name in result.functions) { this._functionsAndProxies[name] = result.functions[name]; } for (const name in result.proxies) { this._functionsAndProxies['proxy.' + name] = result.proxies[name]; } panel.webview.postMessage({ id: requestId, data: { functions: result.functions, proxies: result.proxies } }); }, err => { // err might fail to serialize here, so passing err.message only panel.webview.postMessage({ id: requestId, err: { message: err.message } }); }); return; } // Then it's just a propagated HTTP request const requestId = request.id; const headers: any = {}; headers[SharedConstants.NonceHeaderName] = this._backend.backendCommunicationNonce; // Workaround for https://github.com/Azure/azure-functions-durable-extension/issues/1926 var hubName = this._hubName; if (hubName === 'TestHubName' && request.method === 'POST' && request.url.match(/\/(orchestrations|restart)$/i)) { // Turning task hub name into lower case, this allows to bypass function name validation hubName = 'testhubname'; } axios.request({ url: `${this._backend.backendUrl}/--${hubName}${request.url}`, method: request.method, data: request.data, headers }).then(response => { panel.webview.postMessage({ id: requestId, data: response.data }); }, err => { panel.webview.postMessage({ id: requestId, err: { message: err.message, response: { data: !err.response ? undefined : err.response.data } } }); }); }, undefined, this._context.subscriptions); return panel; } // Embeds the current color theme private embedThemeAndSettings(html: string): string { const theme = [2, 3].includes((vscode.window as any).activeColorTheme.kind) ? 'dark' : 'light'; return html.replace('', ``); } // Embeds the orchestrationId in the HTML served private embedOrchestrationIdAndState(html: string, orchestrationId: string, state: any): string { return html.replace( ``, `` ); } // Embeds the isFunctionGraphAvailable flag in the HTML served private embedIsFunctionGraphAvailable(html: string, isFunctionGraphAvailable: boolean): string { if (!isFunctionGraphAvailable) { return html; } return html.replace( ``, `` ); } private askForInstanceId(): Promise { return new Promise((resolve, reject) => { var instanceId = ''; const instanceIdPick = vscode.window.createQuickPick(); instanceIdPick.onDidHide(() => instanceIdPick.dispose()); instanceIdPick.onDidChangeSelection(items => { if (!!items && !!items.length) { instanceId = items[0].label; } }); // Still allowing to type free text instanceIdPick.onDidChangeValue(value => { instanceId = value; // Loading suggestions from backend if (instanceId.length > 1) { this.getInstanceIdSuggestions(instanceId).then(suggestions => { instanceIdPick.items = suggestions.map(id => { return { label: id }; }); }); } else { instanceIdPick.items = []; } }); instanceIdPick.onDidAccept(() => { if (!!instanceId) { resolve(instanceId); } instanceIdPick.hide(); }); instanceIdPick.title = `(${this.taskHubFullTitle}) instanceId to go to:`; instanceIdPick.show(); // If nothing is selected, leaving the promise unresolved, so nothing more happens }); } // Human-readable TaskHub title in form '[storage-account]/[task-hub]' private get taskHubFullTitle(): string { return `${ConnStringUtils.GetStorageName(this._backend.storageConnectionStrings)}/${this._hubName}`; } // Returns orchestration/entity instanceIds that start with prefix private getInstanceIdSuggestions(prefix: string): Promise { const headers: any = {}; headers[SharedConstants.NonceHeaderName] = this._backend.backendCommunicationNonce; return axios.get(`${this._backend.backendUrl}/--${this._hubName}/id-suggestions(prefix='${prefix}')`, { headers }) .then(response => { return response.data as string[]; }); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/MonitorViewList.ts ================================================ import * as vscode from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; import axios from 'axios'; import { ConnStringUtils } from "./ConnStringUtils"; import { MonitorView } from "./MonitorView"; import { BackendProcess, StorageConnectionSettings, CreateAuthHeadersForTableStorage } from './BackendProcess'; import { Settings } from './Settings'; import { FunctionGraphList } from './FunctionGraphList'; // Represents all MonitorViews created so far export class MonitorViewList { constructor(private _context: vscode.ExtensionContext, private _functionGraphList: FunctionGraphList, private _onViewStatusChanged: () => void, private _log: (line: string) => void) { } isAnyMonitorViewVisible(): boolean { return Object.keys(this._monitorViews).some(k => !!this._monitorViews[k] && this._monitorViews[k].isVisible); } isMonitorViewVisible(connSettings: StorageConnectionSettings): boolean { const monitorView = this._monitorViews[connSettings.hashKey]; return !!monitorView && monitorView.isVisible; } // Creates a new MonitorView with provided connection settings getOrCreateFromStorageConnectionSettings(connSettings: StorageConnectionSettings): MonitorView { var monitorView = this._monitorViews[connSettings.hashKey]; if (!!monitorView) { return monitorView; } monitorView = new MonitorView(this._context, this.getOrAddBackend(connSettings), connSettings.hubName, this._functionGraphList, this._onViewStatusChanged); this._monitorViews[connSettings.hashKey] = monitorView; return monitorView; } // Gets an existing (first in the list) MonitorView, // or initializes a new one by asking user for connection settings getOrAdd(alwaysCreateNew: boolean): Promise { const keys = Object.keys(this._monitorViews); if (!alwaysCreateNew && keys.length > 0) { return Promise.resolve(this._monitorViews[keys[0]]); } return new Promise((resolve, reject) => { this.askForStorageConnectionSettings().then(connSettings => { const monitorView = this.getOrCreateFromStorageConnectionSettings(connSettings); resolve(monitorView); }, reject); }); } firstOrDefault(): MonitorView | null { const keys = Object.keys(this._monitorViews); if (keys.length <= 0) { return null; } return this._monitorViews[keys[0]]; } // Parses local project files and tries to infer connction settings from them getStorageConnectionSettingsFromCurrentProject(defaultTaskHubName?: string): StorageConnectionSettings | null { const hostJson = this.readHostJson(); if (hostJson.storageProviderType === 'mssql') { const sqlConnectionString = this.getValueFromLocalSettings(hostJson.connectionStringName); if (!sqlConnectionString) { return null; } return new StorageConnectionSettings( [sqlConnectionString], 'DurableFunctionsHub', true); } var hubName: string | undefined = hostJson.hubName; if (!hubName) { hubName = defaultTaskHubName; if (!hubName) { return null; } } const storageConnString = this.getValueFromLocalSettings('AzureWebJobsStorage'); if (!storageConnString) { return null; } return new StorageConnectionSettings([ConnStringUtils.ExpandEmulatorShortcutIfNeeded(storageConnString)], hubName, true); } // Stops all backend processes and closes all views cleanup(): Promise { Object.keys(this._monitorViews).map(k => this._monitorViews[k].cleanup()); this._monitorViews = {}; const backends = this._backends; this._backends = {}; return Promise.all(Object.keys(backends).map(k => backends[k].cleanup())); } detachBackend(storageConnStrings: string[]): Promise { const connStringHashKey = StorageConnectionSettings.GetConnStringHashKey(storageConnStrings); // Closing all views related to this connection for (const key of Object.keys(this._monitorViews)) { const monitorView = this._monitorViews[key]; if (monitorView.storageConnectionSettings.connStringHashKey === connStringHashKey) { monitorView.cleanup(); delete this._monitorViews[key]; } } // Stopping background process const backendProcess = this._backends[connStringHashKey]; if (!backendProcess) { return Promise.resolve(); } return backendProcess.cleanup().then(() => { delete this._backends[connStringHashKey]; }); } getBackendUrl(storageConnStrings: string[]): string { const backendProcess = this._backends[StorageConnectionSettings.GetConnStringHashKey(storageConnStrings)]; return !backendProcess ? '' : backendProcess.backendUrl; } showUponDebugSession(connSettingsFromCurrentProject?: StorageConnectionSettings): Promise { if (!connSettingsFromCurrentProject) { return this.getOrAdd(true); } return Promise.resolve(this.getOrCreateFromStorageConnectionSettings(connSettingsFromCurrentProject)); } private _monitorViews: { [key: string]: MonitorView } = {}; private _backends: { [key: string]: BackendProcess } = {}; private getOrAddBackend(connSettings: StorageConnectionSettings): BackendProcess { // If a backend for this connection already exists, then just returning the existing one. var backendProcess = this._backends[connSettings.connStringHashKey]; if (!backendProcess) { var binariesFolder = Settings().customPathToBackendBinaries; if (!binariesFolder) { if (connSettings.isMsSql) { binariesFolder = path.join(this._context.extensionPath, 'custom-backends', 'mssql'); } else if (Settings().backendVersionToUse === '.Net Core 2.1') { binariesFolder = path.join(this._context.extensionPath, 'custom-backends', 'netcore21'); } else if (Settings().backendVersionToUse === '.Net Core 3.1') { binariesFolder = path.join(this._context.extensionPath, 'custom-backends', 'netcore31'); } else { binariesFolder = path.join(this._context.extensionPath, 'backend'); } } backendProcess = new BackendProcess( binariesFolder, connSettings, () => this.detachBackend(connSettings.storageConnStrings), this._log ); this._backends[connSettings.connStringHashKey] = backendProcess; } return backendProcess; } // Obtains Storage Connection String and Hub Name from user private askForStorageConnectionSettings(): Promise { return new Promise((resolve, reject) => { // Asking the user for Connection String var connStringToShow = ''; const connStringFromLocalSettings = this.getValueFromLocalSettings('AzureWebJobsStorage'); if (!!connStringFromLocalSettings) { connStringToShow = StorageConnectionSettings.MaskStorageConnString(connStringFromLocalSettings); } vscode.window.showInputBox({ value: connStringToShow, prompt: 'Storage or MSSQL Connection String' }).then(connString => { if (!connString) { // Leaving the promise unresolved, so nothing more happens return; } // If the user didn't change it if (connString === connStringToShow) { // Then setting it back to non-masked one connString = connStringFromLocalSettings; } // If it is MSSQL storage provider if (!!ConnStringUtils.GetSqlServerName(connString)) { resolve(new StorageConnectionSettings([connString!], 'DurableFunctionsHub')); return; } // Dealing with 'UseDevelopmentStorage=true' early connString = ConnStringUtils.ExpandEmulatorShortcutIfNeeded(connString); // Asking the user for Hub Name var hubName = ''; const hubPick = vscode.window.createQuickPick(); hubPick.onDidHide(() => hubPick.dispose()); hubPick.onDidChangeSelection(items => { if (!!items && !!items.length) { hubName = items[0].label; } }); // Still allowing to type free text hubPick.onDidChangeValue(value => { hubName = value; }); hubPick.onDidAccept(() => { if (!!hubName) { resolve(new StorageConnectionSettings([connString!], hubName)); } hubPick.hide(); }); hubPick.title = 'Hub Name'; var hubNameFromHostJson = this.readHostJson().hubName; if (!!hubNameFromHostJson) { hubPick.items = [{ label: hubNameFromHostJson, description: '(from host.json)' }]; hubPick.placeholder = hubNameFromHostJson; } else { hubPick.items = [{ label: 'DurableFunctionsHub', description: '(default hub name)' }]; hubPick.placeholder = 'DurableFunctionsHub'; } // Loading other hub names directly from Table Storage this.loadHubNamesFromTableStorage(connString).then(hubNames => { if (hubNames.length >= 0) { // Adding loaded names to the list hubPick.items = hubNames.map(label => { return { label: label, description: '(from Table Storage)' }; }); hubPick.placeholder = hubNames[0]; } }); hubPick.show(); // If nothing is selected, leaving the promise unresolved, so nothing more happens }, reject); }); } private loadHubNamesFromTableStorage(storageConnString: string): Promise { return new Promise((resolve) => { const accountName = ConnStringUtils.GetAccountName(storageConnString); const accountKey = ConnStringUtils.GetAccountKey(storageConnString); const tableEndpoint = ConnStringUtils.GetTableEndpoint(storageConnString); if (!accountName || !accountKey) { // Leaving the promise unresolved return; } getTaskHubNamesFromTableStorage(accountName, accountKey, tableEndpoint).then(hubNames => { if (!hubNames || hubNames.length <= 0) { // Leaving the promise unresolved return; } resolve(hubNames); }, err => { console.log(`Failed to load the list of tables. ${err.message}`); // Leaving the promise unresolved }); }); } private getValueFromLocalSettings(valueName: string): string { const ws = vscode.workspace; if (!!ws.rootPath && fs.existsSync(path.join(ws.rootPath, 'local.settings.json'))) { const localSettings = JSON.parse(fs.readFileSync(path.join(ws.rootPath, 'local.settings.json'), 'utf8')); if (!!localSettings.Values && !!localSettings.Values[valueName]) { return localSettings.Values[valueName]; } } return ''; } private readHostJson(): { hubName: string, storageProviderType: 'default' | 'mssql', connectionStringName: string } { const result = { hubName: '', storageProviderType: 'default' as any, connectionStringName: '' }; const ws = vscode.workspace; if (!!ws.rootPath && fs.existsSync(path.join(ws.rootPath, 'host.json'))) { var hostJson; try { hostJson = JSON.parse(fs.readFileSync(path.join(ws.rootPath, 'host.json'), 'utf8')); } catch (err) { console.log(`Failed to parse host.json. ${(err as any).message}`); return result; } if (!!hostJson && !!hostJson.extensions && hostJson.extensions.durableTask) { const durableTask = hostJson.extensions.durableTask; if (!!durableTask.HubName || !!durableTask.hubName) { result.hubName = !!durableTask.HubName ? durableTask.HubName : durableTask.hubName } if (!!durableTask.storageProvider && durableTask.storageProvider.type === 'mssql') { result.storageProviderType = 'mssql'; result.connectionStringName = durableTask.storageProvider.connectionStringName; } } } return result; } } // Tries to load the list of TaskHub names from a storage account. // Had to handcraft this code, since @azure/data-tables package is still in beta :( export async function getTaskHubNamesFromTableStorage(accountName: string, accountKey: string, tableEndpointUrl: string): Promise { if (!tableEndpointUrl) { tableEndpointUrl = `https://${accountName}.table.core.windows.net/`; } else if (!tableEndpointUrl.endsWith('/')) { tableEndpointUrl += '/'; } // Local emulator URLs contain account name _after_ host (like http://127.0.0.1:10002/devstoreaccount1/ ), // and this part should be included when obtaining SAS const tableEndpointUrlParts = tableEndpointUrl.split('/'); const tableQueryUrl = (tableEndpointUrlParts.length > 3 && !!tableEndpointUrlParts[3]) ? `${tableEndpointUrlParts[3]}/Tables` : 'Tables'; // Creating the SharedKeyLite signature to query Table Storage REST API for the list of tables const authHeaders = CreateAuthHeadersForTableStorage(accountName, accountKey, tableQueryUrl); var response: any; try { response = await axios.get(`${tableEndpointUrl}Tables`, { headers: authHeaders }); } catch (err) { console.log(`Failed to load hub names from table storage. ${(err as any).message}`); } if (!response || !response.data || !response.data.value || response.data.value.length <= 0) { return null; } const instancesTables: string[] = response.data.value.map((table: any) => table.TableName) .filter((tableName: string) => tableName.endsWith('Instances')) .map((tableName: string) => tableName.substr(0, tableName.length - 'Instances'.length)); const historyTables: string[] = response.data.value.map((table: any) => table.TableName) .filter((tableName: string) => tableName.endsWith('History')) .map((tableName: string) => tableName.substr(0, tableName.length - 'History'.length)); // Considering it to be a hub, if it has both *Instances and *History tables return instancesTables.filter(name => historyTables.indexOf(name) >= 0); } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/Settings.ts ================================================ import * as vscode from 'vscode'; // Returns config values stored in VsCode's settings.json export function Settings(): ISettings { const config = vscode.workspace.getConfiguration('durableFunctionsMonitor'); // Better to have default values hardcoded here (not only in package.json) as well return { backendBaseUrl: config.get('backendBaseUrl', 'http://localhost:{portNr}/a/p/i'), backendVersionToUse: config.get<'Default' | '.Net Core 3.1'>('backendVersionToUse', 'Default'), customPathToBackendBinaries: config.get('customPathToBackendBinaries', ''), backendTimeoutInSeconds: config.get('backendTimeoutInSeconds', 60), storageEmulatorConnectionString: config.get('storageEmulatorConnectionString', 'AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;DefaultEndpointsProtocol=http;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;'), enableLogging: config.get('enableLogging', false), showTimeAs: config.get<'UTC' | 'Local'>('showTimeAs', 'UTC'), showWhenDebugSessionStarts: config.get('showWhenDebugSessionStarts', false), }; } // Updates a config value stored in VsCode's settings.json export function UpdateSetting(name: string, val: any) { const config = vscode.workspace.getConfiguration('durableFunctionsMonitor'); config.update(name, val, true); } interface ISettings { backendBaseUrl: string; backendVersionToUse: 'Default' | '.Net Core 3.1' | '.Net Core 2.1'; customPathToBackendBinaries: string; backendTimeoutInSeconds: number; storageEmulatorConnectionString: string; enableLogging: boolean; showTimeAs: 'UTC' | 'Local'; showWhenDebugSessionStarts: boolean; } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/SharedConstants.ts ================================================ export const NonceEnvironmentVariableName = 'DFM_NONCE'; export const NonceHeaderName = 'x-dfm-nonce'; export const MsSqlConnStringEnvironmentVariableName = 'DFM_SQL_CONNECTION_STRING'; export const HubNameEnvironmentVariableName = 'DFM_HUB_NAME'; ================================================ FILE: durablefunctionsmonitor-vscodeext/src/StorageAccountTreeItem.ts ================================================ import * as vscode from 'vscode'; import * as path from 'path'; import { StorageConnectionSettings } from './BackendProcess'; import { ConnStringUtils } from "./ConnStringUtils"; import { TaskHubTreeItem } from "./TaskHubTreeItem"; import { MonitorViewList } from "./MonitorViewList"; // Represents the Storage Account item in the TreeView export class StorageAccountTreeItem extends vscode.TreeItem { constructor(private _connStrings: string[], private _resourcesFolderPath: string, private _monitorViewList: MonitorViewList, private _fromLocalSettingsJson: boolean = false) { super(ConnStringUtils.GetStorageName(_connStrings), vscode.TreeItemCollapsibleState.Expanded); this.isMsSqlStorage = !!ConnStringUtils.GetSqlServerName(this._connStrings[0]); } readonly isMsSqlStorage: boolean; isV2StorageAccount: boolean = false; storageAccountId: string = ''; get isAttached(): boolean { return !!this.backendUrl; } get backendUrl(): string { return this._monitorViewList.getBackendUrl(this._connStrings); } get storageName(): string { return this.label!; } get storageConnStrings(): string[] { return this._connStrings; } get childItems(): TaskHubTreeItem[] { return this._taskHubItems; } get tooltip(): string { if (this._fromLocalSettingsJson) { return `from local.settings.json`; } if (!!this.isMsSqlStorage) { return 'MSSQL Storage Provider'; } return StorageConnectionSettings.MaskStorageConnString(this._connStrings[0]); } // Something to show to the right of this item get description(): string { return `${this._taskHubItems.length} Task Hubs`; } // Item's icon get iconPath(): string { if (!!this.isMsSqlStorage) { return path.join(this._resourcesFolderPath, this.isAttached ? 'mssqlAttached.svg' : 'mssql.svg'); } if (this.isV2StorageAccount) { return path.join(this._resourcesFolderPath, this.isAttached ? 'storageAccountV2Attached.svg' : 'storageAccountV2.svg'); } return path.join(this._resourcesFolderPath, this.isAttached ? 'storageAccountAttached.svg' : 'storageAccount.svg'); } // For binding context menu to this tree node get contextValue(): string { return this.isAttached ? 'storageAccount-attached' : 'storageAccount-detached'; } // For sorting static compare(first: StorageAccountTreeItem, second: StorageAccountTreeItem): number { const a = first.storageName.toLowerCase(); const b = second.storageName.toLowerCase(); return a === b ? 0 : (a < b ? -1 : 1); } // Creates or returns existing TaskHubTreeItem by hub name getOrAdd(hubName: string): TaskHubTreeItem { var hubItem = this._taskHubItems.find(taskHub => taskHub.hubName.toLowerCase() === hubName.toLowerCase()); if (!hubItem) { hubItem = new TaskHubTreeItem(this, hubName, this._resourcesFolderPath); this._taskHubItems.push(hubItem); this._taskHubItems.sort(TaskHubTreeItem.compare); } return hubItem; } isTaskHubVisible(hubName: string): boolean { return this._monitorViewList.isMonitorViewVisible(new StorageConnectionSettings(this._connStrings, hubName)); } private _taskHubItems: TaskHubTreeItem[] = []; } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/StorageAccountTreeItems.ts ================================================ import { MonitorView } from "./MonitorView"; import { MonitorViewList } from "./MonitorViewList"; import { StorageAccountTreeItem } from "./StorageAccountTreeItem"; import { StorageConnectionSettings } from "./BackendProcess"; import { ConnStringUtils } from "./ConnStringUtils"; import { TaskHubTreeItem } from "./TaskHubTreeItem"; // Represents the list of Storage Account items in the TreeView export class StorageAccountTreeItems { constructor(private _resourcesFolderPath: string, private _monitorViewList: MonitorViewList) {} get nodes(): StorageAccountTreeItem[] { return this._storageAccountItems; } get taskHubNodes(): TaskHubTreeItem[] { return ([] as TaskHubTreeItem[]).concat(...this._storageAccountItems.map(n => n.childItems)); } // Adds a node to the tree for MonitorView, that's already running addNodeForMonitorView(monitorView: MonitorView): void { const storageConnStrings = monitorView.storageConnectionSettings.storageConnStrings; const storageName = ConnStringUtils.GetStorageName(storageConnStrings); const hubName = monitorView.storageConnectionSettings.hubName; // Only creating a new tree node, if no node for this account exists so far var node = this._storageAccountItems.find(item => item.storageName.toLowerCase() === storageName.toLowerCase()); if (!node) { node = new StorageAccountTreeItem(storageConnStrings, this._resourcesFolderPath, this._monitorViewList); this._storageAccountItems.push(node); this._storageAccountItems.sort(StorageAccountTreeItem.compare); } node.getOrAdd(hubName); } // Adds a detached node to the tree for the specified storage connection settings addNodeForConnectionSettings(connSettings: StorageConnectionSettings, isV2StorageAccount: boolean = false, storageAccountId: string = ''): void { const storageConnStrings = connSettings.storageConnStrings; const hubName = connSettings.hubName; // Trying to infer account name from connection string const storageName = ConnStringUtils.GetStorageName(storageConnStrings); if (!storageName) { return; } // Only creating a new tree node, if no node for this account exists so far var node = this._storageAccountItems.find(item => item.storageName === storageName); if (!node) { node = new StorageAccountTreeItem(storageConnStrings, this._resourcesFolderPath, this._monitorViewList, connSettings.isFromLocalSettingsJson ); this._storageAccountItems.push(node); this._storageAccountItems.sort(StorageAccountTreeItem.compare); } node.isV2StorageAccount = isV2StorageAccount; node.storageAccountId = storageAccountId; node.getOrAdd(hubName); } private _storageAccountItems: StorageAccountTreeItem[] = []; } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/SubscriptionTreeItem.ts ================================================ import * as vscode from 'vscode'; import * as path from 'path'; import { StorageAccountTreeItem } from "./StorageAccountTreeItem"; import { StorageAccountTreeItems } from "./StorageAccountTreeItems"; // Represents an Azure Subscription in the TreeView export class SubscriptionTreeItem extends vscode.TreeItem { get isSubscriptionTreeItem(): boolean { return true; } // Returns storage account nodes, that belong to this subscription get storageAccountNodes(): StorageAccountTreeItem[] { return this._storageAccounts.nodes.filter(a => this.isMyStorageAccount(a)); } constructor(subscriptionName: string, private _storageAccounts: StorageAccountTreeItems, private _storageAccountNames: string[], protected _resourcesFolderPath: string ) { super(subscriptionName, vscode.TreeItemCollapsibleState.Expanded); this.iconPath = path.join(this._resourcesFolderPath, 'azureSubscription.svg'); } // Checks whether this storage account belongs to this subscription. isMyStorageAccount(accNode: StorageAccountTreeItem): boolean { // The only way to do this is by matching the account name against all account names in this subscription. // We need to fetch these acccount names for other purposes anyway, so why not using them here as well // (as opposite to making separate roundtrips to get subscriptionId for a given account). return this._storageAccountNames.includes(accNode.storageName); } } // Represents a special node in the TreeView where all 'orphaned' (those with unidentified subscription) storage accounts go export class DefaultSubscriptionTreeItem extends SubscriptionTreeItem { constructor(storageAccounts: StorageAccountTreeItems, private _otherSubscriptionNodes: SubscriptionTreeItem[], resourcesFolderPath: string ) { super('Storages', storageAccounts, [], resourcesFolderPath); this.iconPath = path.join(this._resourcesFolderPath, 'storageAccounts.svg'); } // Checks whether this storage account belongs to this tree item. isMyStorageAccount(accNode: StorageAccountTreeItem): boolean { // Let's see if this account belongs to any other subscription node. If not - it's ours. return this._otherSubscriptionNodes.every(n => !n.isMyStorageAccount(accNode)); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/SubscriptionTreeItems.ts ================================================ import * as vscode from 'vscode'; import { StorageManagementClient } from "@azure/arm-storage"; import { StorageAccount } from "@azure/arm-storage/src/models"; import { SubscriptionTreeItem, DefaultSubscriptionTreeItem } from "./SubscriptionTreeItem"; import { StorageAccountTreeItems } from "./StorageAccountTreeItems"; import { getTaskHubNamesFromTableStorage } from './MonitorViewList'; import { ConnStringUtils } from "./ConnStringUtils"; import { Settings } from './Settings'; import { StorageConnectionSettings } from "./BackendProcess"; // Full typings for this can be found here: https://github.com/microsoft/vscode-azure-account/blob/master/src/azure-account.api.d.ts type AzureSubscription = { session: { credentials2: any }, subscription: { subscriptionId: string, displayName: string } }; // Represents the list of Azure Subscriptions in the TreeView export class SubscriptionTreeItems { constructor(private _context: vscode.ExtensionContext, private _azureAccount: any, private _storageAccounts: StorageAccountTreeItems, private _onStorageAccountsChanged: () => void, private _resourcesFolderPath: string, private _log: (l: string) => void) { } // Returns subscription nodes, but only those that have some TaskHubs in them async getNonEmptyNodes(): Promise { if (!this._nodes) { // Need to wait until Azure Account ext loads the filtered list of subscriptions if (!this._azureAccount || !await this._azureAccount.waitForFilters()) { this._nodes = []; } else { // Showing only filtered subscriptions and ignoring those, which are hidden const subscriptions = this._azureAccount.filters; this._nodes = await this.loadSubscriptionNodes(subscriptions); } // Adding the 'default subscription' node, where all orphaned (unrecognized) storage accounts will go to. this._nodes.push(new DefaultSubscriptionTreeItem(this._storageAccounts, this._nodes.slice(), this._resourcesFolderPath)); // Also pinging local Storage Emulator and deliberately not awaiting this.tryLoadingTaskHubsForLocalStorageEmulator(); } // Only showing non-empty subscriptions return this._nodes.filter(n => n.storageAccountNodes.length > 0); } cleanup(): void { this._nodes = undefined; } private _nodes?: SubscriptionTreeItem[]; private async tryLoadingStorageAccountsForSubscription(storageManagementClient: StorageManagementClient): Promise { const result: StorageAccount[] = []; var storageAccountsPartialResponse = await storageManagementClient.storageAccounts.list(); result.push(...storageAccountsPartialResponse); while (!!storageAccountsPartialResponse.nextLink) { storageAccountsPartialResponse = await storageManagementClient.storageAccounts.listNext(storageAccountsPartialResponse.nextLink); result.push(...storageAccountsPartialResponse); } return result; } private static HasAlreadyShownStorageV2Warning = false; private showWarning4V2StorageAccounts(v2AccountNames: string[]): void { const DfmDoNotShowStorageV2Warning = 'DfmDoNotShowStorageV2Warning'; if (!!SubscriptionTreeItems.HasAlreadyShownStorageV2Warning || !!this._context.globalState.get(DfmDoNotShowStorageV2Warning, false) || !v2AccountNames.length) { return; } SubscriptionTreeItems.HasAlreadyShownStorageV2Warning = true; const prompt = `Looks like your Durable Functions are using the following General-purpose V2 Storage accounts: ${v2AccountNames.join(', ')}. Combined with Durable Functions, V2 Storage accounts can be more expensive under high loads. Consider using General-purpose V1 Storage instead.`; vscode.window.showWarningMessage(prompt, 'OK', `Don't Show Again`).then(answer => { if (answer === `Don't Show Again`) { this._context.globalState.update(DfmDoNotShowStorageV2Warning, true); } }); } private async tryLoadingTaskHubsForSubscription(storageManagementClient: StorageManagementClient, storageAccounts: StorageAccount[]): Promise { const v2AccountNames: string[] = []; var taskHubsAdded = false; await Promise.all(storageAccounts.map(async storageAccount => { // Extracting resource group name const match = /\/resourceGroups\/([^\/]+)\/providers/gi.exec(storageAccount.id!); if (!match || match.length <= 0) { return; } const resourceGroupName = match[1]; const storageKeys = await storageManagementClient.storageAccounts.listKeys(resourceGroupName, storageAccount.name!); if (!storageKeys.keys || storageKeys.keys.length <= 0) { return; } // Choosing the key that looks best var storageKey = storageKeys.keys.find(k => !k.permissions || k.permissions.toLowerCase() === "full"); if (!storageKey) { storageKey = storageKeys.keys.find(k => !k.permissions || k.permissions.toLowerCase() === "read"); } if (!storageKey) { return; } var tableEndpoint = ''; if (!!storageAccount.primaryEndpoints) { tableEndpoint = storageAccount.primaryEndpoints.table!; } const hubNames = await getTaskHubNamesFromTableStorage(storageAccount.name!, storageKey.value!, tableEndpoint); if (!hubNames || !hubNames.length) { return; } const isV2StorageAccount = storageAccount.kind === 'StorageV2'; if (isV2StorageAccount) { v2AccountNames.push(storageAccount.name!); } for (const hubName of hubNames) { this._storageAccounts.addNodeForConnectionSettings( new StorageConnectionSettings([this.getConnectionStringForStorageAccount(storageAccount, storageKey.value!)], hubName, false), isV2StorageAccount, storageAccount.id ); taskHubsAdded = true; } })); // Notifying about potentially higher costs of V2 accounts this.showWarning4V2StorageAccounts(v2AccountNames); return taskHubsAdded; } private async tryLoadingTaskHubsForLocalStorageEmulator(): Promise { const emulatorConnString = Settings().storageEmulatorConnectionString; const accountName = ConnStringUtils.GetAccountName(emulatorConnString); const accountKey = ConnStringUtils.GetAccountKey(emulatorConnString); const tableEndpoint = ConnStringUtils.GetTableEndpoint(emulatorConnString); const hubNames = await getTaskHubNamesFromTableStorage(accountName, accountKey, tableEndpoint); if (!hubNames) { return; } for (const hubName of hubNames) { this._storageAccounts.addNodeForConnectionSettings(new StorageConnectionSettings([emulatorConnString], hubName)); } if (hubNames.length > 0) { this._onStorageAccountsChanged(); } } private getConnectionStringForStorageAccount(account: StorageAccount, storageKey: string): string { var endpoints = ''; if (!!account.primaryEndpoints) { endpoints = `BlobEndpoint=${account.primaryEndpoints!.blob};QueueEndpoint=${account.primaryEndpoints!.queue};TableEndpoint=${account.primaryEndpoints!.table};FileEndpoint=${account.primaryEndpoints!.file};`; } else { endpoints = `BlobEndpoint=https://${account.name}.blob.core.windows.net/;QueueEndpoint=https://${account.name}.queue.core.windows.net/;TableEndpoint=https://${account.name}.table.core.windows.net/;FileEndpoint=https://${account.name}.file.core.windows.net/;`; } return `DefaultEndpointsProtocol=https;AccountName=${account.name};AccountKey=${storageKey};${endpoints}`; } private async loadSubscriptionNodes(subscriptions: AzureSubscription[]): Promise { const results = await Promise.all(subscriptions.map(async s => { try { const storageManagementClient = new StorageManagementClient(s.session.credentials2, s.subscription.subscriptionId); // Trying to load all storage account names in this subscription. // We need that list of names to subsequently match storage account nodes with their subscription nodes. const storageAccounts = await this.tryLoadingStorageAccountsForSubscription(storageManagementClient); // Now let's try to detect and load TaskHubs in this subscription. // Many things can go wrong there, that is why we're doing it so asynchronously this.tryLoadingTaskHubsForSubscription(storageManagementClient, storageAccounts) .then(anyMoreTaskHubsAdded => { if (anyMoreTaskHubsAdded) { this._onStorageAccountsChanged(); } }, err => { this._onStorageAccountsChanged(); this._log(`Failed to load TaskHubs from subscription ${s.subscription.displayName}. ${err.message}`); }); return { subscriptionId: s.subscription.subscriptionId, subscriptionName: s.subscription.displayName, storageAccountNames: storageAccounts.map(a => a.name!) }; } catch (err) { this._log(`Failed to load storage accounts from subscription ${s.subscription.displayName}. ${err.message}`); return null; } })); return results .filter(r => r !== null) .map(r => new SubscriptionTreeItem( r!.subscriptionName, this._storageAccounts, r!.storageAccountNames, this._resourcesFolderPath )); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/TaskHubTreeItem.ts ================================================ import * as vscode from 'vscode'; import * as path from 'path'; import { StorageConnectionSettings } from './BackendProcess'; import { StorageAccountTreeItem } from "./StorageAccountTreeItem"; // Represents the Task Hub item in the TreeView export class TaskHubTreeItem extends vscode.TreeItem { constructor(private _parentItem: StorageAccountTreeItem, private _hubName: string, private _resourcesFolderPath: string) { super(_hubName); } get storageAccountId(): string { return this._parentItem.storageAccountId; } get subscriptionId(): string { const match = /\/subscriptions\/([^\/]+)\/resourceGroups/gi.exec(this._parentItem.storageAccountId); if (!match || match.length <= 0) { return ''; } return match[1]; } get hubName(): string { return this._hubName; } // Gets associated storage connection settings get storageConnectionSettings(): StorageConnectionSettings { return new StorageConnectionSettings(this._parentItem.storageConnStrings, this._hubName); } // Item's icon get iconPath(): string { return path.join(this._resourcesFolderPath, this._parentItem.isTaskHubVisible(this._hubName) ? 'taskHubAttached.svg' : 'taskHub.svg'); } // As a tooltip, showing the backend's URL get tooltip(): string { const backendUrl = this._parentItem.backendUrl; return !backendUrl ? '' : `${backendUrl}/${this._hubName}`; } // This is what happens when the item is being clicked get command(): vscode.Command { return { title: 'Attach', command: 'durableFunctionsMonitorTreeView.attachToTaskHub', arguments: [this] }; } // For binding context menu to this tree node get contextValue(): string { return this._parentItem.isAttached ? 'taskHub-attached' : 'taskHub-detached'; } // For sorting static compare(first: TaskHubTreeItem, second: TaskHubTreeItem): number { const a = first.label!.toLowerCase(); const b = second.label!.toLowerCase(); return a === b ? 0 : (a < b ? -1 : 1); } // Drops itself from parent's list removeFromTree(): void { this._parentItem.childItems.splice(this._parentItem.childItems.indexOf(this), 1); } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/az-func-as-a-graph/FunctionsMap.d.ts ================================================ export type FunctionsMap = { [name: string]: { bindings: any[], isCalledBy: string[], isSignalledBy: { name: string, signalName: string }[], isCalledByItself?: boolean, filePath?: string, pos?: number, lineNr?: number } }; export type ProxiesMap = { [name: string]: { matchCondition?: { methods?: string[]; route?: string; }; backendUri?: string; requestOverrides?: {}; responseOverrides?: {}; filePath?: string, pos?: number, lineNr?: number, warningNotAddedToCsProjFile?: boolean } }; export type TraverseFunctionResult = { functions: FunctionsMap; proxies: ProxiesMap; tempFolders: string[]; projectFolder: string; }; ================================================ FILE: durablefunctionsmonitor-vscodeext/src/az-func-as-a-graph/traverseFunctionProject.ts ================================================ import * as os from 'os'; import * as fs from 'fs'; import * as path from 'path'; import { execSync } from 'child_process'; import { FunctionsMap, ProxiesMap, TraverseFunctionResult } from './FunctionsMap'; import { getCodeInBrackets, TraversalRegexes, DotNetBindingsParser, isDotNetProjectAsync, posToLineNr, cloneFromGitHub } from './traverseFunctionProjectUtils'; const ExcludedFolders = ['node_modules', 'obj', '.vs', '.vscode', '.env', '.python_packages', '.git', '.github']; // Collects all function.json files in a Functions project. Also tries to supplement them with bindings // extracted from .Net code (if the project is .Net). Also parses and organizes orchestrators/activities // (if the project uses Durable Functions) export async function traverseFunctionProject(projectFolder: string, log: (s: any) => void) : Promise { var functions: FunctionsMap = {}, tempFolders = []; // If it is a git repo, cloning it if (projectFolder.toLowerCase().startsWith('http')) { log(`Cloning ${projectFolder}`); const gitInfo = await cloneFromGitHub(projectFolder); log(`Successfully cloned to ${gitInfo.gitTempFolder}`); tempFolders.push(gitInfo.gitTempFolder); projectFolder = gitInfo.projectFolder; } const hostJsonMatch = await findFileRecursivelyAsync(projectFolder, 'host.json', false); if (!hostJsonMatch) { throw new Error('host.json file not found under the provided project path'); } log(`>>> Found host.json at ${hostJsonMatch.filePath}`); var hostJsonFolder = path.dirname(hostJsonMatch.filePath); // If it is a C# function, we'll need to dotnet publish first if (await isDotNetProjectAsync(hostJsonFolder)) { const publishTempFolder = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'dotnet-publish-')); tempFolders.push(publishTempFolder); log(`>>> Publishing ${hostJsonFolder} to ${publishTempFolder}...`); execSync(`dotnet publish -o ${publishTempFolder}`, { cwd: hostJsonFolder }); hostJsonFolder = publishTempFolder; } // Reading function.json files, in parallel const promises = (await fs.promises.readdir(hostJsonFolder)).map(async functionName => { const fullPath = path.join(hostJsonFolder, functionName); const functionJsonFilePath = path.join(fullPath, 'function.json'); const isDirectory = (await fs.promises.lstat(fullPath)).isDirectory(); const functionJsonExists = fs.existsSync(functionJsonFilePath); if (isDirectory && functionJsonExists) { try { const functionJsonString = await fs.promises.readFile(functionJsonFilePath, { encoding: 'utf8' }); const functionJson = JSON.parse(functionJsonString); functions[functionName] = { bindings: functionJson.bindings, isCalledBy: [], isSignalledBy: [] }; } catch (err) { log(`>>> Failed to parse ${functionJsonFilePath}: ${err}`); } } }); await Promise.all(promises); // Now enriching data from function.json with more info extracted from code functions = await mapOrchestratorsAndActivitiesAsync(functions, projectFolder, hostJsonFolder); // Also reading proxies const proxies = await readProxiesJson(projectFolder, log); return { functions, proxies, tempFolders, projectFolder }; } // Tries to read proxies.json file from project folder async function readProxiesJson(projectFolder: string, log: (s: any) => void): Promise { const proxiesJsonPath = path.join(projectFolder, 'proxies.json'); if (!fs.existsSync(proxiesJsonPath)) { return {}; } const proxiesJsonString = await fs.promises.readFile(proxiesJsonPath, { encoding: 'utf8' }); try { const proxies = JSON.parse(proxiesJsonString).proxies as ProxiesMap; if (!proxies) { return {}; } var notAddedToCsProjFile = false; if (await isDotNetProjectAsync(projectFolder)) { // Also checking that proxies.json is added to .csproj file const csProjFile = await findFileRecursivelyAsync(projectFolder, '.+\\.csproj$', true); const proxiesJsonEntryRegex = new RegExp(`\\s*=\\s*"proxies.json"\\s*>`); if (!!csProjFile && csProjFile.code && (!proxiesJsonEntryRegex.exec(csProjFile.code))) { notAddedToCsProjFile = true; } } // Also adding filePath and lineNr for (var proxyName in proxies) { const proxy = proxies[proxyName]; proxy.filePath = proxiesJsonPath; if (notAddedToCsProjFile) { proxy.warningNotAddedToCsProjFile = true; } const proxyNameRegex = new RegExp(`"${proxyName}"\\s*:`); const match = proxyNameRegex.exec(proxiesJsonString); if (!!match) { proxy.pos = match.index; proxy.lineNr = posToLineNr(proxiesJsonString, proxy.pos); } } return proxies; } catch(err) { log(`>>> Failed to parse ${proxiesJsonPath}: ${err}`); return {}; } } // fileName can be a regex, pattern should be a regex (which will be searched for in the matching files). // If returnFileContents == true, returns file content. Otherwise returns full path to the file. async function findFileRecursivelyAsync(folder: string, fileName: string, returnFileContents: boolean, pattern?: RegExp) : Promise<{ filePath: string, code?: string, pos?: number, length?: number } | undefined> { const fileNameRegex = new RegExp(fileName, 'i'); for (const name of await fs.promises.readdir(folder)) { var fullPath = path.join(folder, name); if ((await fs.promises.lstat(fullPath)).isDirectory()) { if (ExcludedFolders.includes(name.toLowerCase())) { continue; } const result = await findFileRecursivelyAsync(fullPath, fileName, returnFileContents, pattern); if (!!result) { return result; } } else if (!!fileNameRegex.exec(name)) { if (!pattern) { return { filePath: fullPath, code: returnFileContents ? (await fs.promises.readFile(fullPath, { encoding: 'utf8' })) : undefined }; } const code = await fs.promises.readFile(fullPath, { encoding: 'utf8' }); const match = pattern.exec(code); if (!!match) { return { filePath: fullPath, code: returnFileContents ? code : undefined, pos: match.index, length: match[0].length }; } } } return undefined; } // Tries to match orchestrations and their activities by parsing source code async function mapOrchestratorsAndActivitiesAsync(functions: FunctionsMap, projectFolder: string, hostJsonFolder: string): Promise<{}> { const isDotNet = await isDotNetProjectAsync(projectFolder); const functionNames = Object.keys(functions); const orchestratorNames = functionNames.filter(name => functions[name].bindings.some((b: any) => b.type === 'orchestrationTrigger')); const orchestrators = await getFunctionsAndTheirCodesAsync(orchestratorNames, isDotNet, projectFolder, hostJsonFolder); const activityNames = Object.keys(functions).filter(name => functions[name].bindings.some((b: any) => b.type === 'activityTrigger')); const activities = await getFunctionsAndTheirCodesAsync(activityNames, isDotNet, projectFolder, hostJsonFolder); const entityNames = functionNames.filter(name => functions[name].bindings.some((b: any) => b.type === 'entityTrigger')); const entities = await getFunctionsAndTheirCodesAsync(entityNames, isDotNet, projectFolder, hostJsonFolder); const otherFunctionNames = functionNames.filter(name => !functions[name].bindings.some((b: any) => ['orchestrationTrigger', 'activityTrigger', 'entityTrigger'].includes(b.type))); const otherFunctions = await getFunctionsAndTheirCodesAsync(otherFunctionNames, isDotNet, projectFolder, hostJsonFolder); for (const orch of orchestrators) { // Trying to match this orchestrator with its calling function const regex = TraversalRegexes.getStartNewOrchestrationRegex(orch.name); for (const func of otherFunctions) { // If this function seems to be calling that orchestrator if (!!regex.exec(func.code)) { functions[orch.name].isCalledBy.push(func.name); } } // Matching suborchestrators for (const subOrch of orchestrators) { if (orch.name === subOrch.name) { continue; } // If this orchestrator seems to be calling that suborchestrator const regex = TraversalRegexes.getCallSubOrchestratorRegex(subOrch.name); if (!!regex.exec(orch.code)) { // Mapping that suborchestrator to this orchestrator functions[subOrch.name].isCalledBy.push(orch.name); } } // Mapping activities to orchestrators mapActivitiesToOrchestrator(functions, orch, activityNames); // Checking whether orchestrator calls itself if (!!TraversalRegexes.continueAsNewRegex.exec(orch.code)) { functions[orch.name].isCalledByItself = true; } // Trying to map event producers with their consumers const eventNames = getEventNames(orch.code); for (const eventName of eventNames) { const regex = TraversalRegexes.getRaiseEventRegex(eventName); for (const func of otherFunctions) { // If this function seems to be sending that event if (!!regex.exec(func.code)) { functions[orch.name].isSignalledBy.push({ name: func.name, signalName: eventName }); } } } } for (const entity of entities) { // Trying to match this entity with its calling function for (const func of otherFunctions) { // If this function seems to be calling that entity const regex = TraversalRegexes.getSignalEntityRegex(entity.name); if (!!regex.exec(func.code)) { functions[entity.name].isCalledBy.push(func.name); } } } if (isDotNet) { // Trying to extract extra binding info from C# code for (const func of otherFunctions) { const moreBindings = DotNetBindingsParser.tryExtractBindings(func.code); functions[func.name].bindings.push(...moreBindings); } } // Also adding file paths and code positions for (const func of otherFunctions.concat(orchestrators).concat(activities).concat(entities)) { functions[func.name].filePath = func.filePath; functions[func.name].pos = func.pos; functions[func.name].lineNr = func.lineNr; } return functions; } // Tries to extract event names that this orchestrator is awaiting function getEventNames(orchestratorCode: string): string[] { const result = []; const regex = TraversalRegexes.waitForExternalEventRegex; var match: RegExpExecArray | null; while (!!(match = regex.exec(orchestratorCode))) { result.push(match[4]); } return result; } // Tries to load code for functions of certain type async function getFunctionsAndTheirCodesAsync(functionNames: string[], isDotNet: boolean, projectFolder: string, hostJsonFolder: string) : Promise<{ name: string, code: string, filePath: string, pos: number, lineNr: number }[]> { const promises = functionNames.map(async name => { const match = await (isDotNet ? findFileRecursivelyAsync(projectFolder, '.+\\.(f|c)s$', true, TraversalRegexes.getDotNetFunctionNameRegex(name)) : findFileRecursivelyAsync(path.join(hostJsonFolder, name), '(index\\.ts|index\\.js|__init__\\.py)$', true)); if (!match) { return undefined; } const code = !isDotNet ? match.code : getCodeInBrackets(match.code!, match.pos! + match.length!, '{', '}', ' \n'); const pos = !match.pos ? 0 : match.pos; const lineNr = posToLineNr(match.code, pos); return { name, code, filePath: match.filePath, pos, lineNr }; }); return (await Promise.all(promises)).filter(f => !!f) as any; } // Tries to match orchestrator with its activities function mapActivitiesToOrchestrator(functions: FunctionsMap, orch: {name: string, code: string}, activityNames: string[]): void { for (const activityName of activityNames) { // If this orchestrator seems to be calling this activity const regex = TraversalRegexes.getCallActivityRegex(activityName); if (!!regex.exec(orch.code)) { // Then mapping this activity to this orchestrator if (!functions[activityName].isCalledBy) { functions[activityName].isCalledBy = []; } functions[activityName].isCalledBy.push(orch.name); } } } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/az-func-as-a-graph/traverseFunctionProjectUtils.ts ================================================ import * as os from 'os'; import * as fs from 'fs'; import * as path from 'path'; import { execSync } from 'child_process'; // Does a git clone into a temp folder and returns info about that cloned code export async function cloneFromGitHub(url: string): Promise<{gitTempFolder: string, projectFolder: string}> { var repoName = '', branchName = '', relativePath = '', gitTempFolder = ''; var restOfUrl: string[] = []; const match = /(https:\/\/github.com\/.*?)\/([^\/]+)(\/tree\/)?(.*)/i.exec(url); if (!match || match.length < 5) { // expecting repo name to be the last segment of remote origin URL repoName = url.substr(url.lastIndexOf('/') + 1); } else { const orgUrl = match[1]; repoName = match[2]; if (repoName.toLowerCase().endsWith('.git')) { repoName = repoName.substr(0, repoName.length - 4); } url = `${orgUrl}/${repoName}.git`; if (!!match[4]) { restOfUrl = match[4].split('/').filter(s => !!s); } } gitTempFolder = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'git-clone-')); // The provided URL might contain both branch name and relative path. The only way to separate one from another // is to repeatedly try cloning assumed branch names, until we finally succeed. for (var i = restOfUrl.length; i > 0; i--) { try { const assumedBranchName = restOfUrl.slice(0, i).join('/'); execSync(`git clone ${url} --branch ${assumedBranchName}`, { cwd: gitTempFolder }); branchName = assumedBranchName; relativePath = path.join(...restOfUrl.slice(i, restOfUrl.length)); break; } catch { continue; } } if (!branchName) { // Just doing a normal git clone execSync(`git clone ${url}`, { cwd: gitTempFolder }); } return { gitTempFolder, projectFolder: path.join(gitTempFolder, repoName, relativePath) }; } // Primitive way of getting a line number out of symbol position export function posToLineNr(code: string | undefined, pos: number): number { if (!code) { return 0; } const lineBreaks = code.substr(0, pos).match(/(\r\n|\r|\n)/g); return !lineBreaks ? 1 : lineBreaks.length + 1; } // Checks if the given folder looks like a .Net project export async function isDotNetProjectAsync(projectFolder: string): Promise { return (await fs.promises.readdir(projectFolder)).some(fn => { fn = fn.toLowerCase(); return fn.endsWith('.sln') || fn.endsWith('.fsproj') || (fn.endsWith('.csproj') && fn !== 'extensions.csproj'); }); } // Complements regex's inability to keep up with nested brackets export function getCodeInBrackets(str: string, startFrom: number, openingBracket: string, closingBracket: string, mustHaveSymbols: string = ''): string { var bracketCount = 0, openBracketPos = 0, mustHaveSymbolFound = !mustHaveSymbols; for (var i = startFrom; i < str.length; i++) { switch (str[i]) { case openingBracket: if (bracketCount <= 0) { openBracketPos = i + 1; } bracketCount++; break; case closingBracket: bracketCount--; if (bracketCount <= 0 && mustHaveSymbolFound) { return str.substring(startFrom, i + 1); } break; } if (bracketCount > 0 && mustHaveSymbols.includes(str[i])) { mustHaveSymbolFound = true; } } return ''; } // General-purpose regexes export class TraversalRegexes { static getStartNewOrchestrationRegex(orchName: string): RegExp { return new RegExp(`(StartNew|StartNewAsync|start_new)(\\s*<[\\w\\.-\\[\\]\\<\\>,\\s]+>)?\\s*\\(\\s*(["'\`]|nameof\\s*\\(\\s*[\\w\\.-]*|[\\w\\s\\.]+\\.\\s*)${orchName}\\s*["'\\),]{1}`, 'i'); } static getCallSubOrchestratorRegex(subOrchName: string): RegExp { return new RegExp(`(CallSubOrchestrator|CallSubOrchestratorWithRetry|call_sub_orchestrator)(Async)?(\\s*<[\\w\\.-\\[\\]\\<\\>,\\s]+>)?\\s*\\(\\s*(["'\`]|nameof\\s*\\(\\s*[\\w\\.-]*|[\\w\\s\\.]+\\.\\s*)${subOrchName}\\s*["'\\),]{1}`, 'i'); } static readonly continueAsNewRegex = new RegExp(`ContinueAsNew\\s*\\(`, 'i'); static getRaiseEventRegex(eventName: string): RegExp { return new RegExp(`(RaiseEvent|raise_event)(Async)?(.|\r|\n)*${eventName}`, 'i'); } static getSignalEntityRegex(entityName: string): RegExp { return new RegExp(`${entityName}\\s*["'>]{1}`); } static readonly waitForExternalEventRegex = new RegExp(`(WaitForExternalEvent|wait_for_external_event)(<[\\s\\w,\\.-\\[\\]\\(\\)\\<\\>]+>)?\\s*\\(\\s*(nameof\\s*\\(\\s*|["'\`]|[\\w\\s\\.]+\\.\\s*)?([\\s\\w\\.-]+)\\s*["'\`\\),]{1}`, 'gi'); static getDotNetFunctionNameRegex(funcName: string): RegExp { return new RegExp(`FunctionName(Attribute)?\\s*\\(\\s*(nameof\\s*\\(\\s*|["'\`]|[\\w\\s\\.]+\\.\\s*)${funcName}\\s*["'\`\\)]{1}`) } static getCallActivityRegex(activityName: string): RegExp { return new RegExp(`(CallActivity|call_activity)[\\s\\w,\\.-<>\\[\\]\\(\\)\\?]*\\([\\s\\w\\.-]*["'\`]?${activityName}\\s*["'\`\\),]{1}`, 'i'); } } // In .Net not all bindings are mentioned in function.json, so we need to analyze source code to extract them export class DotNetBindingsParser { // Extracts additional bindings info from C#/F# source code static tryExtractBindings(funcCode: string): {type: string, direction: string}[] { const result: {type: string, direction: string}[] = []; if (!funcCode) { return result; } const regex = this.bindingAttributeRegex; var match: RegExpExecArray | null; while (!!(match = regex.exec(funcCode))) { const isReturn = !!match[2]; const attributeName = match[3]; const attributeCodeStartIndex = match.index + match[0].length - 1; const attributeCode = getCodeInBrackets(funcCode, attributeCodeStartIndex, '(', ')', ''); this.isOutRegex.lastIndex = attributeCodeStartIndex + attributeCode.length; const isOut = !!this.isOutRegex.exec(funcCode); switch (attributeName) { case 'Blob': { const binding: any = { type: 'blob', direction: isReturn || isOut ? 'out' : 'in' }; const paramsMatch = this.blobParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['path'] = paramsMatch[1]; } result.push(binding); break; } case 'Table': { const binding: any = { type: 'table', direction: isReturn || isOut ? 'out' : 'in' }; const paramsMatch = this.singleParamRegex.exec(attributeCode); if (!!paramsMatch) { binding['tableName'] = paramsMatch[2]; } result.push(binding); break; } case 'CosmosDB': { const binding: any = { type: 'cosmosDB', direction: isReturn || isOut ? 'out' : 'in' }; const paramsMatch = this.cosmosDbParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['databaseName'] = paramsMatch[1]; binding['collectionName'] = paramsMatch[3]; } result.push(binding); break; } case 'SignalRConnectionInfo': { const binding: any = { type: 'signalRConnectionInfo', direction: 'in' }; const paramsMatch = this.signalRConnInfoParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['hubName'] = paramsMatch[1]; } result.push(binding); break; } case 'EventGrid': { const binding: any = { type: 'eventGrid', direction: 'out' }; const paramsMatch = this.eventGridParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['topicEndpointUri'] = paramsMatch[1]; binding['topicKeySetting'] = paramsMatch[3]; } result.push(binding); break; } case 'EventHub': { const binding: any = { type: 'eventHub', direction: 'out' }; const paramsMatch = this.eventHubParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['eventHubName'] = paramsMatch[1]; } result.push(binding); break; } case 'Queue': { const binding: any = { type: 'queue', direction: 'out' }; const paramsMatch = this.singleParamRegex.exec(attributeCode); if (!!paramsMatch) { binding['queueName'] = paramsMatch[2]; } result.push(binding); break; } case 'ServiceBus': { const binding: any = { type: 'serviceBus', direction: 'out' }; const paramsMatch = this.singleParamRegex.exec(attributeCode); if (!!paramsMatch) { binding['queueName'] = paramsMatch[2]; } result.push(binding); break; } case 'SignalR': { const binding: any = { type: 'signalR', direction: 'out' }; const paramsMatch = this.signalRParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['hubName'] = paramsMatch[1]; } result.push(binding); break; } case 'RabbitMQ': { const binding: any = { type: 'rabbitMQ', direction: 'out' }; const paramsMatch = this.rabbitMqParamsRegex.exec(attributeCode); if (!!paramsMatch) { binding['queueName'] = paramsMatch[1]; } result.push(binding); break; } case 'SendGrid': { result.push({ type: 'sendGrid', direction: 'out' }); break; } case 'TwilioSms': { result.push({ type: 'twilioSms', direction: 'out' }); break; } } } return result; } static readonly bindingAttributeRegex = new RegExp(`\\[(<)?\\s*(return:)?\\s*(\\w+)(Attribute)?\\s*\\(`, 'g'); static readonly singleParamRegex = new RegExp(`("|nameof\\s*\\()?([\\w\\.-]+)`); static readonly eventHubParamsRegex = new RegExp(`"([^"]+)"`); static readonly signalRParamsRegex = new RegExp(`"([^"]+)"`); static readonly rabbitMqParamsRegex = new RegExp(`"([^"]+)"`); static readonly blobParamsRegex = new RegExp(`"([^"]+)"`); static readonly cosmosDbParamsRegex = new RegExp(`"([^"]+)"(.|\r|\n)+?"([^"]+)"`); static readonly signalRConnInfoParamsRegex = new RegExp(`"([^"]+)"`); static readonly eventGridParamsRegex = new RegExp(`"([^"]+)"(.|\r|\n)+?"([^"]+)"`); static readonly isOutRegex = new RegExp(`\\]\\s*(out |ICollector|IAsyncCollector).*?(,|\\()`, 'g'); } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/extension.ts ================================================ import * as vscode from 'vscode'; import { MonitorTreeDataProvider } from './MonitorTreeDataProvider'; import { FunctionGraphList } from './FunctionGraphList'; import { Settings } from './Settings'; var monitorTreeDataProvider: MonitorTreeDataProvider; var functionGraphList: FunctionGraphList; // Name for our logging OutputChannel const OutputChannelName = 'Durable Functions Monitor'; export function activate(context: vscode.ExtensionContext) { // For logging const logChannel = Settings().enableLogging ? vscode.window.createOutputChannel(OutputChannelName) : undefined; if (!!logChannel) { context.subscriptions.push(logChannel); } functionGraphList = new FunctionGraphList(context, logChannel); monitorTreeDataProvider = new MonitorTreeDataProvider(context, functionGraphList, logChannel); context.subscriptions.push( vscode.debug.onDidStartDebugSession(() => monitorTreeDataProvider.handleOnDebugSessionStarted()), vscode.commands.registerCommand('extension.durableFunctionsMonitor', () => monitorTreeDataProvider.attachToTaskHub(null)), vscode.commands.registerCommand('extension.durableFunctionsMonitorPurgeHistory', () => monitorTreeDataProvider.attachToTaskHub(null, { id: 'purgeHistory' })), vscode.commands.registerCommand('extension.durableFunctionsMonitorCleanEntityStorage', () => monitorTreeDataProvider.attachToTaskHub(null, { id: 'cleanEntityStorage' })), vscode.commands.registerCommand('extension.durableFunctionsMonitorGotoInstanceId', () => monitorTreeDataProvider.gotoInstanceId(null)), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.purgeHistory', (item) => monitorTreeDataProvider.attachToTaskHub(item, { id: 'purgeHistory' })), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.cleanEntityStorage', (item) => monitorTreeDataProvider.attachToTaskHub(item, { id: 'cleanEntityStorage' })), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.startNewInstance', (item) => monitorTreeDataProvider.attachToTaskHub(item, { id: 'startNewInstance' })), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.attachToTaskHub', (item) => monitorTreeDataProvider.attachToTaskHub(item)), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.detachFromTaskHub', (item) => monitorTreeDataProvider.detachFromTaskHub(item)), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.deleteTaskHub', (item) => monitorTreeDataProvider.deleteTaskHub(item)), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.gotoInstanceId', (item) => monitorTreeDataProvider.gotoInstanceId(item)), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.refresh', () => monitorTreeDataProvider.refresh()), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.attachToAnotherTaskHub', () => monitorTreeDataProvider.attachToAnotherTaskHub()), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.detachFromAllTaskHubs', () => monitorTreeDataProvider.detachFromAllTaskHubs()), vscode.window.registerTreeDataProvider('durableFunctionsMonitorTreeView', monitorTreeDataProvider), vscode.commands.registerCommand('extension.durableFunctionsMonitorVisualizeAsGraph', (item) => functionGraphList.visualize(item)), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.openInstancesInStorageExplorer', (item) => monitorTreeDataProvider.openTableInStorageExplorer(item, 'Instances')), vscode.commands.registerCommand('durableFunctionsMonitorTreeView.openHistoryInStorageExplorer', (item) => monitorTreeDataProvider.openTableInStorageExplorer(item, 'History')), ); } export function deactivate() { functionGraphList.cleanup(); return monitorTreeDataProvider.cleanup(); } ================================================ FILE: durablefunctionsmonitor-vscodeext/src/test/runTest.ts ================================================ import * as path from 'path'; import { runTests } from 'vscode-test'; async function main() { try { // The folder containing the Extension Manifest package.json // Passed to `--extensionDevelopmentPath` const extensionDevelopmentPath = path.resolve(__dirname, '../../'); // The path to test runner // Passed to --extensionTestsPath const extensionTestsPath = path.resolve(__dirname, './suite/index'); // Download VS Code, unzip it and run the integration test await runTests({ extensionDevelopmentPath, extensionTestsPath }); } catch (err) { console.error('Failed to run tests'); process.exit(1); } } main(); ================================================ FILE: durablefunctionsmonitor-vscodeext/src/test/suite/extension.test.ts ================================================ import * as assert from 'assert'; // You can import and use all API from the 'vscode' module // as well as import your extension to test it import * as vscode from 'vscode'; // import * as myExtension from '../extension'; suite('Extension Test Suite', () => { vscode.window.showInformationMessage('Start all tests.'); test('Sample test', () => { assert.equal(-1, [1, 2, 3].indexOf(5)); assert.equal(-1, [1, 2, 3].indexOf(0)); }); }); ================================================ FILE: durablefunctionsmonitor-vscodeext/src/test/suite/index.ts ================================================ import * as path from 'path'; import * as Mocha from 'mocha'; import * as glob from 'glob'; export function run(): Promise { // Create the mocha test const mocha = new Mocha({ ui: 'tdd', }); mocha.useColors(true); const testsRoot = path.resolve(__dirname, '..'); return new Promise((c, e) => { glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { if (err) { return e(err); } // Add files to the test suite files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); try { // Run the mocha test mocha.run(failures => { if (failures > 0) { e(new Error(`${failures} tests failed.`)); } else { c(); } }); } catch (err) { e(err); } }); }); } ================================================ FILE: durablefunctionsmonitor-vscodeext/tsconfig.json ================================================ { "compilerOptions": { "module": "commonjs", "target": "es6", "outDir": "out", "lib": [ "dom", "es6" ], "sourceMap": true, "rootDir": "src", "strict": true, /* enable all strict type-checking options */ /* Additional Checks */ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ // "noUnusedParameters": true, /* Report errors on unused parameters. */ "resolveJsonModule": true }, "exclude": [ "node_modules", ".vscode-test", "backend" ] } ================================================ FILE: durablefunctionsmonitor-vscodeext/tslint.json ================================================ { "rules": { "no-string-throw": true, "no-unused-expression": true, "no-duplicate-variable": true, "curly": true, "class-name": true, "semicolon": [ true, "always" ], "triple-equals": true }, "defaultSeverity": "warning" } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/.gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # nuget.exe nuget.exe # Azure Functions localsettings file local.settings.json # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # DNX project.lock.json project.fragment.lock.json artifacts/ *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted #*.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config # NuGet v3's project.json files produces more ignoreable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings node_modules/ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc ================================================ FILE: durablefunctionsmonitor.dotnetbackend/.vscode/extensions.json ================================================ { "recommendations": [ "ms-azuretools.vscode-azurefunctions", "ms-vscode.csharp" ] } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/.vscode/launch.json ================================================ { "version": "0.2.0", "configurations": [ { "name": "Attach to .NET Functions", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/.vscode/settings.json ================================================ { "azureFunctions.deploySubpath": "bin/Release/netcoreapp3.1/publish", "azureFunctions.projectLanguage": "C#", "azureFunctions.projectRuntime": "~2", "debug.internalConsoleOptions": "neverOpen", "azureFunctions.preDeployTask": "publish" } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "clean", "command": "dotnet", "args": [ "clean", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "type": "process", "problemMatcher": "$msCompile" }, { "label": "build", "command": "dotnet", "args": [ "build", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "type": "process", "dependsOn": "clean", "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$msCompile" }, { "label": "clean release", "command": "dotnet", "args": [ "clean", "--configuration", "Release", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "type": "process", "problemMatcher": "$msCompile" }, { "label": "publish", "command": "dotnet", "args": [ "publish", "--configuration", "Release", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "type": "process", "dependsOn": "clean release", "problemMatcher": "$msCompile" }, { "type": "func", "dependsOn": "build", "options": { "cwd": "${workspaceFolder}/bin/Debug/netcoreapp3.1" }, "command": "host start", "isBackground": true, "problemMatcher": "$func-watch" } ] } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/Auth.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.IO; using System.Linq; using System.Reflection; using System.Security.Claims; using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.IdentityModel.Protocols; using Microsoft.IdentityModel.Protocols.OpenIdConnect; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json.Linq; namespace DurableFunctionsMonitor.DotNetBackend { internal static class Auth { // Magic constant for turning auth off public const string ISureKnowWhatIAmDoingNonce = "i_sure_know_what_i_am_doing"; // Value of WEBSITE_AUTH_UNAUTHENTICATED_ACTION config setting, when server-directed login flow is configured public const string UnauthenticatedActionRedirectToLoginPage = "RedirectToLoginPage"; // Default user name claim name public const string PreferredUserNameClaim = "preferred_username"; // Roles claim name private const string RolesClaim = "roles"; // If DFM_NONCE was passed as env variable, validates that the incoming request contains it. Throws UnauthorizedAccessException, if it doesn't. public static bool IsNonceSetAndValid(IHeaderDictionary headers) { // From now on it is the only way to skip auth if (DfmEndpoint.Settings.DisableAuthentication) { return true; } string nonce = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_NONCE); if (!string.IsNullOrEmpty(nonce)) { // Checking the nonce header if (nonce == headers["x-dfm-nonce"]) { return true; } throw new UnauthorizedAccessException("Invalid nonce. Call is rejected."); } return false; } // Validates that the incoming request is properly authenticated public static async Task ValidateIdentityAsync(ClaimsPrincipal principal, IHeaderDictionary headers, IRequestCookieCollection cookies, string taskHubName) { // First validating Task Hub name, if it was specified if (!string.IsNullOrEmpty(taskHubName)) { await ThrowIfTaskHubNameIsInvalid(taskHubName); } // Starting with nonce (used when running as a VsCode extension) if (IsNonceSetAndValid(headers)) { return; } // Then validating anti-forgery token ThrowIfXsrfTokenIsInvalid(headers, cookies); // Trying with EasyAuth var userNameClaim = principal?.FindFirst(DfmEndpoint.Settings.UserNameClaimName); if (userNameClaim == null) { // Validating and parsing the token ourselves principal = await ValidateToken(headers["Authorization"]); userNameClaim = principal.FindFirst(DfmEndpoint.Settings.UserNameClaimName); } if (userNameClaim == null) { throw new UnauthorizedAccessException($"'{DfmEndpoint.Settings.UserNameClaimName}' claim is missing in the incoming identity. Call is rejected."); } if (DfmEndpoint.Settings.AllowedUserNames != null) { if (!DfmEndpoint.Settings.AllowedUserNames.Contains(userNameClaim.Value)) { throw new UnauthorizedAccessException($"User {userNameClaim.Value} is not mentioned in {EnvVariableNames.DFM_ALLOWED_USER_NAMES} config setting. Call is rejected"); } } // Also validating App Roles, if set if (DfmEndpoint.Settings.AllowedAppRoles != null) { var roleClaims = principal.FindAll(RolesClaim); if (!roleClaims.Any(claim => DfmEndpoint.Settings.AllowedAppRoles.Contains(claim.Value))) { throw new UnauthorizedAccessException($"User {userNameClaim.Value} doesn't have any of roles mentioned in {EnvVariableNames.DFM_ALLOWED_APP_ROLES} config setting. Call is rejected"); } } } private static async Task> GetTaskHubNamesFromStorage(string connStringName) { var tableNames = await TableClient.GetTableClient(connStringName).ListTableNamesAsync(); var hubNames = new HashSet(tableNames .Where(n => n.EndsWith("Instances")) .Select(n => n.Remove(n.Length - "Instances".Length)), StringComparer.InvariantCultureIgnoreCase); hubNames.IntersectWith(tableNames .Where(n => n.EndsWith("History")) .Select(n => n.Remove(n.Length - "History".Length))); return hubNames; } // Lists all allowed Task Hubs. The returned HashSet is configured to ignore case. public static async Task> GetAllowedTaskHubNamesAsync() { // Respecting DFM_HUB_NAME, if it is set string dfmHubName = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_HUB_NAME); if (!string.IsNullOrEmpty(dfmHubName)) { return new HashSet(dfmHubName.Split(','), StringComparer.InvariantCultureIgnoreCase); } // Also respecting host.json setting, when set dfmHubName = TryGetHubNameFromHostJson(); if (!string.IsNullOrEmpty(dfmHubName)) { return new HashSet(new string[] { dfmHubName }, StringComparer.InvariantCultureIgnoreCase); } // Otherwise trying to load table names from the Storage try { var hubNames = await GetTaskHubNamesFromStorage(EnvVariableNames.AzureWebJobsStorage); // Also checking alternative connection strings foreach(var connName in AlternativeConnectionStringNames) { var connAndHubNames = (await GetTaskHubNamesFromStorage(Globals.GetFullConnectionStringEnvVariableName(connName))) .Select(hubName => Globals.CombineConnNameAndHubName(connName, hubName)); hubNames.UnionWith(connAndHubNames); } return hubNames; } catch (Exception) { // Intentionally returning null. Need to skip validation, if for some reason list of tables // cannot be loaded from Storage. But only in that case. return null; } } private static readonly Regex ValidTaskHubNameRegex = new Regex(@"^[\w-]{3,128}$", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static Task> HubNamesTask = GetAllowedTaskHubNamesAsync(); // Checks that a Task Hub name looks like a Task Hub name public static void ThrowIfTaskHubNameHasInvalidSymbols(string hubName) { if (!ValidTaskHubNameRegex.Match(hubName).Success) { throw new ArgumentException($"Task Hub name is invalid."); } } // Checks that a Task Hub name is valid for this instace public static async Task ThrowIfTaskHubNameIsInvalid(string hubName) { // Two bugs away. Validating that the incoming Task Hub name looks like a Task Hub name ThrowIfTaskHubNameHasInvalidSymbols(hubName); var hubNames = await HubNamesTask; if (hubNames == null || !hubNames.Contains(hubName)) { // doing double-check, by reloading hub names HubNamesTask = GetAllowedTaskHubNamesAsync(); hubNames = await HubNamesTask; } // If existing Task Hub names cannot be read from Storage, we can only skip validation and return true. // Note, that it will never be null, if DFM_HUB_NAME is set. So authZ is always in place. if (hubNames == null) { return; } if (!hubNames.Contains(hubName)) { throw new UnauthorizedAccessException($"Task Hub '{hubName}' is not allowed."); } } // Compares our XSRF tokens, that come from cookies and headers public static void ThrowIfXsrfTokenIsInvalid(IHeaderDictionary headers, IRequestCookieCollection cookies) { string tokenFromHeaders = headers[Globals.XsrfTokenCookieAndHeaderName]; if (string.IsNullOrEmpty(tokenFromHeaders)) { throw new UnauthorizedAccessException("XSRF token is missing."); } string tokenFromCookies = cookies[Globals.XsrfTokenCookieAndHeaderName]; if (tokenFromCookies != tokenFromHeaders) { throw new UnauthorizedAccessException("XSRF tokens do not match."); } } internal static string[] AlternativeConnectionStringNames = GetAlternativeConnectionStringNames().ToArray(); internal static IEnumerable GetAlternativeConnectionStringNames() { var envVars = Environment.GetEnvironmentVariables(); foreach(DictionaryEntry kv in envVars) { string variableName = kv.Key.ToString(); if (variableName.StartsWith(EnvVariableNames.DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX)) { yield return variableName.Substring(EnvVariableNames.DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX.Length); } } } private static string TryGetHubNameFromHostJson() { try { string assemblyLocation = Assembly.GetExecutingAssembly().Location; string functionAppFolder = Path.GetDirectoryName(Path.GetDirectoryName(assemblyLocation)); string hostJsonFileName = Path.Combine(functionAppFolder, "host.json"); dynamic hostJson = JObject.Parse(File.ReadAllText(hostJsonFileName)); string hubName = hostJson.extensions.durableTask.hubName; if (hubName.StartsWith('%') && hubName.EndsWith('%')) { hubName = Environment.GetEnvironmentVariable(hubName.Trim('%')); } return hubName; } catch (Exception) { return string.Empty; } } internal static JwtSecurityTokenHandler MockedJwtSecurityTokenHandler = null; private static async Task ValidateToken(string authorizationHeader) { if (string.IsNullOrEmpty(authorizationHeader)) { throw new UnauthorizedAccessException("No access token provided. Call is rejected."); } string clientId = Environment.GetEnvironmentVariable(EnvVariableNames.WEBSITE_AUTH_CLIENT_ID); if (string.IsNullOrEmpty(clientId)) { throw new UnauthorizedAccessException($"Specify the Valid Audience value via '{EnvVariableNames.WEBSITE_AUTH_CLIENT_ID}' config setting. Typically it is the ClientId of your AAD application."); } string openIdIssuer = Environment.GetEnvironmentVariable(EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER); if (string.IsNullOrEmpty(openIdIssuer)) { throw new UnauthorizedAccessException($"Specify the Valid Issuer value via '{EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER}' config setting. Typically it looks like 'https://login.microsoftonline.com//v2.0'."); } string token = authorizationHeader.Substring("Bearer ".Length); var validationParameters = new TokenValidationParameters { ValidAudiences = new[] { clientId }, ValidIssuers = new[] { openIdIssuer }, // Yes, it is OK to await a Task multiple times like this IssuerSigningKeys = await GetSigningKeysTask, // According to internet, this should not be needed (despite the fact that the default value is false) // But better to be two-bugs away ValidateIssuerSigningKey = true }; var handler = MockedJwtSecurityTokenHandler ?? new JwtSecurityTokenHandler(); return handler.ValidateToken(token, validationParameters, out SecurityToken validatedToken); } // Caching the keys for 24 hours internal static Task> GetSigningKeysTask = InitGetSigningKeysTask(86400, 0); internal static Task> InitGetSigningKeysTask(int cacheTtlInSeconds, int retryCount = 0) { // If you ever use this code in Asp.Net, don't forget to wrap this line with Task.Run(), to decouple from SynchronizationContext var task = GetSigningKeysAsync(); // Adding cache-flushing continuation task.ContinueWith(async t => { // If the data retrieval failed, then retrying immediately, but no more than 3 times. // Otherwise re-populating the cache in cacheTtlInSeconds. if (t.IsFaulted) { if (retryCount > 1) { return; } } else { await Task.Delay(TimeSpan.FromSeconds(cacheTtlInSeconds)); } GetSigningKeysTask = InitGetSigningKeysTask(cacheTtlInSeconds, t.IsFaulted ? retryCount + 1 : 0); }); return task; } private static async Task> GetSigningKeysAsync() { string openIdIssuer = Environment.GetEnvironmentVariable(EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER); if (string.IsNullOrEmpty(openIdIssuer)) { throw new UnauthorizedAccessException($"Specify the Valid Issuer value via '{EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER}' config setting. Typically it looks like 'https://login.microsoftonline.com//v2.0'."); } if (openIdIssuer.EndsWith("/v2.0")) { openIdIssuer = openIdIssuer.Substring(0, openIdIssuer.Length - "/v2.0".Length); } string stsDiscoveryEndpoint = $"{openIdIssuer}/.well-known/openid-configuration"; var configManager = new ConfigurationManager(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever()); var config = await configManager.GetConfigurationAsync(); return config.SigningKeys; } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/CustomTemplates.cs ================================================ using System; using System.Threading.Tasks; using System.Linq; using System.Collections.Generic; using Microsoft.WindowsAzure.Storage; using System.IO; using System.Text; using System.Collections.Concurrent; using System.Reflection; namespace DurableFunctionsMonitor.DotNetBackend { // Contains all logic of loading custom tab/html templates // TODO: respect alternative connection strings class CustomTemplates { internal static Task GetTabTemplatesAsync() { if (TabTemplatesTask == null) { TabTemplatesTask = string.IsNullOrEmpty(DfmEndpoint.Settings.CustomTemplatesFolderName) ? GetTabTemplatesFromStorageAsync() : GetTabTemplatesFromFolderAsync(DfmEndpoint.Settings.CustomTemplatesFolderName); } return TabTemplatesTask; } internal static Task GetCustomMetaTagCodeAsync() { if (CustomMetaTagCodeTask == null) { CustomMetaTagCodeTask = string.IsNullOrEmpty(DfmEndpoint.Settings.CustomTemplatesFolderName) ? GetCustomMetaTagCodeFromStorageAsync() : GetCustomMetaTagCodeFromFolderAsync(DfmEndpoint.Settings.CustomTemplatesFolderName); } return CustomMetaTagCodeTask; } internal static Task GetFunctionMapsAsync() { if (FunctionMapsTask == null) { FunctionMapsTask = string.IsNullOrEmpty(DfmEndpoint.Settings.CustomTemplatesFolderName) ? GetFunctionMapsFromStorageAsync() : GetFunctionMapsFromFolderAsync(DfmEndpoint.Settings.CustomTemplatesFolderName); } return FunctionMapsTask; } // Yes, it is OK to use Task in this way. // The Task code will only be executed once. All subsequent/parallel awaits will get the same returned value. // Tasks do have the same behavior as Lazy. private static Task TabTemplatesTask; private static Task CustomMetaTagCodeTask; private static Task FunctionMapsTask; // Tries to load liquid templates from underlying Azure Storage private static async Task GetTabTemplatesFromStorageAsync() { var result = new LiquidTemplatesMap(); try { string connectionString = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsStorage); var blobClient = CloudStorageAccount.Parse(connectionString).CreateCloudBlobClient(); // Listing all blobs in durable-functions-monitor/tab-templates folder var container = blobClient.GetContainerReference(Globals.TemplateContainerName); string templateFolderName = Globals.TabTemplateFolderName + "/"; var templateNames = await container.ListBlobsAsync(templateFolderName); // Loading blobs in parallel await Task.WhenAll(templateNames.Select(async templateName => { var blob = await blobClient.GetBlobReferenceFromServerAsync(templateName.Uri); // Expecting the blob name to be like "[Tab Name].[EntityTypeName].liquid" or just "[Tab Name].liquid" var nameParts = blob.Name.Substring(templateFolderName.Length).Split('.'); if (nameParts.Length < 2 || nameParts.Last() != "liquid") { return; } string tabName = nameParts[0]; string entityTypeName = nameParts.Length > 2 ? nameParts[1] : string.Empty; using (var stream = new MemoryStream()) { await blob.DownloadToStreamAsync(stream); string templateText = Encoding.UTF8.GetString(stream.ToArray()); result.GetOrAdd(entityTypeName, new ConcurrentDictionary())[tabName] = templateText; } })); } catch (Exception) { // Intentionally swallowing all exceptions here } return result; } // Tries to load liquid templates from local folder private static async Task GetTabTemplatesFromFolderAsync(string folderName) { var result = new LiquidTemplatesMap(); string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string templatesFolder = Path.Combine(binFolder, "..", folderName, Globals.TabTemplateFolderName); if (!Directory.Exists(templatesFolder)) { return result; } foreach(var templateFilePath in Directory.EnumerateFiles(templatesFolder, "*.liquid")) { var nameParts = Path.GetFileName(templateFilePath).Split('.'); if(nameParts.Length < 2) { continue; } string tabName = nameParts[0]; string entityTypeName = nameParts.Length > 2 ? nameParts[1] : string.Empty; string templateText = await File.ReadAllTextAsync(templateFilePath); result.GetOrAdd(entityTypeName, new ConcurrentDictionary())[tabName] = templateText; } return result; } // Tries to load code for our meta tag from Storage private static async Task GetCustomMetaTagCodeFromStorageAsync() { try { var blobClient = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsStorage)).CreateCloudBlobClient(); var container = blobClient.GetContainerReference(Globals.TemplateContainerName); var blob = container.GetBlobReference(Globals.CustomMetaTagBlobName); if (!(await blob.ExistsAsync())) { return null; } using (var stream = new MemoryStream()) { await blob.DownloadToStreamAsync(stream); return Encoding.UTF8.GetString(stream.ToArray()); } } catch (Exception) { // Intentionally swallowing all exceptions here return null; } } // Tries to load code for our meta tag from local folder private static async Task GetCustomMetaTagCodeFromFolderAsync(string folderName) { string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string filePath = Path.Combine(binFolder, "..", folderName, Globals.CustomMetaTagBlobName); if(!File.Exists(filePath)) { return null; } return await File.ReadAllTextAsync(filePath); } // Tries to load Function Maps from underlying Azure Storage private static async Task GetFunctionMapsFromStorageAsync() { var result = new FunctionMapsMap(); try { string connectionString = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsStorage); var blobClient = CloudStorageAccount.Parse(connectionString).CreateCloudBlobClient(); // Listing all blobs in durable-functions-monitor/function-maps folder var container = blobClient.GetContainerReference(Globals.TemplateContainerName); string functionMapFolderName = Globals.FunctionMapFolderName + "/"; var fileNames = await container.ListBlobsAsync(functionMapFolderName); // Loading blobs in parallel await Task.WhenAll(fileNames.Select(async templateName => { var blob = await blobClient.GetBlobReferenceFromServerAsync(templateName.Uri); // Expecting the blob name to be like "dfm-function-map.[TaskHubName].json" or just "dfm-function-map.json" var nameParts = blob.Name.Substring(functionMapFolderName.Length).Split('.'); if (nameParts.Length < 2 || nameParts.First() != Globals.FunctionMapFilePrefix || nameParts.Last() != "json") { return; } string taskHubName = nameParts.Length > 2 ? nameParts[1] : string.Empty; using (var stream = new MemoryStream()) { await blob.DownloadToStreamAsync(stream); string templateText = Encoding.UTF8.GetString(stream.ToArray()); result.TryAdd(taskHubName, templateText); } })); } catch (Exception) { // Intentionally swallowing all exceptions here } return result; } // Tries to load Function Maps from local folder private static async Task GetFunctionMapsFromFolderAsync(string folderName) { var result = new FunctionMapsMap(); string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string functionMapsFolder = Path.Combine(binFolder, "..", folderName, Globals.FunctionMapFolderName); if (!Directory.Exists(functionMapsFolder)) { return result; } foreach(var filePath in Directory.EnumerateFiles(functionMapsFolder, $"{Globals.FunctionMapFilePrefix}*.json")) { var nameParts = Path.GetFileName(filePath).Split('.'); if (nameParts.Length < 2) { continue; } string taskHubName = nameParts.Length > 2 ? nameParts[1] : string.Empty; string json = await File.ReadAllTextAsync(filePath); result.TryAdd(taskHubName, json); } return result; } } // Represents the liquid template map class LiquidTemplatesMap: ConcurrentDictionary> { public List GetTemplateNames(string entityTypeName) { var result = new List(); IDictionary templates; // Getting template names for all entity types if (this.TryGetValue(string.Empty, out templates)) { result.AddRange(templates.Keys); } // Getting template names for this particular entity type if (this.TryGetValue(entityTypeName, out templates)) { result.AddRange(templates.Keys); } result.Sort(); return result; } public string GetTemplate(string entityTypeName, string templateName) { string result = null; IDictionary templates; // Getting template names for all entity types if (this.TryGetValue(string.Empty, out templates)) { if(templates.TryGetValue(templateName, out result)){ return result; } } // Getting template names for this particular entity type if (this.TryGetValue(entityTypeName, out templates)) { if (templates.TryGetValue(templateName, out result)) { return result; } } return result; } } // Represents the map of Function Maps class FunctionMapsMap : ConcurrentDictionary { public string GetFunctionMap(string taskHubName) { string result = null; // Getting Function Map for this particular Task Hub if (!this.TryGetValue(taskHubName, out result)) { // Getting Function Map for all Task Hubs this.TryGetValue(string.Empty, out result); } return result; } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs ================================================ using Microsoft.Azure.WebJobs.Extensions.DurableTask; using System.Collections.Generic; using Newtonsoft.Json.Linq; using System; using Microsoft.WindowsAzure.Storage; using System.IO; using Newtonsoft.Json; using System.IO.Compression; namespace DurableFunctionsMonitor.DotNetBackend { // Adds extra fields to DurableOrchestrationStatus returned by IDurableClient.GetStatusAsync() class DetailedOrchestrationStatus : DurableOrchestrationStatus { public EntityTypeEnum EntityType { get; private set; } public EntityId? EntityId { get; private set; } public List TabTemplateNames { get { // The underlying Task never throws, so it's OK. var templatesMap = CustomTemplates.GetTabTemplatesAsync().Result; return templatesMap.GetTemplateNames(this.GetEntityTypeName()); } } public DetailedOrchestrationStatus(DurableOrchestrationStatus that, string connName) { this.Name = that.Name; this.InstanceId = that.InstanceId; this.CreatedTime = that.CreatedTime; this.LastUpdatedTime = that.LastUpdatedTime; this.RuntimeStatus = that.RuntimeStatus; this.Output = that.Output; this.CustomStatus = that.CustomStatus; this.History = that.History; // Detecting whether it is an Orchestration or a Durable Entity var match = ExpandedOrchestrationStatus.EntityIdRegex.Match(this.InstanceId); if (match.Success) { this.EntityType = EntityTypeEnum.DurableEntity; this.EntityId = new EntityId(match.Groups[1].Value, match.Groups[2].Value); } this.Input = this.ConvertInput(that.Input, connName); } internal string GetEntityTypeName() { return this.EntityType == EntityTypeEnum.DurableEntity ? this.EntityId.Value.EntityName : this.Name; } private JToken ConvertInput(JToken input, string connName) { if (this.EntityType != EntityTypeEnum.DurableEntity) { return input; } // Temp fix for https://github.com/Azure/azure-functions-durable-extension/issues/1786 if (input.Type == JTokenType.String && input.ToString().ToLowerInvariant().StartsWith("https://")) { string connectionString = Environment.GetEnvironmentVariable(Globals.GetFullConnectionStringEnvVariableName(connName)); var blobClient = CloudStorageAccount.Parse(connectionString).CreateCloudBlobClient(); var blob = blobClient.GetBlobReferenceFromServerAsync(new Uri(input.ToString())).Result; using (var stream = new MemoryStream()) { blob.DownloadToStreamAsync(stream).Wait(); stream.Position = 0; using (var gzipStream = new GZipStream(stream, CompressionMode.Decompress)) using (var streamReader = new StreamReader(gzipStream)) using (var jsonTextReader = new JsonTextReader(streamReader)) { input = JToken.ReadFrom(jsonTextReader); } } } var stateToken = input["state"]; if (stateToken == null || stateToken.Type != JTokenType.String) { return input; } var stateString = stateToken.Value(); if (!(stateString.StartsWith('{') && stateString.EndsWith('}'))) { return input; } // Converting JSON string into JSON object input["state"] = JObject.Parse(stateString); return input; } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/ExpandedOrchestrationStatus.cs ================================================ using System; using System.Threading.Tasks; using System.Linq; using Microsoft.Azure.WebJobs.Extensions.DurableTask; using System.Text.RegularExpressions; using System.Collections.Generic; namespace DurableFunctionsMonitor.DotNetBackend { enum EntityTypeEnum { Orchestration = 0, DurableEntity } // Adds extra fields to DurableOrchestrationStatus returned by IDurableClient.ListInstancesAsync() class ExpandedOrchestrationStatus : DurableOrchestrationStatus { public static readonly Regex EntityIdRegex = new Regex(@"@(\w+)@(.+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); public EntityTypeEnum EntityType { get; private set; } public EntityId? EntityId { get; private set; } public double Duration { get; private set; } public string LastEvent { get { if (this._detailsTask == null) { return string.Empty; } if (this._lastEvent != null) { return this._lastEvent; } this._lastEvent = string.Empty; DurableOrchestrationStatus details; try { // For some orchestrations getting an extended status might fail due to bugs in DurableOrchestrationClient. // So just returning an empty string in that case. details = this._detailsTask.Result; } catch(Exception) { return this._lastEvent; } if (details.History == null) { return this._lastEvent; } var lastEvent = details.History .Select(e => e["Name"] ?? e["FunctionName"] ) .LastOrDefault(e => e != null); if (lastEvent == null) { return this._lastEvent; } this._lastEvent = lastEvent.ToString(); return this._lastEvent; } } public ExpandedOrchestrationStatus(DurableOrchestrationStatus that, Task detailsTask, HashSet hiddenColumns) { this.Name = that.Name; this.InstanceId = that.InstanceId; this.CreatedTime = that.CreatedTime; this.LastUpdatedTime = that.LastUpdatedTime; this.Duration = Math.Round((that.LastUpdatedTime - that.CreatedTime).TotalMilliseconds); this.RuntimeStatus = that.RuntimeStatus; this.Input = hiddenColumns.Contains("input") ? null : that.Input; this.Output = hiddenColumns.Contains("output") ? null : that.Output; this.CustomStatus = hiddenColumns.Contains("customStatus") ? null : that.CustomStatus; // Detecting whether it is an Orchestration or a Durable Entity var match = EntityIdRegex.Match(this.InstanceId); if(match.Success) { this.EntityType = EntityTypeEnum.DurableEntity; this.EntityId = new EntityId(match.Groups[1].Value, match.Groups[2].Value); } this._detailsTask = detailsTask; } internal string GetEntityTypeName() { return this.EntityType == EntityTypeEnum.DurableEntity ? this.EntityId.Value.EntityName : this.Name; } private Task _detailsTask; private string _lastEvent; } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/FilterClause.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; namespace DurableFunctionsMonitor.DotNetBackend { // A parsed $filter clause class FilterClause { public FilterClause(string filterString) { if (filterString == null) { filterString = string.Empty; } filterString = this.ExtractTimeRange(filterString); filterString = this.ExtractRuntimeStatuses(filterString); this.ExtractPredicate(filterString); } public Func Predicate { get; private set; } public string FieldName { get; private set; } public DateTime? TimeFrom { get; private set; } public DateTime? TimeTill { get; private set; } public string[] RuntimeStatuses { get; private set; } private string ExtractTimeRange(string filterClause) { this.TimeFrom = null; this.TimeTill = null; if (string.IsNullOrEmpty(filterClause)) { return filterClause; } var match = TimeFromRegex.Match(filterClause); if (match.Success) { this.TimeFrom = DateTime.Parse(match.Groups[3].Value); filterClause = filterClause.Substring(0, match.Index) + filterClause.Substring(match.Index + match.Length); } match = TimeTillRegex.Match(filterClause); if (match.Success) { this.TimeTill = DateTime.Parse(match.Groups[2].Value); filterClause = filterClause.Substring(0, match.Index) + filterClause.Substring(match.Index + match.Length); } return filterClause; } private string ExtractRuntimeStatuses(string filterClause) { this.RuntimeStatuses = null; if (string.IsNullOrEmpty(filterClause)) { return filterClause; } var match = RuntimeStatusRegex.Match(filterClause); if (match.Success) { this.RuntimeStatuses = match.Groups[2].Value .Split(',').Where(s => !string.IsNullOrEmpty(s)) .Select(s => s.Trim(' ', '\'')).ToArray(); filterClause = filterClause.Substring(0, match.Index) + filterClause.Substring(match.Index + match.Length); } return filterClause; } private void ExtractPredicate(string filterString) { // startswith(field-name, 'value') eq true|false var match = StartsWithRegex.Match(filterString); if (match.Success) { bool result = true; if (match.Groups.Count > 4) { result = match.Groups[4].Value != "false"; } string arg = match.Groups[2].Value; this.Predicate = (v) => v.StartsWith(arg) == result; } // contains(field-name, 'value') eq true|false else if ((match = ContainsRegex.Match(filterString)).Success) { bool result = true; if (match.Groups.Count > 4) { result = match.Groups[4].Value != "false"; } string arg = match.Groups[2].Value; this.Predicate = (v) => v.Contains(arg) == result; } // field-name eq|ne 'value' else if ((match = EqRegex.Match(filterString)).Success) { string value = match.Groups[3].Value; string op = match.Groups[2].Value; this.Predicate = (v) => { bool res = value == "null" ? string.IsNullOrEmpty(v) : v == value; return op == "ne" ? !res : res; }; } // field-name in ('value1','value2','value3') else if ((match = InRegex.Match(filterString)).Success) { string value = match.Groups[2].Value.Trim(); string[] values; if (value.StartsWith("'")) { values = LazyQuotesRegex.Matches(value) .Select(m => m.Groups[1].Value) .ToArray(); } else { values = match.Groups[2].Value .Split(',').Where(s => !string.IsNullOrEmpty(s)) .Select(s => s.Trim(' ', '\'')) .ToArray(); } if ((match.Groups.Count) > 4 && (match.Groups[4].Value == "false")) { this.Predicate = (v) => !values.Contains(v); } else { this.Predicate = (v) => values.Contains(v); } } if (this.Predicate != null) { this.FieldName = match.Groups[1].Value; } } private static readonly Regex StartsWithRegex = new Regex(@"startswith\s*\(\s*(\w+)\s*,\s*'([^']+)'\s*\)\s*(eq)?\s*(true|false)?", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex ContainsRegex = new Regex(@"contains\s*\(\s*(\w+)\s*,\s*'([^']+)'\s*\)\s*(eq)?\s*(true|false)?", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex EqRegex = new Regex(@"(\w+)\s+(eq|ne)\s*'([^']+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex InRegex = new Regex(@"(\w+)\s+in\s*\((.*)\)\s*(eq)?\s*(true|false)?", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex LazyQuotesRegex = new Regex(@"'(.*?)'", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex RuntimeStatusRegex = new Regex(@"\s*(and\s+)?runtimeStatus\s+in\s*\(([^\)]*)\)(\s*and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex TimeFromRegex = new Regex(@"\s*(and\s+)?(createdTime|timestamp)\s+ge\s+'([\d-:.T]{19,}Z)'(\s*and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex TimeTillRegex = new Regex(@"\s*(and\s+)?createdTime\s+le\s+'([\d-:.T]{19,}Z)'(\s*and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled); } static class FilterClauseExtensions { // Applies a filter to a collection of items internal static IEnumerable ApplyFilter(this IEnumerable items, FilterClause filter) { if (string.IsNullOrEmpty(filter.FieldName)) { // if field to be filtered is not specified, returning everything foreach (var orchestration in items) { yield return orchestration; } } else { if (filter.Predicate == null) { // if filter expression is invalid, returning nothing yield break; } var propInfo = typeof(T).GetProperties() .FirstOrDefault(p => p.Name.Equals(filter.FieldName, StringComparison.InvariantCultureIgnoreCase)); if (propInfo == null) { // if field name is invalid, returning nothing yield break; } foreach (var item in items) { if (filter.Predicate(item.GetPropertyValueAsString(propInfo))) { yield return item; } } } } // Helper for formatting orchestration field values internal static string GetPropertyValueAsString(this T orchestration, PropertyInfo propInfo) { object propValue = propInfo.GetValue(orchestration); if (propValue == null) { return string.Empty; } // Explicitly handling DateTime as 'yyyy-MM-ddTHH:mm:ssZ' if (propInfo.PropertyType == typeof(DateTime)) { return ((DateTime)propValue).ToString(Globals.SerializerSettings.DateFormatString); } return propValue.ToString(); } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/Globals.cs ================================================ using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.WindowsAzure.Storage.Blob; using Microsoft.WindowsAzure.Storage.Table; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; using System.Runtime.CompilerServices; using System.Linq; [assembly: InternalsVisibleToAttribute("durablefunctionsmonitor.dotnetbackend.tests")] namespace DurableFunctionsMonitor.DotNetBackend { static class EnvVariableNames { public const string AzureWebJobsStorage = "AzureWebJobsStorage"; public const string WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"; public const string WEBSITE_AUTH_CLIENT_ID = "WEBSITE_AUTH_CLIENT_ID"; public const string WEBSITE_AUTH_OPENID_ISSUER = "WEBSITE_AUTH_OPENID_ISSUER"; public const string WEBSITE_AUTH_UNAUTHENTICATED_ACTION = "WEBSITE_AUTH_UNAUTHENTICATED_ACTION"; public const string DFM_ALLOWED_USER_NAMES = "DFM_ALLOWED_USER_NAMES"; public const string DFM_ALLOWED_APP_ROLES = "DFM_ALLOWED_APP_ROLES"; public const string DFM_HUB_NAME = "DFM_HUB_NAME"; public const string DFM_NONCE = "DFM_NONCE"; public const string DFM_CLIENT_CONFIG = "DFM_CLIENT_CONFIG"; public const string DFM_MODE = "DFM_MODE"; public const string DFM_USERNAME_CLAIM_NAME = "DFM_USERNAME_CLAIM_NAME"; public const string DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX = "DFM_ALTERNATIVE_CONNECTION_STRING_"; } static class Globals { public const string XsrfTokenCookieAndHeaderName = "x-dfm-xsrf-token"; public const string TemplateContainerName = "durable-functions-monitor"; public const string TabTemplateFolderName = "tab-templates"; public const string FunctionMapFolderName = "function-maps"; public const string FunctionMapFilePrefix = "dfm-func-map"; public const string CustomMetaTagBlobName = "custom-meta-tag.htm"; public const string ConnAndTaskHubNameSeparator = "-"; public const string HubNameRouteParamName = "{hubName}"; // Constant, that defines the /a/p/i/{connName}-{hubName} route prefix, to let Functions Host distinguish api methods from statics public const string ApiRoutePrefix = "a/p/i/{connName}-{hubName}"; public static void SplitConnNameAndHubName(string connAndHubName, out string connName, out string hubName) { int pos = connAndHubName.LastIndexOf("-"); if (pos < 0) { connName = null; hubName = connAndHubName; } else { connName = connAndHubName.Substring(0, pos); hubName = connAndHubName.Substring(pos + 1); } } public static string CombineConnNameAndHubName(string connName, string hubName) { if (string.IsNullOrEmpty(connName) || connName == "-") { return hubName; } return $"{connName}{ConnAndTaskHubNameSeparator}{hubName}"; } public static bool IsDefaultConnectionStringName(string connName) { return string.IsNullOrEmpty(connName) || connName == "-"; } public static string GetFullConnectionStringEnvVariableName(string connName) { if (IsDefaultConnectionStringName(connName)) { return EnvVariableNames.AzureWebJobsStorage; } else { return EnvVariableNames.DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX + connName; } } // Applies authN/authZ rules and handles incoming HTTP request. Also does error handling. public static async Task HandleAuthAndErrors(this HttpRequest req, string connName, string hubName, ILogger log, Func> todo) { return await HandleErrors(req, log, async () => { await Auth.ValidateIdentityAsync(req.HttpContext.User, req.Headers, req.Cookies, CombineConnNameAndHubName(connName, hubName)); return await todo(); }); } // Handles incoming HTTP request with error handling. public static async Task HandleErrors(this HttpRequest req, ILogger log, Func> todo) { try { return await todo(); } catch (UnauthorizedAccessException ex) { log.LogError(ex, $"DFM failed to authenticate request"); return new UnauthorizedResult(); } catch (Exception ex) { log.LogError(ex, "DFM failed"); return new BadRequestObjectResult(ex.Message); } } // Lists all blobs from Azure Blob Container public static async Task> ListBlobsAsync(this CloudBlobContainer container, string prefix) { var result = new List(); BlobContinuationToken token = null; do { var nextBatch = await container.ListBlobsSegmentedAsync(prefix, token); result.AddRange(nextBatch.Results); token = nextBatch.ContinuationToken; } while (token != null); return result; } // Fighting with https://github.com/Azure/azure-functions-durable-js/issues/94 // Could use a custom JsonConverter, but it won't be invoked for nested items :( public static string FixUndefinedsInJson(this string json) { return json.Replace("\": undefined", "\": null"); } // Shared JSON serialization settings public static JsonSerializerSettings SerializerSettings = GetSerializerSettings(); // A customized way of returning JsonResult, to cope with Functions v2/v3 incompatibility public static ContentResult ToJsonContentResult(this object result, Func applyThisToJson = null) { string json = JsonConvert.SerializeObject(result, Globals.SerializerSettings); if(applyThisToJson != null) { json = applyThisToJson(json); } return new ContentResult() { Content = json, ContentType = "application/json" }; } public static IEnumerable ApplyTop(this IEnumerable collection, IQueryCollection query) { var clause = query["$top"]; return clause.Any() ? collection.Take(int.Parse(clause)) : collection; } public static IEnumerable ApplySkip(this IEnumerable collection, IQueryCollection query) { var clause = query["$skip"]; return clause.Any() ? collection.Skip(int.Parse(clause)) : collection; } private static JsonSerializerSettings GetSerializerSettings() { var settings = new JsonSerializerSettings { Formatting = Formatting.Indented, DateFormatString = "yyyy-MM-ddTHH:mm:ssZ", ContractResolver = new CamelCasePropertyNamesContractResolver() }; settings.Converters.Add(new StringEnumConverter()); return settings; } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/HttpHandlerBase.cs ================================================ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs.Extensions.DurableTask; using Microsoft.Azure.WebJobs.Extensions.DurableTask.ContextImplementations; using Microsoft.Azure.WebJobs.Extensions.DurableTask.Options; using Microsoft.Extensions.Logging; namespace DurableFunctionsMonitor.DotNetBackend { // Base class for all HTTP request handlers. // Provides tooling for authZ and error handling. public abstract class HttpHandlerBase { // Default instance of IDurableClientFactory, injected via ctor private readonly IDurableClientFactory _durableClientFactory; public HttpHandlerBase(IDurableClientFactory durableClientFactory) { this._durableClientFactory = durableClientFactory; } // Applies authN/authZ rules and handles incoming HTTP request. Also creates IDurableClient (when needed) and does error handling. protected async Task HandleAuthAndErrors(IDurableClient defaultDurableClient, HttpRequest req, string connName, string hubName, ILogger log, Func> todo) { return await Globals.HandleErrors(req, log, async () => { await Auth.ValidateIdentityAsync(req.HttpContext.User, req.Headers, req.Cookies, Globals.CombineConnNameAndHubName(connName, hubName)); // For default storage connections using default durableClient, injected normally, as a parameter. // Only using IDurableClientFactory for custom connections, just in case. var durableClient = Globals.IsDefaultConnectionStringName(connName) ? defaultDurableClient : this._durableClientFactory.CreateClient(new DurableClientOptions { TaskHub = hubName, ConnectionName = Globals.GetFullConnectionStringEnvVariableName(connName) }); return await todo(durableClient); }); } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/OrchestrationHistory.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Azure.WebJobs.Extensions.DurableTask; using Microsoft.WindowsAzure.Storage.Table; using Newtonsoft.Json.Linq; namespace DurableFunctionsMonitor.DotNetBackend { static class OrchestrationHistory { /// /// Fetches orchestration instance history directly from XXXHistory table /// Tries to mimic this algorithm: https://github.com/Azure/azure-functions-durable-extension/blob/main/src/WebJobs.Extensions.DurableTask/ContextImplementations/DurableClient.cs#L718 /// Intentionally returns IEnumerable<>, because the consuming code not always iterates through all of it. /// public static IEnumerable GetHistoryDirectlyFromTable(IDurableClient durableClient, string connName, string hubName, string instanceId) { var tableClient = TableClient.GetTableClient(connName); // Need to fetch executionId first var instanceEntity = tableClient.ExecuteAsync($"{hubName}Instances", TableOperation.Retrieve(instanceId, string.Empty)) .Result.Result as DynamicTableEntity; string executionId = instanceEntity.Properties.ContainsKey("ExecutionId") ? instanceEntity.Properties["ExecutionId"].StringValue : null; var instanceIdFilter = TableQuery.CombineFilters ( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, instanceId), TableOperators.And, TableQuery.GenerateFilterCondition("ExecutionId", QueryComparisons.Equal, executionId) ); // Fetching _all_ correlated events with a separate parallel query. This seems to be the only option. var correlatedEventsQuery = new TableQuery().Where ( TableQuery.CombineFilters ( instanceIdFilter, TableOperators.And, TableQuery.GenerateFilterConditionForInt("TaskScheduledId", QueryComparisons.GreaterThanOrEqual, 0) ) ); var correlatedEventsTask = tableClient.GetAllAsync($"{hubName}History", correlatedEventsQuery) .ContinueWith(t => t.Result.ToDictionary(e => e.TaskScheduledId)); // Memorizing 'ExecutionStarted' event, to further correlate with 'ExecutionCompleted' HistoryEntity executionStartedEvent = null; // Fetching the history var query = new TableQuery().Where(instanceIdFilter); foreach (var evt in tableClient.GetAll($"{hubName}History", query)) { switch (evt.EventType) { case "TaskScheduled": case "SubOrchestrationInstanceCreated": // Trying to match the completion event correlatedEventsTask.Result.TryGetValue(evt.EventId, out var correlatedEvt); if (correlatedEvt != null) { yield return correlatedEvt.ToHistoryEvent ( evt._Timestamp, evt.Name, correlatedEvt.EventType == "GenericEvent" ? evt.EventType : null, evt.InstanceId ); } else { yield return evt.ToHistoryEvent(); } break; case "ExecutionStarted": executionStartedEvent = evt; yield return evt.ToHistoryEvent(null, evt.Name); break; case "ExecutionCompleted": case "ExecutionFailed": case "ExecutionTerminated": yield return evt.ToHistoryEvent(executionStartedEvent?._Timestamp); break; case "ContinueAsNew": case "TimerCreated": case "TimerFired": case "EventRaised": case "EventSent": yield return evt.ToHistoryEvent(); break; } } } private static HistoryEvent ToHistoryEvent(this HistoryEntity evt, DateTimeOffset? scheduledTime = null, string functionName = null, string eventType = null, string subOrchestrationId = null) { return new HistoryEvent { Timestamp = evt._Timestamp.ToUniversalTime(), EventType = eventType ?? evt.EventType, EventId = evt.TaskScheduledId, Name = string.IsNullOrEmpty(evt.Name) ? functionName : evt.Name, Result = evt.Result, Details = evt.Details, SubOrchestrationId = subOrchestrationId, ScheduledTime = scheduledTime, DurationInMs = scheduledTime.HasValue ? (evt._Timestamp - scheduledTime.Value).TotalMilliseconds : 0 }; } internal static HistoryEvent ToHistoryEvent(JToken token) { dynamic dynamicToken = token; return new HistoryEvent { Timestamp = dynamicToken.Timestamp, EventType = dynamicToken.EventType, EventId = dynamicToken.EventId, Name = string.IsNullOrEmpty(dynamicToken.Name) ? dynamicToken.FunctionName : dynamicToken.Name, ScheduledTime = dynamicToken.ScheduledTime, Result = dynamicToken.Result?.ToString(), Details = dynamicToken.Details?.ToString(), DurationInMs = dynamicToken.DurationInMs, SubOrchestrationId = dynamicToken.SubOrchestrationId }; } internal static IEnumerable ApplyTimeFrom(this IEnumerable events, DateTime? timeFrom) { if (timeFrom == null) { return events; } return events.Where(evt => evt.Timestamp >= timeFrom); } } /// /// Represents a record in orchestration's history /// public class HistoryEvent { public DateTimeOffset Timestamp { get; set; } public string EventType { get; set; } public int? EventId { get; set; } public string Name { get; set; } public DateTimeOffset? ScheduledTime { get; set; } public string Result { get; set; } public string Details { get; set; } public double? DurationInMs { get; set; } public string SubOrchestrationId { get; set; } } // Represents an record in XXXHistory table class HistoryEntity : TableEntity { public string InstanceId { get; set; } public string EventType { get; set; } public string Name { get; set; } public DateTimeOffset _Timestamp { get; set; } public string Result { get; set; } public string Details { get; set; } public int EventId { get; set; } public int? TaskScheduledId { get; set; } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/Setup.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Reflection; using Microsoft.Azure.WebJobs.Extensions.DurableTask; namespace DurableFunctionsMonitor.DotNetBackend { /// /// Defines functional mode for DurableFunctionsMonitor endpoint. /// public enum DfmMode { Normal = 0, ReadOnly } /// /// DurableFunctionsMonitor configuration settings /// public class DfmSettings { /// /// Turns authentication off for DurableFunctionsMonitor endpoint. /// WARNING: this might not only expose DurableFunctionsMonitor to the public, but also /// expose all other HTTP-triggered endpoints in your project. Make sure you know what you're doing. /// public bool DisableAuthentication { get; set; } /// /// Functional mode for DurableFunctionsMonitor endpoint. /// Currently only Normal (default) and ReadOnly modes are supported. /// public DfmMode Mode { get; set; } /// /// List of App Roles, that are allowed to access DurableFunctionsMonitor endpoint. Users/Groups then need /// to be assigned one of these roles via AAD Enterprise Applications->[your AAD app]->Users and Groups tab. /// Once set, the incoming access token is expected to contain one of these in its 'roles' claim. /// public IEnumerable AllowedAppRoles { get; set; } /// /// List of users, that are allowed to access DurableFunctionsMonitor endpoint. You typically put emails into here. /// Once set, the incoming access token is expected to contain one of these names in its 'preferred_username' claim. /// public IEnumerable AllowedUserNames { get; set; } /// /// Folder where to search for custom tab/html templates. /// Must be a part of your Functions project and be adjacent to your host.json file. /// public string CustomTemplatesFolderName { get; set; } /// /// Name of the claim (from ClaimsCredential) to be used as a user name. /// Defaults to "preferred_username" /// public string UserNameClaimName { get; set; } public DfmSettings() { this.UserNameClaimName = Auth.PreferredUserNameClaim; } } /// /// A set of extension points that can be customized by the client code, when DFM is used in 'injected' mode. /// public class DfmExtensionPoints { /// /// Routine for fetching orchestration history. /// Takes IDurableClient, connString env variable name, taskHubName and instanceId and returns IEnumerable[HistoryEvent]. /// Provide your own implementation for a custom storage provider. /// Default implementation fetches history directly from XXXHistory table. /// public Func> GetInstanceHistoryRoutine { get; set; } public DfmExtensionPoints() { this.GetInstanceHistoryRoutine = OrchestrationHistory.GetHistoryDirectlyFromTable; } } /// /// DurableFunctionsMonitor configuration /// public static class DfmEndpoint { /// /// Initializes DurableFunctionsMonitor endpoint with some settings /// /// When null, default settings are used /// Routines, that can be customized by client code. When null, default instance of DfmExtensionPoints is used public static void Setup(DfmSettings settings = null, DfmExtensionPoints extensionPoints = null) { string dfmNonce = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_NONCE); _settings = settings; if (_settings == null) { string dfmAllowedUserNames = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ALLOWED_USER_NAMES); string dfmAllowedAppRoles = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ALLOWED_APP_ROLES); string dfmMode = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_MODE); string dfmUserNameClaimName = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_USERNAME_CLAIM_NAME); _settings = new DfmSettings() { // Don't want to move the below initializatin to DfmSettings's ctor. The idea is: either _everything_ comes // from env variables or _everything_ is configured programmatically. To avoid unclarity we shouldn't mix these two approaches. DisableAuthentication = dfmNonce == Auth.ISureKnowWhatIAmDoingNonce, Mode = dfmMode == DfmMode.ReadOnly.ToString() ? DfmMode.ReadOnly : DfmMode.Normal, AllowedUserNames = dfmAllowedUserNames == null ? null : dfmAllowedUserNames.Split(','), AllowedAppRoles = dfmAllowedAppRoles == null ? null : dfmAllowedAppRoles.Split(','), UserNameClaimName = string.IsNullOrEmpty(dfmUserNameClaimName) ? Auth.PreferredUserNameClaim : dfmUserNameClaimName }; } if (extensionPoints != null) { _extensionPoints = extensionPoints; } // Also initializing CustomUserAgent value based on input parameters if (!string.IsNullOrEmpty(dfmNonce) && (dfmNonce != Auth.ISureKnowWhatIAmDoingNonce)) { _customUserAgent = $"DurableFunctionsMonitor-VsCodeExt/{GetVersion()}"; } else { _customUserAgent = $"DurableFunctionsMonitor-Injected/{GetVersion()}"; } } internal static DfmSettings Settings { get { if (_settings != null) { return _settings; } if (!AreWeInStandaloneMode()) { throw new InvalidOperationException("Make sure you called DfmEndpoint.Setup() in your code"); } DfmEndpoint.Setup(); // Need to reinitialize CustomUserAgent _customUserAgent = $"DurableFunctionsMonitor-Standalone/{GetVersion()}"; return _settings; } } internal static DfmExtensionPoints ExtensionPoints { get { return _extensionPoints; } } internal static string CustomUserAgent { get { return _customUserAgent; } } private static DfmSettings _settings = null; private static DfmExtensionPoints _extensionPoints = new DfmExtensionPoints(); private static string _customUserAgent; /// /// Checks whether we should do our internal initialization (Standalone mode) /// or throw an exception when not initialized (Injected mode) /// private static bool AreWeInStandaloneMode() { string assemblyLocation = Assembly.GetExecutingAssembly().Location; if (string.IsNullOrEmpty(assemblyLocation)) { return true; } string currentFolder = Path.GetDirectoryName(assemblyLocation); string targetsFileName = "durablefunctionsmonitor.dotnetbackend.targets"; // Using our .targets file as a marker. It should only appear in our own output folder return File.Exists(Path.Combine(currentFolder, targetsFileName)) || File.Exists(Path.Combine(Path.GetDirectoryName(currentFolder), targetsFileName)); } private static string GetVersion() { var version = typeof(DfmEndpoint).Assembly.GetName().Version; return $"{version.Major}.{version.Minor}.{version.Build}"; } } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/Common/TableClient.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.WindowsAzure.Storage.Table; using Microsoft.WindowsAzure.Storage; namespace DurableFunctionsMonitor.DotNetBackend { // CloudTableClient wrapper interface. Seems to be the only way to unit-test. public interface ITableClient { // Gets the list of table names Task> ListTableNamesAsync(); // Synchronously retrieves all results from Azure Table IEnumerable GetAll(string tableName, TableQuery query) where TEntity : TableEntity, new(); // Asynchronously retrieves all results from Azure Table Task> GetAllAsync(string tableName, TableQuery query) where TEntity : TableEntity, new(); // Executes a TableOperation Task ExecuteAsync(string tableName, TableOperation operation); } // CloudTableClient wrapper. Seems to be the only way to unit-test. class TableClient: ITableClient { // Cannot use DI functionality (our startup method will not be called when installed as a NuGet package), // so just leaving this as an internal static variable. internal static ITableClient MockedTableClient = null; public static ITableClient GetTableClient(string connStringName) { if (MockedTableClient != null) { return MockedTableClient; } return new TableClient(connStringName); } private TableClient(string connStringName) { string connectionString = Environment.GetEnvironmentVariable(connStringName); this._client = CloudStorageAccount.Parse(connectionString).CreateCloudTableClient(); } /// public async Task> ListTableNamesAsync() { // Overriding User-Agent header var operationContext = new OperationContext { CustomUserAgent = DfmEndpoint.CustomUserAgent }; var result = new List(); TableContinuationToken token = null; do { var nextBatch = await this._client.ListTablesSegmentedAsync(null, null, token, null, operationContext); result.AddRange(nextBatch.Results.Select(r => r.Name)); token = nextBatch.ContinuationToken; } while (token != null); return result; } /// public IEnumerable GetAll(string tableName, TableQuery query) where TEntity : TableEntity, new() { var table = this._client.GetTableReference(tableName); // Overriding User-Agent header var operationContext = new OperationContext { CustomUserAgent = DfmEndpoint.CustomUserAgent }; TableContinuationToken token = null; do { var nextBatch = table.ExecuteQuerySegmentedAsync(query, token, null, operationContext).Result; foreach (var evt in nextBatch.Results) { yield return evt; } token = nextBatch.ContinuationToken; } while (token != null); } /// public async Task> GetAllAsync(string tableName, TableQuery query) where TEntity : TableEntity, new() { var table = this._client.GetTableReference(tableName); // Overriding User-Agent header var operationContext = new OperationContext { CustomUserAgent = DfmEndpoint.CustomUserAgent }; var result = new List(); TableContinuationToken token = null; do { var nextBatch = await table.ExecuteQuerySegmentedAsync(query, token, null, operationContext); result.AddRange(nextBatch.Results); token = nextBatch.ContinuationToken; } while (token != null); return result; } /// public Task ExecuteAsync(string tableName, TableOperation operation) { // Overriding User-Agent header var operationContext = new OperationContext { CustomUserAgent = DfmEndpoint.CustomUserAgent }; return this._client.GetTableReference(tableName).ExecuteAsync(operation, null, operationContext); } private readonly CloudTableClient _client; } } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/DfmStatics/index.html ================================================ Durable Functions Monitor
================================================ FILE: durablefunctionsmonitor.dotnetbackend/DfmStatics/manifest.json ================================================ { "short_name": "Durable Functions Monitor", "name": "Durable Functions Monitor", "icons": [ { "src": "favicon.png", "sizes": "64x64", "type": "image/png" } ], "start_url": "./index.html", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } ================================================ FILE: durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/2.62e7949a.chunk.css ================================================ .react-vis-magic-css-import-rule{display:inherit}.rv-treemap{font-size:12px;position:relative}.rv-treemap__leaf{overflow:hidden;position:absolute}.rv-treemap__leaf--circle{align-items:center;border-radius:100%;display:flex;justify-content:center}.rv-treemap__leaf__content{overflow:hidden;padding:10px;text-overflow:ellipsis}.rv-xy-plot{color:#c3c3c3;position:relative}.rv-xy-plot canvas{pointer-events:none}.rv-xy-plot .rv-xy-canvas{pointer-events:none;position:absolute}.rv-xy-plot__inner{display:block}.rv-xy-plot__axis__line{fill:none;stroke-width:2px;stroke:#e6e6e9}.rv-xy-plot__axis__tick__line{stroke:#e6e6e9}.rv-xy-plot__axis__tick__text,.rv-xy-plot__axis__title text{fill:#6b6b76;font-size:11px}.rv-xy-plot__grid-lines__line{stroke:#e6e6e9}.rv-xy-plot__circular-grid-lines__line{fill-opacity:0;stroke:#e6e6e9}.rv-xy-plot__series,.rv-xy-plot__series path{pointer-events:all}.rv-xy-plot__series--line{fill:none;stroke:#000;stroke-width:2px}.rv-crosshair{position:absolute;font-size:11px;pointer-events:none}.rv-crosshair__line{background:#47d3d9;width:1px}.rv-crosshair__inner{position:absolute;text-align:left;top:0}.rv-crosshair__inner__content{border-radius:4px;background:#3a3a48;color:#fff;font-size:12px;padding:7px 10px;box-shadow:0 2px 4px rgba(0,0,0,.5)}.rv-crosshair__inner--left{right:4px}.rv-crosshair__inner--right{left:4px}.rv-crosshair__title{font-weight:700;white-space:nowrap}.rv-crosshair__item{white-space:nowrap}.rv-hint{position:absolute;pointer-events:none}.rv-hint__content{border-radius:4px;padding:7px 10px;font-size:12px;background:#3a3a48;box-shadow:0 2px 4px rgba(0,0,0,.5);color:#fff;text-align:left;white-space:nowrap}.rv-discrete-color-legend{box-sizing:border-box;overflow-y:auto;font-size:12px}.rv-discrete-color-legend.horizontal{white-space:nowrap}.rv-discrete-color-legend-item{color:#3a3a48;border-radius:1px;padding:9px 10px}.rv-discrete-color-legend-item.horizontal{display:inline-block}.rv-discrete-color-legend-item.horizontal .rv-discrete-color-legend-item__title{margin-left:0;display:block}.rv-discrete-color-legend-item__color{display:inline-block;vertical-align:middle;overflow:visible}.rv-discrete-color-legend-item__color__path{stroke:#dcdcdc;stroke-width:2px}.rv-discrete-color-legend-item__title{margin-left:10px}.rv-discrete-color-legend-item.disabled{color:#b8b8b8}.rv-discrete-color-legend-item.clickable{cursor:pointer}.rv-discrete-color-legend-item.clickable:hover{background:#f9f9f9}.rv-search-wrapper{display:flex;flex-direction:column}.rv-search-wrapper__form{flex:0 1}.rv-search-wrapper__form__input{width:100%;color:#a6a6a5;border:1px solid #e5e5e4;padding:7px 10px;font-size:12px;box-sizing:border-box;border-radius:2px;margin:0 0 9px;outline:0}.rv-search-wrapper__contents{flex:1 1;overflow:auto}.rv-continuous-color-legend{font-size:12px}.rv-continuous-color-legend .rv-gradient{height:4px;border-radius:2px;margin-bottom:5px}.rv-continuous-size-legend{font-size:12px}.rv-continuous-size-legend .rv-bubbles{text-align:justify;overflow:hidden;margin-bottom:5px;width:100%}.rv-continuous-size-legend .rv-bubble{background:#d8d9dc;display:inline-block;vertical-align:bottom}.rv-continuous-size-legend .rv-spacer{display:inline-block;font-size:0;line-height:0;width:100%}.rv-legend-titles{height:16px;position:relative}.rv-legend-titles__center,.rv-legend-titles__left,.rv-legend-titles__right{position:absolute;white-space:nowrap;overflow:hidden}.rv-legend-titles__center{display:block;text-align:center;width:100%}.rv-legend-titles__right{right:0}.rv-radial-chart .rv-xy-plot__series--label{pointer-events:none} /*# sourceMappingURL=2.62e7949a.chunk.css.map */ ================================================ FILE: durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.12374d2f.chunk.css ================================================ html{overflow-y:scroll!important}body{margin:0;padding:0;font-family:sans-serif;display:table;width:100%}.top-appbar{box-shadow:none!important}.top-toolbar{padding-top:5px;padding-bottom:18px;max-width:100vw;min-width:900px}.toolbar-select{min-width:150px}.long-text-cell{min-width:160px;max-width:250px}.long-text-cell-input{font-size:x-small!important}.long-text-cell-input:hover{text-decoration:underline;cursor:pointer;opacity:.8}.empty-table-placeholder{padding:30px;text-align:center}.name-cell{min-width:165px;word-break:break-all}.link-with-pointer-cursor{cursor:pointer}.time-zone-name-span{padding-left:2px;font-size:x-small}.title-typography{padding-right:10px}.app-bar{margin-bottom:10px}.instance-id-input{width:320px}.instance-id-valid .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline{border-color:green!important}.raw-html-div{padding:10px}.login-progress{text-align:center;margin-top:20px;margin-bottom:20px}.task-hub-list{padding-bottom:25px!important}.show-time-as-typography{padding-top:10px;padding-left:16px;padding-right:10px}.datetime-cell{min-width:145px}.till-checkbox{padding:20px 14px 4px 4px!important}.till-label{padding-left:15px!important}.from-input{width:215px;margin-left:10px!important}.till-input{width:215px}.time-period-menu-drop-btn{width:32px!important;min-width:32px!important;margin-top:16px!important}.filter-value-input{flex:1 1;margin-left:20px!important}.filtered-column-input{width:180px}.items-count-label{margin-top:8px!important;padding-left:15px;height:20px}.instance-id-cell{min-width:145px;max-width:270px;word-break:break-all}.output-cell{min-width:75px;max-width:200px}.entity-type-radio{margin-bottom:0}.toolbar-grid1{width:260px!important}.toolbar-grid1-item2{padding-top:20px;min-height:68px!important;min-width:257px!important}.toolbar-grid2{margin-left:40px;margin-right:40px}.toolbar-grid2-item-1{display:flex}.toolbar-grid2-item1-select{margin-left:20px!important}.toolbar-grid2-item2{padding-top:20px}.toolbar-grid3{width:auto!important}.toolbar-grid3-item2{padding-top:26px}.toolbar-runtime-status-group{margin-left:30px;margin-right:30px}.toolbar-runtime-status-group-label{padding-left:10px!important}.form-control-float-right{float:right}.column-hide-button{width:8px!important;padding:0!important;margin-right:-8px!important;float:right;opacity:.7}.unhide-button{vertical-align:text-bottom!important;font-size:12px}.tab-buttons{min-height:37px!important}.histogram-legend{padding-left:70px;white-space:normal!important}.histogram-legend-dark-mode>div>span{color:#d3d3d3}.status-checkbox{padding-left:10px!important;padding-top:5px!important;padding-bottom:5px!important}.autorefresh-select{min-width:130px}.refresh-button{width:130px}.selected-statuses-box{display:flex;flex-wrap:wrap}.message-snackbar{top:80px!important}.error-icon{margin-right:10px;margin-bottom:-7px}.error-snackbar-content{background-color:red!important}.settings-group{padding-top:5px;padding-left:20px;padding-bottom:5px}.link-to-az-func-as-a-graph{padding-top:10px}.metrics-chip{margin-right:3px;font-size:xx-small!important}.metrics-span{position:absolute;visibility:hidden;white-space:nowrap}.total-metrics-span{display:inherit;padding-top:9px;padding-left:20px}.diagram-div{padding-top:30px;padding-bottom:30px}.diagram-div>svg{display:block;margin:auto;width:100%!important;height:100%!important}.link-to-az-func-as-a-graph{float:right;padding-right:10px}.details-top-toolbar{padding-top:5px;padding-bottom:20px;max-width:100vw;min-width:900px}.grid-container{padding-top:20px;padding-right:15px}.grid-item{padding-left:15px}.details-datetime-cell{min-width:250px}.history-events-count-label{padding-top:10px;padding-left:16px;padding-bottom:10px}.details-refresh-button{width:90px}.functions-graph-tab-span{display:inline-flex;flex-direction:row}.functions-graph-link-icon{width:15px!important;margin-top:-2px;padding-left:5px}.history-filtered-column-input{width:150px}.history-filter-value-input{width:250px}.history-appbar{margin-top:15px;margin-bottom:15px;padding-top:5px;padding-bottom:5px}.history-toolbar{margin-left:-8px!important;padding-left:0!important;padding-top:17px!important}.history-from-input{width:210px}.history-from-checkbox{padding-top:18px!important}.history-from-label{margin-left:-40px}.purge-history-from-input,.purge-history-till-input{padding-bottom:20px!important}.purge-history-till-input{margin-left:20px!important}.purge-history-apply-to{padding-top:10px!important;padding-bottom:10px!important}.success-message{color:green!important}.dialog-text-field{padding-bottom:10px} /*# sourceMappingURL=main.12374d2f.chunk.css.map */ ================================================ FILE: durablefunctionsmonitor.dotnetbackend/DfmStatics/static/js/2.7e622828.chunk.js ================================================ /*! For license information please see 2.7e622828.chunk.js.LICENSE.txt */ (this["webpackJsonpdurablefunctionsmonitor.react"]=this["webpackJsonpdurablefunctionsmonitor.react"]||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(419)},function(e,t,n){e.exports=n(427)()},function(e,t,n){"use strict";n.d(t,"i",(function(){return r})),n.d(t,"j",(function(){return i})),n.d(t,"o",(function(){return o})),n.d(t,"l",(function(){return a})),n.d(t,"q",(function(){return s})),n.d(t,"w",(function(){return c})),n.d(t,"h",(function(){return u})),n.d(t,"r",(function(){return l})),n.d(t,"a",(function(){return f})),n.d(t,"d",(function(){return d})),n.d(t,"e",(function(){return h})),n.d(t,"g",(function(){return p})),n.d(t,"f",(function(){return g})),n.d(t,"k",(function(){return y})),n.d(t,"n",(function(){return m})),n.d(t,"p",(function(){return b})),n.d(t,"t",(function(){return v})),n.d(t,"s",(function(){return x})),n.d(t,"u",(function(){return w})),n.d(t,"v",(function(){return _})),n.d(t,"b",(function(){return k})),n.d(t,"c",(function(){return O})),n.d(t,"m",(function(){return E}));var r=1e-6,i=1e-12,o=Math.PI,a=o/2,s=o/4,c=2*o,u=180/o,l=o/180,f=Math.abs,d=Math.atan,h=Math.atan2,p=Math.cos,g=Math.ceil,y=Math.exp,m=(Math.floor,Math.log),b=Math.pow,v=Math.sin,x=Math.sign||function(e){return e>0?1:e<0?-1:0},w=Math.sqrt,_=Math.tan;function k(e){return e>1?0:e<-1?o:Math.acos(e)}function O(e){return e>1?a:e<-1?-a:Math.asin(e)}function E(e){return(e=v(e/2))*e}},function(e,t,n){"use strict";function r(){return r=Object.assign||function(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function s(e,t){var n="function"===typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function c(){for(var e=[],t=0;t2&&K("box");var n=H(t);return new we(e,$(n),n.name,!0,n.equals)},array:function(e,t){arguments.length>2&&K("array");var n=H(t);return Et(e,$(n),n.name)},map:function(e,t){arguments.length>2&&K("map");var n=H(t);return new Nt(e,$(n),n.name)},set:function(e,t){arguments.length>2&&K("set");var n=H(t);return new It(e,$(n),n.name)},object:function(e,t,n){"string"===typeof arguments[1]&&K("object");var r=H(n);if(!1===r.proxy)return rt({},e,t,r);var i=it(r),o=rt({},void 0,void 0,r),a=mt(o);return ot(a,e,t,i),a},ref:V,shallow:Y,deep:W,struct:q},X=function(e,t,n){if("string"===typeof arguments[1]||"symbol"===typeof arguments[1])return W.apply(null,arguments);if(lt(e))return e;var r=m(e)?X.object(e,t,n):Array.isArray(e)?X.array(e,t):x(e)?X.map(e,t):w(e)?X.set(e,t):e;if(r!==e)return r;d(!1)};function K(e){d("Expected one or two arguments to observable."+e+". Did you accidentally try to use observable."+e+" as decorator?")}Object.keys(G).forEach((function(e){return X[e]=G[e]}));var Z,J,Q=I(!1,(function(e,t,n,r,i){var a=n.get,s=n.set,c=i[0]||{};Ft(e).addComputedProp(e,t,o({get:a,set:s,context:e},c))})),ee=Q({equals:j.structural}),te=function(e,t,n){if("string"===typeof t)return Q.apply(null,arguments);if(null!==e&&"object"===typeof e&&1===arguments.length)return Q.apply(null,arguments);var r="object"===typeof t?t:{};return r.get=e,r.set="function"===typeof t?t:r.set,r.name=r.name||e.name||"",new _e(r)};te.struct=ee,function(e){e[e.NOT_TRACKING=-1]="NOT_TRACKING",e[e.UP_TO_DATE=0]="UP_TO_DATE",e[e.POSSIBLY_STALE=1]="POSSIBLY_STALE",e[e.STALE=2]="STALE"}(Z||(Z={})),function(e){e[e.NONE=0]="NONE",e[e.LOG=1]="LOG",e[e.BREAK=2]="BREAK"}(J||(J={}));var ne=function(e){this.cause=e};function re(e){return e instanceof ne}function ie(e){switch(e.dependenciesState){case Z.UP_TO_DATE:return!1;case Z.NOT_TRACKING:case Z.STALE:return!0;case Z.POSSIBLY_STALE:for(var t=fe(!0),n=ue(),r=e.observing,i=r.length,o=0;o0;je.computationDepth>0&&t&&d(!1),je.allowStateChanges||!t&&"strict"!==je.enforceActions||d(!1)}function ae(e,t,n){var r=fe(!0);he(e),e.newObserving=new Array(e.observing.length+100),e.unboundDepsCount=0,e.runId=++je.runId;var i,o=je.trackingDerivation;if(je.trackingDerivation=e,!0===je.disableErrorBoundaries)i=t.call(n);else try{i=t.call(n)}catch(a){i=new ne(a)}return je.trackingDerivation=o,function(e){for(var t=e.observing,n=e.observing=e.newObserving,r=Z.UP_TO_DATE,i=0,o=e.unboundDepsCount,a=0;ar&&(r=s.dependenciesState)}n.length=i,e.newObserving=null,o=t.length;for(;o--;){0===(s=t[o]).diffValue&&Me(s,e),s.diffValue=0}for(;i--;){var s;1===(s=n[i]).diffValue&&(s.diffValue=0,Ae(s,e))}r!==Z.UP_TO_DATE&&(e.dependenciesState=r,e.onBecomeStale())}(e),de(r),i}function se(e){var t=e.observing;e.observing=[];for(var n=t.length;n--;)Me(t[n],e);e.dependenciesState=Z.NOT_TRACKING}function ce(e){var t=ue();try{return e()}finally{le(t)}}function ue(){var e=je.trackingDerivation;return je.trackingDerivation=null,e}function le(e){je.trackingDerivation=e}function fe(e){var t=je.allowStateReads;return je.allowStateReads=e,t}function de(e){je.allowStateReads=e}function he(e){if(e.dependenciesState!==Z.UP_TO_DATE){e.dependenciesState=Z.UP_TO_DATE;for(var t=e.observing,n=t.length;n--;)t[n].lowestObserverState=Z.UP_TO_DATE}}var pe=0,ge=1;function ye(e,t,n){var r=function(){return me(e,t,n||this,arguments)};return r.isMobxAction=!0,r}function me(e,t,n,r){var i=function(e,t,n){var r=!1,i=0;var o=ue();Ne();var a=ve(!0),s=fe(!0),c={prevDerivation:o,prevAllowStateChanges:a,prevAllowStateReads:s,notifySpy:r,startTime:i,actionId:ge++,parentActionId:pe};return pe=c.actionId,c}();try{return t.apply(n,r)}catch(o){throw i.error=o,o}finally{!function(e){pe!==e.actionId&&d("invalid action stack. did you forget to finish an action?");pe=e.parentActionId,void 0!==e.error&&(je.suppressReactionErrors=!0);xe(e.prevAllowStateChanges),de(e.prevAllowStateReads),De(),le(e.prevDerivation),e.notifySpy&&!1;je.suppressReactionErrors=!1}(i)}}function be(e,t){var n,r=ve(e);try{n=t()}finally{xe(r)}return n}function ve(e){var t=je.allowStateChanges;return je.allowStateChanges=e,t}function xe(e){je.allowStateChanges=e}var we=function(e){function t(t,n,r,i,o){void 0===r&&(r="ObservableValue@"+f()),void 0===i&&(i=!0),void 0===o&&(o=j.default);var a=e.call(this,r)||this;return a.enhancer=n,a.name=r,a.equals=o,a.hasUnreportedChange=!1,a.value=n(t,void 0,r),a}return function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,e),t.prototype.dehanceValue=function(e){return void 0!==this.dehancer?this.dehancer(e):e},t.prototype.set=function(e){this.value;if((e=this.prepareNewValue(e))!==je.UNCHANGED){false,this.setNewValue(e)}},t.prototype.prepareNewValue=function(e){if(oe(this),bt(this)){var t=xt(this,{object:this,type:"update",newValue:e});if(!t)return je.UNCHANGED;e=t.newValue}return e=this.enhancer(e,this.value,this.name),this.equals(this.value,e)?je.UNCHANGED:e},t.prototype.setNewValue=function(e){var t=this.value;this.value=e,this.reportChanged(),wt(this)&&kt(this,{type:"update",object:this,newValue:e,oldValue:t})},t.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},t.prototype.intercept=function(e){return vt(this,e)},t.prototype.observe=function(e,t){return t&&e({object:this,type:"update",newValue:this.value,oldValue:void 0}),_t(this,e)},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.value+"]"},t.prototype.valueOf=function(){return O(this.get())},t.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},t}(S),_e=(v("ObservableValue",we),function(){function e(e){this.dependenciesState=Z.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=new Set,this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=Z.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+f(),this.value=new ne(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=J.NONE,h(e.get,"missing option for computed: get"),this.derivation=e.get,this.name=e.name||"ComputedValue@"+f(),e.set&&(this.setter=ye(this.name+"-setter",e.set)),this.equals=e.equals||(e.compareStructural||e.struct?j.structural:j.default),this.scope=e.context,this.requiresReaction=!!e.requiresReaction,this.keepAlive=!!e.keepAlive}return e.prototype.onBecomeStale=function(){!function(e){if(e.lowestObserverState!==Z.UP_TO_DATE)return;e.lowestObserverState=Z.POSSIBLY_STALE,e.observers.forEach((function(t){t.dependenciesState===Z.UP_TO_DATE&&(t.dependenciesState=Z.POSSIBLY_STALE,t.isTracing!==J.NONE&&Ie(t,e),t.onBecomeStale())}))}(this)},e.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(e){return e()}))},e.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(e){return e()}))},e.prototype.get=function(){this.isComputing&&d("Cycle detected in computation "+this.name+": "+this.derivation),0!==je.inBatch||0!==this.observers.size||this.keepAlive?(Re(this),ie(this)&&this.trackAndCompute()&&function(e){if(e.lowestObserverState===Z.STALE)return;e.lowestObserverState=Z.STALE,e.observers.forEach((function(t){t.dependenciesState===Z.POSSIBLY_STALE?t.dependenciesState=Z.STALE:t.dependenciesState===Z.UP_TO_DATE&&(e.lowestObserverState=Z.UP_TO_DATE)}))}(this)):ie(this)&&(this.warnAboutUntrackedRead(),Ne(),this.value=this.computeValue(!1),De());var e=this.value;if(re(e))throw e.cause;return e},e.prototype.peek=function(){var e=this.computeValue(!1);if(re(e))throw e.cause;return e},e.prototype.set=function(e){if(this.setter){h(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,e)}finally{this.isRunningSetter=!1}}else h(!1,!1)},e.prototype.trackAndCompute=function(){var e=this.value,t=this.dependenciesState===Z.NOT_TRACKING,n=this.computeValue(!0),r=t||re(e)||re(n)||!this.equals(e,n);return r&&(this.value=n),r},e.prototype.computeValue=function(e){var t;if(this.isComputing=!0,je.computationDepth++,e)t=ae(this,this.derivation,this.scope);else if(!0===je.disableErrorBoundaries)t=this.derivation.call(this.scope);else try{t=this.derivation.call(this.scope)}catch(n){t=new ne(n)}return je.computationDepth--,this.isComputing=!1,t},e.prototype.suspend=function(){this.keepAlive||(se(this),this.value=void 0)},e.prototype.observe=function(e,t){var n=this,r=!0,i=void 0;return Ze((function(){var o=n.get();if(!r||t){var a=ue();e({type:"update",object:n,newValue:o,oldValue:i}),le(a)}r=!1,i=o}))},e.prototype.warnAboutUntrackedRead=function(){},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},e.prototype.valueOf=function(){return O(this.get())},e.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},e}()),ke=v("ComputedValue",_e),Oe=function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},Ee={};function Se(){return"undefined"!==typeof window?window:"undefined"!==typeof r?r:"undefined"!==typeof self?self:Ee}var Ce=!0,Te=!1,je=function(){var e=Se();return e.__mobxInstanceCount>0&&!e.__mobxGlobals&&(Ce=!1),e.__mobxGlobals&&e.__mobxGlobals.version!==(new Oe).version&&(Ce=!1),Ce?e.__mobxGlobals?(e.__mobxInstanceCount+=1,e.__mobxGlobals.UNCHANGED||(e.__mobxGlobals.UNCHANGED={}),e.__mobxGlobals):(e.__mobxInstanceCount=1,e.__mobxGlobals=new Oe):(setTimeout((function(){Te||d("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new Oe)}();function Ae(e,t){e.observers.add(t),e.lowestObserverState>t.dependenciesState&&(e.lowestObserverState=t.dependenciesState)}function Me(e,t){e.observers.delete(t),0===e.observers.size&&Pe(e)}function Pe(e){!1===e.isPendingUnobservation&&(e.isPendingUnobservation=!0,je.pendingUnobservations.push(e))}function Ne(){je.inBatch++}function De(){if(0===--je.inBatch){ze();for(var e=je.pendingUnobservations,t=0;t0&&Pe(e),!1)}function Ie(e,t){if(console.log("[mobx.trace] '"+e.name+"' is invalidated due to a change in: '"+t.name+"'"),e.isTracing===J.BREAK){var n=[];Le(at(e),n,1),new Function("debugger;\n/*\nTracing '"+e.name+"'\n\nYou are entering this break point because derivation '"+e.name+"' is being traced and '"+t.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(e instanceof _e?e.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+n.join("\n")+"\n*/\n ")()}}function Le(e,t,n){t.length>=1e3?t.push("(and many more)"):(t.push(""+new Array(n).join("\t")+e.name),e.dependencies&&e.dependencies.forEach((function(e){return Le(e,t,n+1)})))}var Be=function(){function e(e,t,n,r){void 0===e&&(e="Reaction@"+f()),void 0===r&&(r=!1),this.name=e,this.onInvalidate=t,this.errorHandler=n,this.requiresObservable=r,this.observing=[],this.newObserving=[],this.dependenciesState=Z.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+f(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=J.NONE}return e.prototype.onBecomeStale=function(){this.schedule()},e.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,je.pendingReactions.push(this),ze())},e.prototype.isScheduled=function(){return this._isScheduled},e.prototype.runReaction=function(){if(!this.isDisposed){if(Ne(),this._isScheduled=!1,ie(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending}catch(e){this.reportExceptionInDerivation(e)}}De()}},e.prototype.track=function(e){if(!this.isDisposed){Ne();false,this._isRunning=!0;var t=ae(this,e,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&se(this),re(t)&&this.reportExceptionInDerivation(t.cause),De()}},e.prototype.reportExceptionInDerivation=function(e){var t=this;if(this.errorHandler)this.errorHandler(e,this);else{if(je.disableErrorBoundaries)throw e;var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";je.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(n,e),je.globalReactionErrorHandlers.forEach((function(n){return n(e,t)}))}},e.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Ne(),se(this),De()))},e.prototype.getDisposer=function(){var e=this.dispose.bind(this);return e[E]=this,e},e.prototype.toString=function(){return"Reaction["+this.name+"]"},e.prototype.trace=function(e){void 0===e&&(e=!1),function(){for(var e=[],t=0;t0||je.isRunningReactions||Fe(Ue)}function Ue(){je.isRunningReactions=!0;for(var e=je.pendingReactions,t=0;e.length>0;){100===++t&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+e[0]),e.splice(0));for(var n=e.splice(0),r=0,i=n.length;r",e):2===arguments.length&&"function"===typeof t?ye(e,t):1===arguments.length&&"string"===typeof e?qe(e):!0!==r?qe(t).apply(null,arguments):void b(e,t,ye(e.name||t,n.value,this))};function Xe(e,t){"string"===typeof e||e.name;return me(0,"function"===typeof e?e:t,this,void 0)}function Ke(e,t,n){b(e,t,ye(t,n.bind(e)))}function Ze(e,t){void 0===t&&(t=l);var n,r=t&&t.name||e.name||"Autorun@"+f();if(!t.scheduler&&!t.delay)n=new Be(r,(function(){this.track(a)}),t.onError,t.requiresObservable);else{var i=Qe(t),o=!1;n=new Be(r,(function(){o||(o=!0,i((function(){o=!1,n.isDisposed||n.track(a)})))}),t.onError,t.requiresObservable)}function a(){e(n)}return n.schedule(),n.getDisposer()}Ge.bound=function(e,t,n,r){return!0===r?(Ke(e,t,n.value),null):n?{configurable:!0,enumerable:!1,get:function(){return Ke(this,t,n.value||n.initializer.call(this)),this[t]},set:Ve}:{enumerable:!1,configurable:!0,set:function(e){Ke(this,t,e)},get:function(){}}};var Je=function(e){return e()};function Qe(e){return e.scheduler?e.scheduler:e.delay?function(t){return setTimeout(t,e.delay)}:Je}function et(e,t,n){return tt("onBecomeUnobserved",e,t,n)}function tt(e,t,n,r){var i="function"===typeof r?Vt(t,n):Vt(t),o="function"===typeof r?r:n,a=e+"Listeners";return i[a]?i[a].add(o):i[a]=new Set([o]),"function"!==typeof i[e]?d(!1):function(){var e=i[a];e&&(e.delete(o),0===e.size&&delete i[a])}}function nt(e){var t=e.enforceActions,n=e.computedRequiresReaction,r=e.computedConfigurable,i=e.disableErrorBoundaries,o=e.reactionScheduler,a=e.reactionRequiresObservable,s=e.observableRequiresReaction;if(!0===e.isolateGlobalState&&((je.pendingReactions.length||je.inBatch||je.isRunningReactions)&&d("isolateGlobalState should be called before MobX is running any reactions"),Te=!0,Ce&&(0===--Se().__mobxInstanceCount&&(Se().__mobxGlobals=void 0),je=new Oe)),void 0!==t){var c=void 0;switch(t){case!0:case"observed":c=!0;break;case!1:case"never":c=!1;break;case"strict":case"always":c="strict";break;default:d("Invalid value for 'enforceActions': '"+t+"', expected 'never', 'always' or 'observed'")}je.enforceActions=c,je.allowStateChanges=!0!==c&&"strict"!==c}void 0!==n&&(je.computedRequiresReaction=!!n),void 0!==a&&(je.reactionRequiresObservable=!!a),void 0!==s&&(je.observableRequiresReaction=!!s,je.allowStateReads=!je.observableRequiresReaction),void 0!==r&&(je.computedConfigurable=!!r),void 0!==i&&(!0===i&&console.warn("WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled."),je.disableErrorBoundaries=!!i),o&&We(o)}function rt(e,t,n,r){var i=it(r=H(r));return R(e),Ft(e,r.name,i.enhancer),t&&ot(e,t,n,i),e}function it(e){return e.defaultDecorator||(!1===e.deep?V:W)}function ot(e,t,n,r){var i,o;Ne();try{var s=_(t);try{for(var c=a(s),u=c.next();!u.done;u=c.next()){var l=u.value,f=Object.getOwnPropertyDescriptor(t,l);0;var d=(n&&l in n?n[l]:f.get?Q:r)(e,l,f,!0);d&&Object.defineProperty(e,l,d)}}catch(h){i={error:h}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(i)throw i.error}}}finally{De()}}function at(e,t){return st(Vt(e,t))}function st(e){var t={name:e.name};return e.observing&&e.observing.length>0&&(t.dependencies=function(e){var t=[];return e.forEach((function(e){-1===t.indexOf(e)&&t.push(e)})),t}(e.observing).map(st)),t}function ct(){this.message="FLOW_CANCELLED"}function ut(e,t){return null!==e&&void 0!==e&&(void 0!==t?!!Yt(e)&&e[E].values.has(t):Yt(e)||!!e[E]||C(e)||He(e)||ke(e))}function lt(e){return 1!==arguments.length&&d(!1),ut(e)}function ft(e,t,n){if(2!==arguments.length||Lt(e))if(Yt(e)){var r=e[E],i=r.values.get(t);i?r.write(t,n):r.addObservableProp(t,n,r.defaultEnhancer)}else if(Dt(e))e.set(t,n);else if(Lt(e))e.add(t);else{if(!At(e))return d(!1);"number"!==typeof t&&(t=parseInt(t,10)),h(t>=0,"Not a valid index: '"+t+"'"),Ne(),t>=e.length&&(e.length=t+1),e[t]=n,De()}else{Ne();var o=t;try{for(var a in o)ft(e,a,o[a])}finally{De()}}}ct.prototype=Object.create(Error.prototype);function dt(e){switch(e.length){case 0:return je.trackingDerivation;case 1:return Vt(e[0]);case 2:return Vt(e[0],e[1])}}function ht(e,t){void 0===t&&(t=void 0),Ne();try{return e.apply(t)}finally{De()}}function pt(e){return e[E]}function gt(e){return"string"===typeof e||"number"===typeof e||"symbol"===typeof e}var yt={has:function(e,t){if(t===E||"constructor"===t||t===A)return!0;var n=pt(e);return gt(t)?n.has(t):t in e},get:function(e,t){if(t===E||"constructor"===t||t===A)return e[t];var n=pt(e),r=n.values.get(t);if(r instanceof S){var i=r.get();return void 0===i&&n.has(t),i}return gt(t)&&n.has(t),e[t]},set:function(e,t,n){return!!gt(t)&&(ft(e,t,n),!0)},deleteProperty:function(e,t){return!!gt(t)&&(pt(e).remove(t),!0)},ownKeys:function(e){return pt(e).keysAtom.reportObserved(),Reflect.ownKeys(e)},preventExtensions:function(e){return d("Dynamic observable objects cannot be frozen"),!1}};function mt(e){var t=new Proxy(e,yt);return e[E].proxy=t,t}function bt(e){return void 0!==e.interceptors&&e.interceptors.length>0}function vt(e,t){var n=e.interceptors||(e.interceptors=[]);return n.push(t),p((function(){var e=n.indexOf(t);-1!==e&&n.splice(e,1)}))}function xt(e,t){var n=ue();try{for(var r=c(e.interceptors||[]),i=0,o=r.length;i0}function _t(e,t){var n=e.changeListeners||(e.changeListeners=[]);return n.push(t),p((function(){var e=n.indexOf(t);-1!==e&&n.splice(e,1)}))}function kt(e,t){var n=ue(),r=e.changeListeners;if(r){for(var i=0,o=(r=r.slice()).length;i0?e.map(this.dehancer):e},e.prototype.intercept=function(e){return vt(this,e)},e.prototype.observe=function(e,t){return void 0===t&&(t=!1),t&&e({object:this.proxy,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),_t(this,e)},e.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},e.prototype.setArrayLength=function(e){if("number"!==typeof e||e<0)throw new Error("[mobx.array] Out of range: "+e);var t=this.values.length;if(e!==t)if(e>t){for(var n=new Array(e-t),r=0;ri?e=i:e<0&&(e=Math.max(0,i+e)),t=1===arguments.length?i-e:void 0===t||null===t?0:Math.max(0,Math.min(t,i-e)),void 0===n&&(n=u),bt(this)){var o=xt(this,{object:this.proxy,type:"splice",index:e,removedCount:t,added:n});if(!o)return u;t=o.removedCount,n=o.added}n=0===n.length?n:n.map((function(e){return r.enhancer(e,void 0)}));var a=this.spliceItemsIntoValues(e,t,n);return 0===t&&0===n.length||this.notifyArraySplice(e,n,a),this.dehanceValues(a)},e.prototype.spliceItemsIntoValues=function(e,t,n){var r;if(n.length<1e4)return(r=this.values).splice.apply(r,c([e,t],n));var i=this.values.slice(e,e+t);return this.values=this.values.slice(0,e).concat(n,this.values.slice(e+t)),i},e.prototype.notifyArrayChildUpdate=function(e,t,n){var r=!this.owned&&!1,i=wt(this),o=i||r?{object:this.proxy,type:"update",index:e,newValue:t,oldValue:n}:null;this.atom.reportChanged(),i&&kt(this,o)},e.prototype.notifyArraySplice=function(e,t,n){var r=!this.owned&&!1,i=wt(this),o=i||r?{object:this.proxy,type:"splice",index:e,removed:n,added:t,removedCount:n.length,addedCount:t.length}:null;this.atom.reportChanged(),i&&kt(this,o)},e}(),Ct={intercept:function(e){return this[E].intercept(e)},observe:function(e,t){return void 0===t&&(t=!1),this[E].observe(e,t)},clear:function(){return this.splice(0)},replace:function(e){var t=this[E];return t.spliceWithArray(0,t.values.length,e)},toJS:function(){return this.slice()},toJSON:function(){return this.toJS()},splice:function(e,t){for(var n=[],r=2;r-1&&(this.splice(n,1),!0)},get:function(e){var t=this[E];if(t){if(e=0&&n++}e=Kt(e),t=Kt(t);var s="[object Array]"===a;if(!s){if("object"!=typeof e||"object"!=typeof t)return!1;var c=e.constructor,u=t.constructor;if(c!==u&&!("function"===typeof c&&c instanceof c&&"function"===typeof u&&u instanceof u)&&"constructor"in e&&"constructor"in t)return!1}if(0===n)return!1;n<0&&(n=-1),i=i||[];for(var l=(r=r||[]).length;l--;)if(r[l]===e)return i[l]===t;if(r.push(e),i.push(t),s){if((l=e.length)!==t.length)return!1;for(;l--;)if(!Xt(e[l],t[l],n-1,r,i))return!1}else{var f=Object.keys(e),d=void 0;if(l=f.length,Object.keys(t).length!==l)return!1;for(;l--;)if(!Zt(t,d=f[l])||!Xt(e[d],t[d],n-1,r,i))return!1}return r.pop(),i.pop(),!0}function Kt(e){return At(e)?e.slice():x(e)||Dt(e)||w(e)||Lt(e)?Array.from(e.entries()):e}function Zt(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Jt(e){return e[Symbol.iterator]=Qt,e}function Qt(){return this}if("undefined"===typeof Proxy||"undefined"===typeof Symbol)throw new Error("[mobx] MobX 5+ requires Proxy and Symbol objects. If your environment doesn't support Symbol or Proxy objects, please downgrade to MobX 4. For React Native Android, consider upgrading JSCore.");"object"===typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:Ye,extras:{getDebugName:function(e,t){return(void 0!==t?Vt(e,t):Yt(e)||Dt(e)||Lt(e)?qt(e):Vt(e)).name}},$mobx:E})}).call(this,n(156),n(113))},function(e,t,n){"use strict";function r(e,t,n,r,i){var o={};return Object.keys(r).forEach((function(e){o[e]=r[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e){var t,n,i="";if(e)if("object"===typeof e)if(e.push)for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}},function(e,t,n){"use strict";var r=n(3),i=n(7),o=n(0),a=n.n(o),s=(n(1),n(209)),c=n.n(s),u=n(779),l=n(747),f=n(266),d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var o=t.defaultTheme,s=t.withTheme,d=void 0!==s&&s,h=t.name,p=Object(i.a)(t,["defaultTheme","withTheme","name"]);var g=h,y=Object(u.a)(e,Object(r.a)({defaultTheme:o,Component:n,name:h||n.displayName,classNamePrefix:g},p)),m=a.a.forwardRef((function(e,t){e.classes;var s,c=e.innerRef,u=Object(i.a)(e,["classes","innerRef"]),p=y(Object(r.a)({},n.defaultProps,e)),g=u;return("string"===typeof h||d)&&(s=Object(f.a)()||o,h&&(g=Object(l.a)({theme:s,name:h,props:u})),d&&!g.theme&&(g.theme=s)),a.a.createElement(n,Object(r.a)({ref:c||t,classes:p},g))}));return c()(m,n),m}},h=n(101);t.a=function(e,t){return d(e,Object(r.a)({defaultTheme:h.a},t))}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e,t){for(var n=0;nt?1:e>=t?0:NaN},i=function(e){var t;return 1===e.length&&(t=e,e=function(e,n){return r(t(e),n)}),{left:function(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[o],n)<0?r=o+1:i=o}return r},right:function(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[o],n)>0?i=o:r=o+1}return r}}};var o=i(r),a=o.right,s=o.left,c=a,u=function(e,t){null==t&&(t=l);for(var n=0,r=e.length-1,i=e[0],o=new Array(r<0?0:r);ne?1:t>=e?0:NaN},h=function(e){return null===e?NaN:+e},p=function(e,t){var n,r,i=e.length,o=0,a=-1,s=0,c=0;if(null==t)for(;++a1)return c/(o-1)},g=function(e,t){var n=p(e,t);return n?Math.sqrt(n):n},y=function(e,t){var n,r,i,o=e.length,a=-1;if(null==t){for(;++a=n)for(r=i=n;++an&&(r=n),i=n)for(r=i=n;++an&&(r=n),i0)return[e];if((r=t0)for(e=Math.ceil(e/a),t=Math.floor(t/a),o=new Array(i=Math.ceil(t-e+1));++s=0?(o>=k?10:o>=O?5:o>=E?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=k?10:o>=O?5:o>=E?2:1)}function T(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=k?i*=10:o>=O?i*=5:o>=E&&(i*=2),tf;)d.pop(),--h;var p,g=new Array(h+1);for(i=0;i<=h;++i)(p=g[i]=[]).x0=i>0?d[i-1]:l,p.x1=i=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,o=Math.floor(i),a=+n(e[o],o,e);return a+(+n(e[o+1],o+1,e)-a)*(i-o)}},P=function(e,t,n){return e=v.call(e,h).sort(r),Math.ceil((n-t)/(2*(M(e,.75)-M(e,.25))*Math.pow(e.length,-1/3)))},N=function(e,t,n){return Math.ceil((n-t)/(3.5*g(e)*Math.pow(e.length,-1/3)))},D=function(e,t){var n,r,i=e.length,o=-1;if(null==t){for(;++o=n)for(r=n;++or&&(r=n)}else for(;++o=n)for(r=n;++or&&(r=n);return r},R=function(e,t){var n,r=e.length,i=r,o=-1,a=0;if(null==t)for(;++o=0;)for(t=(r=e[i]).length;--t>=0;)n[--a]=r[t];return n},B=function(e,t){var n,r,i=e.length,o=-1;if(null==t){for(;++o=n)for(r=n;++on&&(r=n)}else for(;++o=n)for(r=n;++on&&(r=n);return r},F=function(e,t){for(var n=t.length,r=new Array(n);n--;)r[n]=e[t[n]];return r},z=function(e,t){if(n=e.length){var n,i,o=0,a=0,s=e[a];for(null==t&&(t=r);++o1?0:e<-1?f:Math.acos(e)}function g(e){return e>=1?d:e<=-1?-d:Math.asin(e)}},function(e,t,n){"use strict";function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}function i(e){return i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}n.d(t,"a",(function(){return s}));var o=n(13);function a(e,t){return!t||"object"!==i(t)&&"function"!==typeof t?Object(o.a)(e):t}function s(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,i=r(e);if(t){var o=r(this).constructor;n=Reflect.construct(i,arguments,o)}else n=i.apply(this,arguments);return a(this,n)}}},function(e,t,n){"use strict";function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(395);function i(e){if("string"!==typeof e)throw new Error(Object(r.a)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"d",(function(){return s})),n.d(t,"b",(function(){return u})),n.d(t,"c",(function(){return l})),n.d(t,"a",(function(){return f})),n.d(t,"e",(function(){return d}));var r=n(395);function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return Math.min(Math.max(t,e),n)}function o(e){if(e.type)return e;if("#"===e.charAt(0))return o(function(e){e=e.substr(1);var t=new RegExp(".{1,".concat(e.length>=6?2:1,"}"),"g"),n=e.match(t);return n&&1===n[0].length&&(n=n.map((function(e){return e+e}))),n?"rgb".concat(4===n.length?"a":"","(").concat(n.map((function(e,t){return t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3})).join(", "),")"):""}(e));var t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla"].indexOf(n))throw new Error(Object(r.a)(3,e));var i=e.substring(t+1,e.length-1).split(",");return{type:n,values:i=i.map((function(e){return parseFloat(e)}))}}function a(e){var t=e.type,n=e.values;return-1!==t.indexOf("rgb")?n=n.map((function(e,t){return t<3?parseInt(e,10):e})):-1!==t.indexOf("hsl")&&(n[1]="".concat(n[1],"%"),n[2]="".concat(n[2],"%")),"".concat(t,"(").concat(n.join(", "),")")}function s(e,t){var n=c(e),r=c(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function c(e){var t="hsl"===(e=o(e)).type?o(function(e){var t=(e=o(e)).values,n=t[0],r=t[1]/100,i=t[2]/100,s=r*Math.min(i,1-i),c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e+n/30)%12;return i-s*Math.max(Math.min(t-3,9-t,1),-1)},u="rgb",l=[Math.round(255*c(0)),Math.round(255*c(8)),Math.round(255*c(4))];return"hsla"===e.type&&(u+="a",l.push(t[3])),a({type:u,values:l})}(e)).values:e.values;return t=t.map((function(e){return(e/=255)<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)})),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.15;return c(e)>.5?f(e,t):d(e,t)}function l(e,t){return e=o(e),t=i(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),e.values[3]=t,a(e)}function f(e,t){if(e=o(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb"))for(var n=0;n<3;n+=1)e.values[n]*=1-t;return a(e)}function d(e,t){if(e=o(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(var n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;return a(e)}},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return M}));var r=n(25),i=n(58),o=n(0),a=n.n(o),s=n(4),c=0;var u={};function l(e){return u[e]||(u[e]=function(e){if("function"===typeof Symbol)return Symbol(e);var t="__$mobx-react "+e+" ("+c+")";return c++,t}(e)),u[e]}function f(e,t){if(d(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var i=0;i0;)r[i]=arguments[i+2];t.locks++;try{var o;return void 0!==e&&null!==e&&(o=e.apply(this,r)),o}finally{t.locks--,0===t.locks&&t.methods.forEach((function(e){e.apply(n,r)}))}}function m(e,t){return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];y.call.apply(y,[this,e,t].concat(n))}}function b(e,t,n){var r=function(e,t){var n=e[p]=e[p]||{},r=n[t]=n[t]||{};return r.locks=r.locks||0,r.methods=r.methods||[],r}(e,t);r.methods.indexOf(n)<0&&r.methods.push(n);var i=Object.getOwnPropertyDescriptor(e,t);if(!i||!i[g]){var o=e[t],a=v(e,t,i?i.enumerable:void 0,r,o);Object.defineProperty(e,t,a)}}function v(e,t,n,r,i){var o,a=m(i,r);return(o={})[g]=!0,o.get=function(){return a},o.set=function(i){if(this===e)a=m(i,r);else{var o=v(this,t,n,r,i);Object.defineProperty(this,t,o)}},o.configurable=!0,o.enumerable=n,o}var x=s.a||"$mobx",w=l("isUnmounted"),_=l("skipRender"),k=l("isForcingUpdate");function O(e){var t=e.prototype;if(t.componentWillReact)throw new Error("The componentWillReact life-cycle event is no longer supported");if(e.__proto__!==o.PureComponent)if(t.shouldComponentUpdate){if(t.shouldComponentUpdate!==S)throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.")}else t.shouldComponentUpdate=S;C(t,"props"),C(t,"state");var n=t.render;return t.render=function(){return E.call(this,n)},b(t,"componentWillUnmount",(function(){if(!0!==Object(i.b)()){if(this.render[x])this.render[x].dispose();else;this[w]=!0}})),e}function E(e){var t=this;if(!0===Object(i.b)())return e.call(this);h(this,_,!1),h(this,k,!1);var n,r=(n=this).displayName||n.name||n.constructor&&(n.constructor.displayName||n.constructor.name)||"",a=e.bind(this),c=!1,u=new s.b(r+".render()",(function(){if(!c&&(c=!0,!0!==t[w])){var e=!0;try{h(t,k,!0),t[_]||o.Component.prototype.forceUpdate.call(t),e=!1}finally{h(t,k,!1),e&&u.dispose()}}}));function l(){c=!1;var e=void 0,t=void 0;if(u.track((function(){try{t=Object(s.c)(!1,a)}catch(n){e=n}})),e)throw e;return t}return u.reactComponent=this,l[x]=u,this.render=l,l.call(this)}function S(e,t){return Object(i.b)()&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==t||!f(this.props,e)}function C(e,t){var n=l("reactProp_"+t+"_valueHolder"),r=l("reactProp_"+t+"_atomHolder");function i(){return this[r]||h(this,r,Object(s.g)("reactive "+t)),this[r]}Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return i.call(this).reportObserved(),this[n]},set:function(e){this[k]||f(this[n],e)?h(this,n,e):(h(this,n,e),h(this,_,!0),i.call(this).reportChanged(),h(this,_,!1))}})}var T="function"===typeof Symbol&&Symbol.for,j=T?Symbol.for("react.forward_ref"):"function"===typeof o.forwardRef&&Object(o.forwardRef)((function(){})).$$typeof,A=T?Symbol.for("react.memo"):"function"===typeof o.memo&&Object(o.memo)((function(){})).$$typeof;function M(e){if(!0===e.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),A&&e.$$typeof===A)throw new Error("Mobx observer: You are trying to use 'observer' on function component wrapped to either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");if(j&&e.$$typeof===j){var t=e.render;if("function"!==typeof t)throw new Error("render property of ForwardRef was not a function");return Object(o.forwardRef)((function(){var e=arguments;return a.a.createElement(i.a,null,(function(){return t.apply(void 0,e)}))}))}return"function"!==typeof e||e.prototype&&e.prototype.render||e.isReactClass||Object.prototype.isPrototypeOf.call(o.Component,e)?O(e):Object(i.c)(e)}a.a.createContext({});l("disposeOnUnmountProto"),l("disposeOnUnmountInst");function P(e){function t(t,n,r,i,o,a){for(var c=[],u=arguments.length-6;u-- >0;)c[u]=arguments[u+6];return Object(s.p)((function(){if(i=i||"<>",a=a||r,null==n[r]){if(t){var s=null===n[r]?"null":"undefined";return new Error("The "+o+" `"+a+"` is marked as required in `"+i+"`, but its value is `"+s+"`.")}return null}return e.apply(void 0,[n,r,i,o,a].concat(c))}))}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function N(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":function(e,t){return"symbol"===e||"Symbol"===t["@@toStringTag"]||"function"===typeof Symbol&&t instanceof Symbol}(t,e)?"symbol":t}function D(e,t){return P((function(n,r,i,o,a){return Object(s.p)((function(){if(e&&N(n[r])===t.toLowerCase())return null;var o;switch(t){case"Array":o=s.i;break;case"Object":o=s.k;break;case"Map":o=s.j;break;default:throw new Error("Unexpected mobxType: "+t)}var c=n[r];if(!o(c)){var u=function(e){var t=N(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}(c),l=e?" or javascript `"+t.toLowerCase()+"`":"";return new Error("Invalid prop `"+a+"` of type `"+u+"` supplied to `"+i+"`, expected `mobx.Observable"+t+"`"+l+".")}return null}))}))}function R(e,t){return P((function(n,r,i,o,a){for(var c=[],u=arguments.length-5;u-- >0;)c[u]=arguments[u+5];return Object(s.p)((function(){if("function"!==typeof t)return new Error("Property `"+a+"` of component `"+i+"` has invalid PropType notation.");var s=D(e,"Array")(n,r,i);if(s instanceof Error)return s;for(var u=n[r],l=0;l>>0;for(t=0;t0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var I=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,L=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,B={},F={};function z(e,t,n,r){var i=r;"string"===typeof r&&(i=function(){return this[r]()}),e&&(F[e]=i),t&&(F[t[0]]=function(){return R(i.apply(this,arguments),t[1],t[2])}),n&&(F[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function U(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function H(e){var t,n,r=e.match(I);for(t=0,n=r.length;t=0&&L.test(e);)e=e.replace(L,r),L.lastIndex=0,n-=1;return e}var V={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function q(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(I).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var $="Invalid date";function G(){return this._invalidDate}var X="%d",K=/\d{1,2}/;function Z(e){return this._ordinal.replace("%d",e)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Q(e,t,n,r){var i=this._relativeTime[n];return j(i)?i(e,t,n,r):i.replace(/%d/i,e)}function ee(e,t){var n=this._relativeTime[e>0?"future":"past"];return j(n)?n(t):n.replace(/%s/i,t)}var te={};function ne(e,t){var n=e.toLowerCase();te[n]=te[n+"s"]=te[t]=e}function re(e){return"string"===typeof e?te[e]||te[e.toLowerCase()]:void 0}function ie(e){var t,n,r={};for(n in e)s(e,n)&&(t=re(n))&&(r[t]=e[n]);return r}var oe={};function ae(e,t){oe[e]=t}function se(e){var t,n=[];for(t in e)s(e,t)&&n.push({unit:t,priority:oe[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function ce(e){return e%4===0&&e%100!==0||e%400===0}function ue(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function le(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=ue(t)),n}function fe(e,t){return function(n){return null!=n?(he(this,e,n),r.updateOffset(this,t),this):de(this,e)}}function de(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function he(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&ce(e.year())&&1===e.month()&&29===e.date()?(n=le(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Qe(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function pe(e){return j(this[e=re(e)])?this[e]():this}function ge(e,t){if("object"===typeof e){var n,r=se(e=ie(e));for(n=0;n68?1900:2e3)};var yt=fe("FullYear",!0);function mt(){return ce(this.year())}function bt(e,t,n,r,i,o,a){var s;return e<100&&e>=0?(s=new Date(e+400,t,n,r,i,o,a),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,n,r,i,o,a),s}function vt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function xt(e,t,n){var r=7+t-n;return-(7+vt(e,0,r).getUTCDay()-t)%7+r-1}function wt(e,t,n,r,i){var o,a,s=1+7*(t-1)+(7+n-r)%7+xt(e,r,i);return s<=0?a=gt(o=e-1)+s:s>gt(e)?(o=e+1,a=s-gt(e)):(o=e,a=s),{year:o,dayOfYear:a}}function _t(e,t,n){var r,i,o=xt(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return a<1?r=a+kt(i=e.year()-1,t,n):a>kt(e.year(),t,n)?(r=a-kt(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function kt(e,t,n){var r=xt(e,t,n),i=xt(e+1,t,n);return(gt(e)-r+i)/7}function Ot(e){return _t(e,this._week.dow,this._week.doy).week}z("w",["ww",2],"wo","week"),z("W",["WW",2],"Wo","isoWeek"),ne("week","w"),ne("isoWeek","W"),ae("week",5),ae("isoWeek",5),De("w",_e),De("ww",_e,be),De("W",_e),De("WW",_e,be),ze(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=le(e)}));var Et={dow:0,doy:6};function St(){return this._week.dow}function Ct(){return this._week.doy}function Tt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function jt(e){var t=_t(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function At(e,t){return"string"!==typeof e?e:isNaN(e)?"number"===typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Mt(e,t){return"string"===typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Pt(e,t){return e.slice(t,7).concat(e.slice(0,t))}z("d",0,"do","day"),z("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),z("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),z("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),z("e",0,0,"weekday"),z("E",0,0,"isoWeekday"),ne("day","d"),ne("weekday","e"),ne("isoWeekday","E"),ae("day",11),ae("weekday",11),ae("isoWeekday",11),De("d",_e),De("e",_e),De("E",_e),De("dd",(function(e,t){return t.weekdaysMinRegex(e)})),De("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),De("dddd",(function(e,t){return t.weekdaysRegex(e)})),ze(["dd","ddd","dddd"],(function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e})),ze(["d","e","E"],(function(e,t,n,r){t[r]=le(e)}));var Nt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Dt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Rt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),It=Ne,Lt=Ne,Bt=Ne;function Ft(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Pt(n,this._week.dow):e?n[e.day()]:n}function zt(e){return!0===e?Pt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Ut(e){return!0===e?Pt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Ht(e,t,n){var r,i,o,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)o=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=He.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=He.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=He.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=He.call(this._weekdaysParse,a))||-1!==(i=He.call(this._shortWeekdaysParse,a))||-1!==(i=He.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=He.call(this._shortWeekdaysParse,a))||-1!==(i=He.call(this._weekdaysParse,a))||-1!==(i=He.call(this._minWeekdaysParse,a))?i:null:-1!==(i=He.call(this._minWeekdaysParse,a))||-1!==(i=He.call(this._weekdaysParse,a))||-1!==(i=He.call(this._shortWeekdaysParse,a))?i:null}function Wt(e,t,n){var r,i,o;if(this._weekdaysParseExact)return Ht.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Yt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=At(e,this.localeData()),this.add(e-t,"d")):t}function Vt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function qt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Mt(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function $t(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Kt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,"_weekdaysRegex")||(this._weekdaysRegex=It),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Gt(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Kt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Lt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Xt(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Kt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Bt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Kt(){function e(e,t){return t.length-e.length}var t,n,r,i,o,a=[],s=[],c=[],u=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=Le(this.weekdaysMin(n,"")),i=Le(this.weekdaysShort(n,"")),o=Le(this.weekdays(n,"")),a.push(r),s.push(i),c.push(o),u.push(r),u.push(i),u.push(o);a.sort(e),s.sort(e),c.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Zt(){return this.hours()%12||12}function Jt(){return this.hours()||24}function Qt(e,t){z(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function en(e,t){return t._meridiemParse}function tn(e){return"p"===(e+"").toLowerCase().charAt(0)}z("H",["HH",2],0,"hour"),z("h",["hh",2],0,Zt),z("k",["kk",2],0,Jt),z("hmm",0,0,(function(){return""+Zt.apply(this)+R(this.minutes(),2)})),z("hmmss",0,0,(function(){return""+Zt.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)})),z("Hmm",0,0,(function(){return""+this.hours()+R(this.minutes(),2)})),z("Hmmss",0,0,(function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)})),Qt("a",!0),Qt("A",!1),ne("hour","h"),ae("hour",13),De("a",en),De("A",en),De("H",_e),De("h",_e),De("k",_e),De("HH",_e,be),De("hh",_e,be),De("kk",_e,be),De("hmm",ke),De("hmmss",Oe),De("Hmm",ke),De("Hmmss",Oe),Fe(["H","HH"],qe),Fe(["k","kk"],(function(e,t,n){var r=le(e);t[qe]=24===r?0:r})),Fe(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Fe(["h","hh"],(function(e,t,n){t[qe]=le(e),y(n).bigHour=!0})),Fe("hmm",(function(e,t,n){var r=e.length-2;t[qe]=le(e.substr(0,r)),t[$e]=le(e.substr(r)),y(n).bigHour=!0})),Fe("hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[qe]=le(e.substr(0,r)),t[$e]=le(e.substr(r,2)),t[Ge]=le(e.substr(i)),y(n).bigHour=!0})),Fe("Hmm",(function(e,t,n){var r=e.length-2;t[qe]=le(e.substr(0,r)),t[$e]=le(e.substr(r))})),Fe("Hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[qe]=le(e.substr(0,r)),t[$e]=le(e.substr(r,2)),t[Ge]=le(e.substr(i))}));var nn=/[ap]\.?m?\.?/i,rn=fe("Hours",!0);function on(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var an,sn={calendar:N,longDateFormat:V,invalidDate:$,ordinal:X,dayOfMonthOrdinalParse:K,relativeTime:J,months:et,monthsShort:tt,week:Et,weekdays:Nt,weekdaysMin:Rt,weekdaysShort:Dt,meridiemParse:nn},cn={},un={};function ln(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(r=hn(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&ln(i,n)>=t-1)break;t--}o++}return an}function hn(t){var n=null;if(void 0===cn[t]&&"undefined"!==typeof e&&e&&e.exports)try{n=an._abbr,function(){var e=new Error("Cannot find module 'undefined'");throw e.code="MODULE_NOT_FOUND",e}(),pn(n)}catch(r){cn[t]=null}return cn[t]}function pn(e,t){var n;return e&&((n=u(t)?mn(e):gn(e,t))?an=n:"undefined"!==typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),an._abbr}function gn(e,t){if(null!==t){var n,r=sn;if(t.abbr=e,null!=cn[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=cn[e]._config;else if(null!=t.parentLocale)if(null!=cn[t.parentLocale])r=cn[t.parentLocale]._config;else{if(null==(n=hn(t.parentLocale)))return un[t.parentLocale]||(un[t.parentLocale]=[]),un[t.parentLocale].push({name:e,config:t}),null;r=n._config}return cn[e]=new P(M(r,t)),un[e]&&un[e].forEach((function(e){gn(e.name,e.config)})),pn(e),cn[e]}return delete cn[e],null}function yn(e,t){if(null!=t){var n,r,i=sn;null!=cn[e]&&null!=cn[e].parentLocale?cn[e].set(M(cn[e]._config,t)):(null!=(r=hn(e))&&(i=r._config),t=M(i,t),null==r&&(t.abbr=e),(n=new P(t)).parentLocale=cn[e],cn[e]=n),pn(e)}else null!=cn[e]&&(null!=cn[e].parentLocale?(cn[e]=cn[e].parentLocale,e===pn()&&pn(e)):null!=cn[e]&&delete cn[e]);return cn[e]}function mn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return an;if(!o(e)){if(t=hn(e))return t;e=[e]}return dn(e)}function bn(){return S(cn)}function vn(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[Ye]<0||n[Ye]>11?Ye:n[Ve]<1||n[Ve]>Qe(n[We],n[Ye])?Ve:n[qe]<0||n[qe]>24||24===n[qe]&&(0!==n[$e]||0!==n[Ge]||0!==n[Xe])?qe:n[$e]<0||n[$e]>59?$e:n[Ge]<0||n[Ge]>59?Ge:n[Xe]<0||n[Xe]>999?Xe:-1,y(e)._overflowDayOfYear&&(tVe)&&(t=Ve),y(e)._overflowWeeks&&-1===t&&(t=Ke),y(e)._overflowWeekday&&-1===t&&(t=Ze),y(e).overflow=t),e}var xn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_n=/Z|[+-]\d\d(?::?\d\d)?/,kn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],On=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],En=/^\/?Date\((-?\d+)/i,Sn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Cn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tn(e){var t,n,r,i,o,a,s=e._i,c=xn.exec(s)||wn.exec(s);if(c){for(y(e).iso=!0,t=0,n=kn.length;tgt(o)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=vt(o,0,e._dayOfYear),e._a[Ye]=n.getUTCMonth(),e._a[Ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[qe]&&0===e._a[$e]&&0===e._a[Ge]&&0===e._a[Xe]&&(e._nextDay=!0,e._a[qe]=0),e._d=(e._useUTC?vt:bt).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[qe]=24),e._w&&"undefined"!==typeof e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Fn(e){var t,n,r,i,o,a,s,c,u;null!=(t=e._w).GG||null!=t.W||null!=t.E?(o=1,a=4,n=In(t.GG,e._a[We],_t(Gn(),1,4).year),r=In(t.W,1),((i=In(t.E,1))<1||i>7)&&(c=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,u=_t(Gn(),o,a),n=In(t.gg,e._a[We],u.year),r=In(t.w,u.week),null!=t.d?((i=t.d)<0||i>6)&&(c=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(c=!0)):i=o),r<1||r>kt(n,o,a)?y(e)._overflowWeeks=!0:null!=c?y(e)._overflowWeekday=!0:(s=wt(n,r,i,o,a),e._a[We]=s.year,e._dayOfYear=s.dayOfYear)}function zn(e){if(e._f!==r.ISO_8601)if(e._f!==r.RFC_2822){e._a=[],y(e).empty=!0;var t,n,i,o,a,s,c=""+e._i,u=c.length,l=0;for(i=Y(e._f,e._locale).match(I)||[],t=0;t0&&y(e).unusedInput.push(a),c=c.slice(c.indexOf(n)+n.length),l+=n.length),F[o]?(n?y(e).empty=!1:y(e).unusedTokens.push(o),Ue(o,n,e)):e._strict&&!n&&y(e).unusedTokens.push(o);y(e).charsLeftOver=u-l,c.length>0&&y(e).unusedInput.push(c),e._a[qe]<=12&&!0===y(e).bigHour&&e._a[qe]>0&&(y(e).bigHour=void 0),y(e).parsedDateParts=e._a.slice(0),y(e).meridiem=e._meridiem,e._a[qe]=Un(e._locale,e._a[qe],e._meridiem),null!==(s=y(e).era)&&(e._a[We]=e._locale.erasConvertYear(s,e._a[We])),Bn(e),vn(e)}else Dn(e);else Tn(e)}function Un(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function Hn(e){var t,n,r,i,o,a,s=!1;if(0===e._f.length)return y(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ithis?this:e:b()}));function Zn(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Gn();for(n=t[0],r=1;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function wr(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return w(t,this),(t=Vn(t))._a?(e=t._isUTC?p(t._a):Gn(t._a),this._isDSTShifted=this.isValid()&&cr(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function _r(){return!!this.isValid()&&!this._isUTC}function kr(){return!!this.isValid()&&this._isUTC}function Or(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var Er=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Sr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Cr(e,t){var n,r,i,o=e,a=null;return ar(e)?o={ms:e._milliseconds,d:e._days,M:e._months}:l(e)||!isNaN(+e)?(o={},t?o[t]=+e:o.milliseconds=+e):(a=Er.exec(e))?(n="-"===a[1]?-1:1,o={y:0,d:le(a[Ve])*n,h:le(a[qe])*n,m:le(a[$e])*n,s:le(a[Ge])*n,ms:le(sr(1e3*a[Xe]))*n}):(a=Sr.exec(e))?(n="-"===a[1]?-1:1,o={y:Tr(a[2],n),M:Tr(a[3],n),w:Tr(a[4],n),d:Tr(a[5],n),h:Tr(a[6],n),m:Tr(a[7],n),s:Tr(a[8],n)}):null==o?o={}:"object"===typeof o&&("from"in o||"to"in o)&&(i=Ar(Gn(o.from),Gn(o.to)),(o={}).ms=i.milliseconds,o.M=i.months),r=new or(o),ar(e)&&s(e,"_locale")&&(r._locale=e._locale),ar(e)&&s(e,"_isValid")&&(r._isValid=e._isValid),r}function Tr(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function jr(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Ar(e,t){var n;return e.isValid()&&t.isValid()?(t=dr(t,e),e.isBefore(t)?n=jr(e,t):((n=jr(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Mr(e,t){return function(n,r){var i;return null===r||isNaN(+r)||(T(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),Pr(this,Cr(n,r),e),this}}function Pr(e,t,n,i){var o=t._milliseconds,a=sr(t._days),s=sr(t._months);e.isValid()&&(i=null==i||i,s&&ut(e,de(e,"Month")+s*n),a&&he(e,"Date",de(e,"Date")+a*n),o&&e._d.setTime(e._d.valueOf()+o*n),i&&r.updateOffset(e,a||s))}Cr.fn=or.prototype,Cr.invalid=ir;var Nr=Mr(1,"add"),Dr=Mr(-1,"subtract");function Rr(e){return"string"===typeof e||e instanceof String}function Ir(e){return k(e)||f(e)||Rr(e)||l(e)||Br(e)||Lr(e)||null===e||void 0===e}function Lr(e){var t,n,r=a(e)&&!c(e),i=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(t=0;tn.valueOf():n.valueOf()9999?W(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):j(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",W(n,"Z")):W(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function Qr(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r,i="moment",o="";return this.isLocal()||(i=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),e="["+i+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",r=o+'[")]',this.format(e+t+n+r)}function ei(e){e||(e=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var t=W(this,e);return this.localeData().postformat(t)}function ti(e,t){return this.isValid()&&(k(e)&&e.isValid()||Gn(e).isValid())?Cr({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ni(e){return this.from(Gn(),e)}function ri(e,t){return this.isValid()&&(k(e)&&e.isValid()||Gn(e).isValid())?Cr({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ii(e){return this.to(Gn(),e)}function oi(e){var t;return void 0===e?this._locale._abbr:(null!=(t=mn(e))&&(this._locale=t),this)}r.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",r.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ai=E("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function si(){return this._locale}var ci=1e3,ui=60*ci,li=60*ui,fi=3506328*li;function di(e,t){return(e%t+t)%t}function hi(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-fi:new Date(e,t,n).valueOf()}function pi(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-fi:Date.UTC(e,t,n)}function gi(e){var t,n;if(void 0===(e=re(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?pi:hi,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=di(t+(this._isUTC?0:this.utcOffset()*ui),li);break;case"minute":t=this._d.valueOf(),t-=di(t,ui);break;case"second":t=this._d.valueOf(),t-=di(t,ci)}return this._d.setTime(t),r.updateOffset(this,!0),this}function yi(e){var t,n;if(void 0===(e=re(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?pi:hi,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=li-di(t+(this._isUTC?0:this.utcOffset()*ui),li)-1;break;case"minute":t=this._d.valueOf(),t+=ui-di(t,ui)-1;break;case"second":t=this._d.valueOf(),t+=ci-di(t,ci)-1}return this._d.setTime(t),r.updateOffset(this,!0),this}function mi(){return this._d.valueOf()-6e4*(this._offset||0)}function bi(){return Math.floor(this.valueOf()/1e3)}function vi(){return new Date(this.valueOf())}function xi(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function wi(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function _i(){return this.isValid()?this.toISOString():null}function ki(){return m(this)}function Oi(){return h({},y(this))}function Ei(){return y(this).overflow}function Si(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ci(e,t){var n,i,o,a=this._eras||mn("en")._eras;for(n=0,i=a.length;n=0)return c[r]}function ji(e,t){var n=e.since<=e.until?1:-1;return void 0===t?r(e.since).year():r(e.since).year()+(t-e.offset)*n}function Ai(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e(o=kt(e,r,i))&&(t=o),Ki.call(this,e,t,n,r,i))}function Ki(e,t,n,r,i){var o=wt(e,t,n,r,i),a=vt(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}function Zi(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}z("N",0,0,"eraAbbr"),z("NN",0,0,"eraAbbr"),z("NNN",0,0,"eraAbbr"),z("NNNN",0,0,"eraName"),z("NNNNN",0,0,"eraNarrow"),z("y",["y",1],"yo","eraYear"),z("y",["yy",2],0,"eraYear"),z("y",["yyy",3],0,"eraYear"),z("y",["yyyy",4],0,"eraYear"),De("N",Li),De("NN",Li),De("NNN",Li),De("NNNN",Bi),De("NNNNN",Fi),Fe(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var i=n._locale.erasParse(e,r,n._strict);i?y(n).era=i:y(n).invalidEra=e})),De("y",Te),De("yy",Te),De("yyy",Te),De("yyyy",Te),De("yo",zi),Fe(["y","yy","yyy","yyyy"],We),Fe(["yo"],(function(e,t,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[We]=n._locale.eraYearOrdinalParse(e,i):t[We]=parseInt(e,10)})),z(0,["gg",2],0,(function(){return this.weekYear()%100})),z(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Hi("gggg","weekYear"),Hi("ggggg","weekYear"),Hi("GGGG","isoWeekYear"),Hi("GGGGG","isoWeekYear"),ne("weekYear","gg"),ne("isoWeekYear","GG"),ae("weekYear",1),ae("isoWeekYear",1),De("G",je),De("g",je),De("GG",_e,be),De("gg",_e,be),De("GGGG",Se,xe),De("gggg",Se,xe),De("GGGGG",Ce,we),De("ggggg",Ce,we),ze(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=le(e)})),ze(["gg","GG"],(function(e,t,n,i){t[i]=r.parseTwoDigitYear(e)})),z("Q",0,"Qo","quarter"),ne("quarter","Q"),ae("quarter",7),De("Q",me),Fe("Q",(function(e,t){t[Ye]=3*(le(e)-1)})),z("D",["DD",2],"Do","date"),ne("date","D"),ae("date",9),De("D",_e),De("DD",_e,be),De("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Fe(["D","DD"],Ve),Fe("Do",(function(e,t){t[Ve]=le(e.match(_e)[0])}));var Ji=fe("Date",!0);function Qi(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}z("DDD",["DDDD",3],"DDDo","dayOfYear"),ne("dayOfYear","DDD"),ae("dayOfYear",4),De("DDD",Ee),De("DDDD",ve),Fe(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=le(e)})),z("m",["mm",2],0,"minute"),ne("minute","m"),ae("minute",14),De("m",_e),De("mm",_e,be),Fe(["m","mm"],$e);var eo=fe("Minutes",!1);z("s",["ss",2],0,"second"),ne("second","s"),ae("second",15),De("s",_e),De("ss",_e,be),Fe(["s","ss"],Ge);var to,no,ro=fe("Seconds",!1);for(z("S",0,0,(function(){return~~(this.millisecond()/100)})),z(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),z(0,["SSS",3],0,"millisecond"),z(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),z(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),z(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),z(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),z(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),z(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),ne("millisecond","ms"),ae("millisecond",16),De("S",Ee,me),De("SS",Ee,be),De("SSS",Ee,ve),to="SSSS";to.length<=9;to+="S")De(to,Te);function io(e,t){t[Xe]=le(1e3*("0."+e))}for(to="S";to.length<=9;to+="S")Fe(to,io);function oo(){return this._isUTC?"UTC":""}function ao(){return this._isUTC?"Coordinated Universal Time":""}no=fe("Milliseconds",!1),z("z",0,0,"zoneAbbr"),z("zz",0,0,"zoneName");var so=_.prototype;function co(e){return Gn(1e3*e)}function uo(){return Gn.apply(null,arguments).parseZone()}function lo(e){return e}so.add=Nr,so.calendar=Ur,so.clone=Hr,so.diff=Xr,so.endOf=yi,so.format=ei,so.from=ti,so.fromNow=ni,so.to=ri,so.toNow=ii,so.get=pe,so.invalidAt=Ei,so.isAfter=Wr,so.isBefore=Yr,so.isBetween=Vr,so.isSame=qr,so.isSameOrAfter=$r,so.isSameOrBefore=Gr,so.isValid=ki,so.lang=ai,so.locale=oi,so.localeData=si,so.max=Kn,so.min=Xn,so.parsingFlags=Oi,so.set=ge,so.startOf=gi,so.subtract=Dr,so.toArray=xi,so.toObject=wi,so.toDate=vi,so.toISOString=Jr,so.inspect=Qr,"undefined"!==typeof Symbol&&null!=Symbol.for&&(so[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),so.toJSON=_i,so.toString=Zr,so.unix=bi,so.valueOf=mi,so.creationData=Si,so.eraName=Ai,so.eraNarrow=Mi,so.eraAbbr=Pi,so.eraYear=Ni,so.year=yt,so.isLeapYear=mt,so.weekYear=Wi,so.isoWeekYear=Yi,so.quarter=so.quarters=Zi,so.month=lt,so.daysInMonth=ft,so.week=so.weeks=Tt,so.isoWeek=so.isoWeeks=jt,so.weeksInYear=$i,so.weeksInWeekYear=Gi,so.isoWeeksInYear=Vi,so.isoWeeksInISOWeekYear=qi,so.date=Ji,so.day=so.days=Yt,so.weekday=Vt,so.isoWeekday=qt,so.dayOfYear=Qi,so.hour=so.hours=rn,so.minute=so.minutes=eo,so.second=so.seconds=ro,so.millisecond=so.milliseconds=no,so.utcOffset=pr,so.utc=yr,so.local=mr,so.parseZone=br,so.hasAlignedHourOffset=vr,so.isDST=xr,so.isLocal=_r,so.isUtcOffset=kr,so.isUtc=Or,so.isUTC=Or,so.zoneAbbr=oo,so.zoneName=ao,so.dates=E("dates accessor is deprecated. Use date instead.",Ji),so.months=E("months accessor is deprecated. Use month instead",lt),so.years=E("years accessor is deprecated. Use year instead",yt),so.zone=E("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",gr),so.isDSTShifted=E("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",wr);var fo=P.prototype;function ho(e,t,n,r){var i=mn(),o=p().set(r,t);return i[n](o,e)}function po(e,t,n){if(l(e)&&(t=e,e=void 0),e=e||"",null!=t)return ho(e,t,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=ho(e,r,n,"month");return i}function go(e,t,n,r){"boolean"===typeof e?(l(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,l(t)&&(n=t,t=void 0),t=t||"");var i,o=mn(),a=e?o._week.dow:0,s=[];if(null!=n)return ho(t,(n+a)%7,r,"day");for(i=0;i<7;i++)s[i]=ho(t,(i+a)%7,r,"day");return s}function yo(e,t){return po(e,t,"months")}function mo(e,t){return po(e,t,"monthsShort")}function bo(e,t,n){return go(e,t,n,"weekdays")}function vo(e,t,n){return go(e,t,n,"weekdaysShort")}function xo(e,t,n){return go(e,t,n,"weekdaysMin")}fo.calendar=D,fo.longDateFormat=q,fo.invalidDate=G,fo.ordinal=Z,fo.preparse=lo,fo.postformat=lo,fo.relativeTime=Q,fo.pastFuture=ee,fo.set=A,fo.eras=Ci,fo.erasParse=Ti,fo.erasConvertYear=ji,fo.erasAbbrRegex=Ri,fo.erasNameRegex=Di,fo.erasNarrowRegex=Ii,fo.months=ot,fo.monthsShort=at,fo.monthsParse=ct,fo.monthsRegex=ht,fo.monthsShortRegex=dt,fo.week=Ot,fo.firstDayOfYear=Ct,fo.firstDayOfWeek=St,fo.weekdays=Ft,fo.weekdaysMin=Ut,fo.weekdaysShort=zt,fo.weekdaysParse=Wt,fo.weekdaysRegex=$t,fo.weekdaysShortRegex=Gt,fo.weekdaysMinRegex=Xt,fo.isPM=tn,fo.meridiem=on,pn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===le(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),r.lang=E("moment.lang is deprecated. Use moment.locale instead.",pn),r.langData=E("moment.langData is deprecated. Use moment.localeData instead.",mn);var wo=Math.abs;function _o(){var e=this._data;return this._milliseconds=wo(this._milliseconds),this._days=wo(this._days),this._months=wo(this._months),e.milliseconds=wo(e.milliseconds),e.seconds=wo(e.seconds),e.minutes=wo(e.minutes),e.hours=wo(e.hours),e.months=wo(e.months),e.years=wo(e.years),this}function ko(e,t,n,r){var i=Cr(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Oo(e,t){return ko(this,e,t,1)}function Eo(e,t){return ko(this,e,t,-1)}function So(e){return e<0?Math.floor(e):Math.ceil(e)}function Co(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,c=this._data;return o>=0&&a>=0&&s>=0||o<=0&&a<=0&&s<=0||(o+=864e5*So(jo(s)+a),a=0,s=0),c.milliseconds=o%1e3,e=ue(o/1e3),c.seconds=e%60,t=ue(e/60),c.minutes=t%60,n=ue(t/60),c.hours=n%24,a+=ue(n/24),s+=i=ue(To(a)),a-=So(jo(i)),r=ue(s/12),s%=12,c.days=a,c.months=s,c.years=r,this}function To(e){return 4800*e/146097}function jo(e){return 146097*e/4800}function Ao(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=re(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+To(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(jo(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Mo(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*le(this._months/12):NaN}function Po(e){return function(){return this.as(e)}}var No=Po("ms"),Do=Po("s"),Ro=Po("m"),Io=Po("h"),Lo=Po("d"),Bo=Po("w"),Fo=Po("M"),zo=Po("Q"),Uo=Po("y");function Ho(){return Cr(this)}function Wo(e){return e=re(e),this.isValid()?this[e+"s"]():NaN}function Yo(e){return function(){return this.isValid()?this._data[e]:NaN}}var Vo=Yo("milliseconds"),qo=Yo("seconds"),$o=Yo("minutes"),Go=Yo("hours"),Xo=Yo("days"),Ko=Yo("months"),Zo=Yo("years");function Jo(){return ue(this.days()/7)}var Qo=Math.round,ea={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ta(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function na(e,t,n,r){var i=Cr(e).abs(),o=Qo(i.as("s")),a=Qo(i.as("m")),s=Qo(i.as("h")),c=Qo(i.as("d")),u=Qo(i.as("M")),l=Qo(i.as("w")),f=Qo(i.as("y")),d=o<=n.ss&&["s",o]||o0,d[4]=r,ta.apply(null,d)}function ra(e){return void 0===e?Qo:"function"===typeof e&&(Qo=e,!0)}function ia(e,t){return void 0!==ea[e]&&(void 0===t?ea[e]:(ea[e]=t,"s"===e&&(ea.ss=t-1),!0))}function oa(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,o=ea;return"object"===typeof e&&(t=e,e=!1),"boolean"===typeof e&&(i=e),"object"===typeof t&&(o=Object.assign({},ea,t),null!=t.s&&null==t.ss&&(o.ss=t.s-1)),r=na(this,!i,o,n=this.localeData()),i&&(r=n.pastFuture(+this,r)),n.postformat(r)}var aa=Math.abs;function sa(e){return(e>0)-(e<0)||+e}function ca(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,i,o,a,s,c=aa(this._milliseconds)/1e3,u=aa(this._days),l=aa(this._months),f=this.asSeconds();return f?(e=ue(c/60),t=ue(e/60),c%=60,e%=60,n=ue(l/12),l%=12,r=c?c.toFixed(3).replace(/\.?0+$/,""):"",i=f<0?"-":"",o=sa(this._months)!==sa(f)?"-":"",a=sa(this._days)!==sa(f)?"-":"",s=sa(this._milliseconds)!==sa(f)?"-":"",i+"P"+(n?o+n+"Y":"")+(l?o+l+"M":"")+(u?a+u+"D":"")+(t||e||c?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(c?s+r+"S":"")):"P0D"}var ua=or.prototype;return ua.isValid=rr,ua.abs=_o,ua.add=Oo,ua.subtract=Eo,ua.as=Ao,ua.asMilliseconds=No,ua.asSeconds=Do,ua.asMinutes=Ro,ua.asHours=Io,ua.asDays=Lo,ua.asWeeks=Bo,ua.asMonths=Fo,ua.asQuarters=zo,ua.asYears=Uo,ua.valueOf=Mo,ua._bubble=Co,ua.clone=Ho,ua.get=Wo,ua.milliseconds=Vo,ua.seconds=qo,ua.minutes=$o,ua.hours=Go,ua.days=Xo,ua.weeks=Jo,ua.months=Ko,ua.years=Zo,ua.humanize=oa,ua.toISOString=ca,ua.toString=ca,ua.toJSON=ca,ua.locale=oi,ua.localeData=si,ua.toIsoString=E("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ca),ua.lang=ai,z("X",0,0,"unix"),z("x",0,0,"valueOf"),De("x",je),De("X",Pe),Fe("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Fe("x",(function(e,t,n){n._d=new Date(le(e))})),r.version="2.27.0",i(Gn),r.fn=so,r.min=Jn,r.max=Qn,r.now=er,r.utc=p,r.unix=co,r.months=yo,r.isDate=f,r.locale=pn,r.invalid=b,r.duration=Cr,r.isMoment=k,r.weekdays=bo,r.parseZone=uo,r.localeData=mn,r.isDuration=ar,r.monthsShort=mo,r.weekdaysMin=xo,r.defineLocale=gn,r.updateLocale=yn,r.locales=bn,r.weekdaysShort=vo,r.normalizeUnits=re,r.relativeTimeRounding=ra,r.relativeTimeThreshold=ia,r.calendarFormat=zr,r.prototype=so,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},r}()}).call(this,n(157)(e))},,function(e,t,n){"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(420)},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=new Date,i=new Date;function o(e,t,n,a){function s(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return s.floor=function(t){return e(t=new Date(+t)),t},s.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},s.round=function(e){var t=s(e),n=s.ceil(e);return e-t0))return a;do{a.push(o=new Date(+n)),t(n,i),e(n)}while(o=t)for(;e(t),!n(t);)t.setTime(t-1)}),(function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););}))},n&&(s.count=function(t,o){return r.setTime(+t),i.setTime(+o),e(r),e(i),Math.floor(n(r,i))},s.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?s.filter(a?function(t){return a(t)%e===0}:function(t){return s.count(0,t)%e===0}):s:null}),s}},function(e,t,n){"use strict";function r(){}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"d",(function(){return r})),n.d(t,"c",(function(){return i})),n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return a})),n.d(t,"e",(function(){return s}));var r=1e3,i=6e4,o=36e5,a=864e5,s=6048e5},function(e,t,n){"use strict";n.d(t,"c",(function(){return o})),n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return s}));var r=n(149);function i(e,t){return function(n){return e+n*t}}function o(e,t){var n=t-e;return n?i(e,n>180||n<-180?n-360*Math.round(n/360):n):Object(r.a)(isNaN(e)?t:e)}function a(e){return 1===(e=+e)?s:function(t,n){return n-t?function(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):Object(r.a)(isNaN(t)?n:t)}}function s(e,t){var n=t-e;return n?i(e,n):Object(r.a)(isNaN(e)?t:e)}},function(e,t,n){"use strict";n.d(t,"g",(function(){return a})),n.d(t,"c",(function(){return s})),n.d(t,"k",(function(){return c})),n.d(t,"m",(function(){return u})),n.d(t,"i",(function(){return l})),n.d(t,"a",(function(){return f})),n.d(t,"e",(function(){return d})),n.d(t,"h",(function(){return h})),n.d(t,"d",(function(){return p})),n.d(t,"l",(function(){return g})),n.d(t,"n",(function(){return y})),n.d(t,"j",(function(){return m})),n.d(t,"b",(function(){return b})),n.d(t,"f",(function(){return v}));var r=n(26),i=n(28);function o(e){return Object(r.a)((function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),(function(e,t){e.setDate(e.getDate()+7*t)}),(function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*i.c)/i.e}))}var a=o(0),s=o(1),c=o(2),u=o(3),l=o(4),f=o(5),d=o(6),h=a.range,p=s.range,g=c.range,y=u.range,m=l.range,b=f.range,v=d.range},function(e,t,n){"use strict";n.d(t,"g",(function(){return a})),n.d(t,"c",(function(){return s})),n.d(t,"k",(function(){return c})),n.d(t,"m",(function(){return u})),n.d(t,"i",(function(){return l})),n.d(t,"a",(function(){return f})),n.d(t,"e",(function(){return d})),n.d(t,"h",(function(){return h})),n.d(t,"d",(function(){return p})),n.d(t,"l",(function(){return g})),n.d(t,"n",(function(){return y})),n.d(t,"j",(function(){return m})),n.d(t,"b",(function(){return b})),n.d(t,"f",(function(){return v}));var r=n(26),i=n(28);function o(e){return Object(r.a)((function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCDate(e.getUTCDate()+7*t)}),(function(e,t){return(t-e)/i.e}))}var a=o(0),s=o(1),c=o(2),u=o(3),l=o(4),f=o(5),d=o(6),h=a.range,p=s.range,g=c.range,y=u.range,m=l.range,b=f.range,v=d.range},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(382);var i=n(383);function o(e,t){return Object(r.a)(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(c){i=!0,o=c}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}}(e,t)||Object(i.a)()}},function(e,t,n){var r;try{r={cloneDeep:n(548),constant:n(244),defaults:n(335),each:n(245),filter:n(310),find:n(549),flatten:n(337),forEach:n(308),forIn:n(556),has:n(250),isUndefined:n(321),last:n(557),map:n(322),mapValues:n(558),max:n(559),merge:n(561),min:n(566),minBy:n(567),now:n(568),pick:n(342),range:n(343),reduce:n(324),sortBy:n(575),uniqueId:n(344),values:n(329),zipObject:n(580)}}catch(i){}r||(r=window._),e.exports=r},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(218);function i(e,t){var n;if("undefined"===typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=Object(r.a)(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var i=0,o=function(){};return{s:o,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){c=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(c)throw a}}}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"d",(function(){return o})),n.d(t,"c",(function(){return a})),n.d(t,"e",(function(){return x})),n.d(t,"h",(function(){return k})),n.d(t,"g",(function(){return O})),n.d(t,"b",(function(){return E})),n.d(t,"f",(function(){return M}));var r=n(56);function i(){}var o=.7,a=1/o,s="\\s*([+-]?\\d+)\\s*",c="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",u="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",l=/^#([0-9a-f]{3,8})$/,f=new RegExp("^rgb\\("+[s,s,s]+"\\)$"),d=new RegExp("^rgb\\("+[u,u,u]+"\\)$"),h=new RegExp("^rgba\\("+[s,s,s,c]+"\\)$"),p=new RegExp("^rgba\\("+[u,u,u,c]+"\\)$"),g=new RegExp("^hsl\\("+[c,u,u]+"\\)$"),y=new RegExp("^hsla\\("+[c,u,u,c]+"\\)$"),m={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function b(){return this.rgb().formatHex()}function v(){return this.rgb().formatRgb()}function x(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=l.exec(e))?(n=t[1].length,t=parseInt(t[1],16),6===n?w(t):3===n?new E(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===n?_(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===n?_(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=f.exec(e))?new E(t[1],t[2],t[3],1):(t=d.exec(e))?new E(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=h.exec(e))?_(t[1],t[2],t[3],t[4]):(t=p.exec(e))?_(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=g.exec(e))?j(t[1],t[2]/100,t[3]/100,1):(t=y.exec(e))?j(t[1],t[2]/100,t[3]/100,t[4]):m.hasOwnProperty(e)?w(m[e]):"transparent"===e?new E(NaN,NaN,NaN,0):null}function w(e){return new E(e>>16&255,e>>8&255,255&e,1)}function _(e,t,n,r){return r<=0&&(e=t=n=NaN),new E(e,t,n,r)}function k(e){return e instanceof i||(e=x(e)),e?new E((e=e.rgb()).r,e.g,e.b,e.opacity):new E}function O(e,t,n,r){return 1===arguments.length?k(e):new E(e,t,n,null==r?1:r)}function E(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function S(){return"#"+T(this.r)+T(this.g)+T(this.b)}function C(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}function T(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function j(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new P(e,t,n,r)}function A(e){if(e instanceof P)return new P(e.h,e.s,e.l,e.opacity);if(e instanceof i||(e=x(e)),!e)return new P;if(e instanceof P)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,o=Math.min(t,n,r),a=Math.max(t,n,r),s=NaN,c=a-o,u=(a+o)/2;return c?(s=t===a?(n-r)/c+6*(n0&&u<1?0:s,new P(s,c,u,e.opacity)}function M(e,t,n,r){return 1===arguments.length?A(e):new P(e,t,n,null==r?1:r)}function P(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function N(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}Object(r.a)(i,x,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:b,formatHex:b,formatHsl:function(){return A(this).formatHsl()},formatRgb:v,toString:v}),Object(r.a)(E,O,Object(r.b)(i,{brighter:function(e){return e=null==e?a:Math.pow(a,e),new E(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?o:Math.pow(o,e),new E(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:S,formatHex:S,formatRgb:C,toString:C})),Object(r.a)(P,M,Object(r.b)(i,{brighter:function(e){return e=null==e?a:Math.pow(a,e),new P(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?o:Math.pow(o,e),new P(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new E(N(e>=240?e-240:e+120,i,r),N(e,i,r),N(e<120?e+240:e-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===e?")":", "+e+")")}}))},,function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(3),i=n(0),o=n.n(i),a=n(147);function s(e,t){var n=function(t,n){return o.a.createElement(a.a,Object(r.a)({ref:n},t),e)};return n.muiName=a.a.muiName,o.a.memo(o.a.forwardRef(n))}},function(e,t,n){"use strict"},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.ownerDocument||document}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";var r=n(35);n.d(t,"a",(function(){return r.e})),n.d(t,"h",(function(){return r.g})),n.d(t,"e",(function(){return r.f}));var i=n(158);n.d(t,"f",(function(){return i.a})),n.d(t,"d",(function(){return i.c})),n.d(t,"g",(function(){return i.d})),n.d(t,"c",(function(){return i.b}));var o=n(219);n.d(t,"b",(function(){return o.a}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(0),i="undefined"!==typeof window?r.useLayoutEffect:r.useEffect;function o(e){var t=r.useRef(e);return i((function(){t.current=e})),r.useCallback((function(){return t.current.apply(void 0,arguments)}),[])}},function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return a}));var r=n(0),i=(n(1),Object(r.createContext)(null)),o=function(e){var t=e.utils,n=e.children,o=e.locale,a=e.libInstance,s=Object(r.useMemo)((function(){return new t({locale:o,instance:a})}),[t,a,o]);return Object(r.createElement)(i.Provider,{value:s,children:n})};function a(){var e=Object(r.useContext)(i);return function(e){if(!e)throw new Error("Can not find utils in context. You either a) forgot to wrap your component tree in MuiPickersUtilsProvider; or b) mixed named and direct file imports. Recommendation: use named imports from the module index.")}(e),e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r.a})),n.d(t,"b",(function(){return i.a})),n.d(t,"c",(function(){return o.b})),n.d(t,"d",(function(){return a.a})),n.d(t,"g",(function(){return s.a})),n.d(t,"h",(function(){return c})),n.d(t,"m",(function(){return l})),n.d(t,"o",(function(){return f.a})),n.d(t,"p",(function(){return d.a})),n.d(t,"q",(function(){return h.a})),n.d(t,"u",(function(){return p.a})),n.d(t,"v",(function(){return g.a})),n.d(t,"w",(function(){return y.a})),n.d(t,"x",(function(){return y.b})),n.d(t,"y",(function(){return m.a})),n.d(t,"r",(function(){return b.a})),n.d(t,"s",(function(){return b.b})),n.d(t,"t",(function(){return b.c})),n.d(t,"k",(function(){return w})),n.d(t,"l",(function(){return _})),n.d(t,"n",(function(){return O})),n.d(t,"i",(function(){return S})),n.d(t,"j",(function(){return C})),n.d(t,"e",(function(){return T.b})),n.d(t,"f",(function(){return T.a})),n.d(t,"z",(function(){return j})),n.d(t,"A",(function(){return A}));var r=n(139),i=n(199),o=n(138),a=n(196),s=n(198),c=function(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}},u=n(29),l=function(e,t){var n=Object(u.c)(+e,+t);return function(e){var t=n(e);return t-360*Math.floor(t/360)}},f=n(55),d=n(103),h=n(200),p=n(286),g=n(197),y=n(264),m=n(287),b=n(120),v=n(35);function x(e){return function(t,n){var r=e((t=Object(v.f)(t)).h,(n=Object(v.f)(n)).h),i=Object(u.a)(t.s,n.s),o=Object(u.a)(t.l,n.l),a=Object(u.a)(t.opacity,n.opacity);return function(e){return t.h=r(e),t.s=i(e),t.l=o(e),t.opacity=a(e),t+""}}}var w=x(u.c),_=x(u.a),k=n(158);function O(e,t){var n=Object(u.a)((e=Object(k.a)(e)).l,(t=Object(k.a)(t)).l),r=Object(u.a)(e.a,t.a),i=Object(u.a)(e.b,t.b),o=Object(u.a)(e.opacity,t.opacity);return function(t){return e.l=n(t),e.a=r(t),e.b=i(t),e.opacity=o(t),e+""}}function E(e){return function(t,n){var r=e((t=Object(k.c)(t)).h,(n=Object(k.c)(n)).h),i=Object(u.a)(t.c,n.c),o=Object(u.a)(t.l,n.l),a=Object(u.a)(t.opacity,n.opacity);return function(e){return t.h=r(e),t.c=i(e),t.l=o(e),t.opacity=a(e),t+""}}}var S=E(u.c),C=E(u.a),T=n(226);function j(e,t){for(var n=0,r=t.length-1,i=t[0],o=new Array(r<0?0:r);n=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,l,f,d=-1,h=n.length,p=r[i++],g=a(),y=s();++dr.length)return e;var o,a=i[n-1];return null!=t&&n>=r.length?o=e.entries():(o=[],e.each((function(e,t){o.push({key:t,values:s(e,n)})}))),null!=a?o.sort((function(e,t){return a(e.key,t.key)})):o}return n={object:function(e){return o(e,0,c,u)},map:function(e){return o(e,0,l,f)},entries:function(e){return s(o(e,0,l,f),0)},key:function(e){return r.push(e),n},sortKeys:function(e){return i[r.length-1]=e,n},sortValues:function(t){return e=t,n},rollup:function(e){return t=e,n}}};function c(){return{}}function u(e,t,n){e[t]=n}function l(){return a()}function f(e,t,n){e.set(t,n)}function d(){}var h=a.prototype;function p(e,t){var n=new d;if(e instanceof d)e.each((function(e){n.add(e)}));else if(e){var r=-1,i=e.length;if(null==t)for(;++rMath.abs(a)*u?(s<0&&(u=-u),n=u*a/s,r=u):(a<0&&(c=-c),n=c,r=c*s/a);return{x:i+n,y:o+r}},buildLayerMatrix:function(e){var t=r.map(r.range(a(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var i=e.node(n),o=i.rank;r.isUndefined(o)||(t[o][i.order]=n)})),t},normalizeRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var i=e.node(n);r.has(i,"rank")&&(i.rank-=t)}))},removeEmptyRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var i=e.node(r).rank-t;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,o=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%o!==0?--i:i&&r.forEach(t,(function(t){e.node(t).rank+=i}))}))},addBorderNode:function(e,t,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return o(e,"border",i,t)},maxRank:a,partition:function(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n},time:function(e,t){var n=r.now();try{return t()}finally{console.log(e+" time: "+(r.now()-n)+"ms")}},notime:function(e,t){return t()}}},function(e,t,n){"use strict";n.r(t),n.d(t,"arc",(function(){return r.a})),n.d(t,"area",(function(){return i.a})),n.d(t,"line",(function(){return o.a})),n.d(t,"pie",(function(){return a.a})),n.d(t,"areaRadial",(function(){return h})),n.d(t,"radialArea",(function(){return h})),n.d(t,"lineRadial",(function(){return d})),n.d(t,"radialLine",(function(){return d})),n.d(t,"pointRadial",(function(){return p.a})),n.d(t,"linkHorizontal",(function(){return g.a})),n.d(t,"linkVertical",(function(){return g.c})),n.d(t,"linkRadial",(function(){return g.b})),n.d(t,"symbol",(function(){return L})),n.d(t,"symbols",(function(){return I})),n.d(t,"symbolCircle",(function(){return b})),n.d(t,"symbolCross",(function(){return v})),n.d(t,"symbolDiamond",(function(){return _})),n.d(t,"symbolSquare",(function(){return C})),n.d(t,"symbolStar",(function(){return S})),n.d(t,"symbolTriangle",(function(){return j})),n.d(t,"symbolWye",(function(){return D})),n.d(t,"curveBasisClosed",(function(){return W})),n.d(t,"curveBasisOpen",(function(){return V})),n.d(t,"curveBasis",(function(){return U})),n.d(t,"curveBundle",(function(){return $})),n.d(t,"curveCardinalClosed",(function(){return J})),n.d(t,"curveCardinalOpen",(function(){return ee})),n.d(t,"curveCardinal",(function(){return K})),n.d(t,"curveCatmullRomClosed",(function(){return oe})),n.d(t,"curveCatmullRomOpen",(function(){return se})),n.d(t,"curveCatmullRom",(function(){return re})),n.d(t,"curveLinearClosed",(function(){return ue})),n.d(t,"curveLinear",(function(){return s.a})),n.d(t,"curveMonotoneX",(function(){return me})),n.d(t,"curveMonotoneY",(function(){return be})),n.d(t,"curveNatural",(function(){return we})),n.d(t,"curveStep",(function(){return ke})),n.d(t,"curveStepAfter",(function(){return Ee})),n.d(t,"curveStepBefore",(function(){return Oe})),n.d(t,"stack",(function(){return Ae})),n.d(t,"stackOffsetExpand",(function(){return Me})),n.d(t,"stackOffsetDiverging",(function(){return Pe})),n.d(t,"stackOffsetNone",(function(){return Ce})),n.d(t,"stackOffsetSilhouette",(function(){return Ne})),n.d(t,"stackOffsetWiggle",(function(){return De})),n.d(t,"stackOrderAppearance",(function(){return Re})),n.d(t,"stackOrderAscending",(function(){return Le})),n.d(t,"stackOrderDescending",(function(){return Fe})),n.d(t,"stackOrderInsideOut",(function(){return ze})),n.d(t,"stackOrderNone",(function(){return Te})),n.d(t,"stackOrderReverse",(function(){return Ue}));var r=n(288),i=n(203),o=n(141),a=n(380),s=n(99),c=l(s.a);function u(e){this._curve=e}function l(e){function t(t){return new u(e(t))}return t._curve=e,t}function f(e){var t=e.curve;return e.angle=e.x,delete e.x,e.radius=e.y,delete e.y,e.curve=function(e){return arguments.length?t(l(e)):t()._curve},e}u.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var d=function(){return f(Object(o.a)().curve(c))},h=function(){var e=Object(i.a)().curve(c),t=e.curve,n=e.lineX0,r=e.lineX1,o=e.lineY0,a=e.lineY1;return e.angle=e.x,delete e.x,e.startAngle=e.x0,delete e.x0,e.endAngle=e.x1,delete e.x1,e.radius=e.y,delete e.y,e.innerRadius=e.y0,delete e.y0,e.outerRadius=e.y1,delete e.y1,e.lineStartAngle=function(){return f(n())},delete e.lineX0,e.lineEndAngle=function(){return f(r())},delete e.lineX1,e.lineInnerRadius=function(){return f(o())},delete e.lineY0,e.lineOuterRadius=function(){return f(a())},delete e.lineY1,e.curve=function(e){return arguments.length?t(l(e)):t()._curve},e},p=n(124),g=n(173),y=n(150),m=n(14),b={draw:function(e,t){var n=Math.sqrt(t/m.j);e.moveTo(n,0),e.arc(0,0,n,0,m.m)}},v={draw:function(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},x=Math.sqrt(1/3),w=2*x,_={draw:function(e,t){var n=Math.sqrt(t/w),r=n*x;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},k=Math.sin(m.j/10)/Math.sin(7*m.j/10),O=Math.sin(m.m/10)*k,E=-Math.cos(m.m/10)*k,S={draw:function(e,t){var n=Math.sqrt(.8908130915292852*t),r=O*n,i=E*n;e.moveTo(0,-n),e.lineTo(r,i);for(var o=1;o<5;++o){var a=m.m*o/5,s=Math.cos(a),c=Math.sin(a);e.lineTo(c*n,-s*n),e.lineTo(s*r-c*i,c*r+s*i)}e.closePath()}},C={draw:function(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},T=Math.sqrt(3),j={draw:function(e,t){var n=-Math.sqrt(t/(3*T));e.moveTo(0,2*n),e.lineTo(-T*n,-n),e.lineTo(T*n,-n),e.closePath()}},A=-.5,M=Math.sqrt(3)/2,P=1/Math.sqrt(12),N=3*(P/2+1),D={draw:function(e,t){var n=Math.sqrt(t/N),r=n/2,i=n*P,o=r,a=n*P+n,s=-o,c=a;e.moveTo(r,i),e.lineTo(o,a),e.lineTo(s,c),e.lineTo(A*r-M*i,M*r+A*i),e.lineTo(A*o-M*a,M*o+A*a),e.lineTo(A*s-M*c,M*s+A*c),e.lineTo(A*r+M*i,A*i-M*r),e.lineTo(A*o+M*a,A*a-M*o),e.lineTo(A*s+M*c,A*c-M*s),e.closePath()}},R=n(21),I=[b,v,_,C,S,j,D],L=function(){var e=Object(R.a)(b),t=Object(R.a)(64),n=null;function r(){var r;if(n||(n=r=Object(y.a)()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(t){return arguments.length?(e="function"===typeof t?t:Object(R.a)(t),r):e},r.size=function(e){return arguments.length?(t="function"===typeof e?e:Object(R.a)(+e),r):t},r.context=function(e){return arguments.length?(n=null==e?null:e,r):n},r},B=function(){};function F(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function z(e){this._context=e}z.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:F(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:F(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};var U=function(e){return new z(e)};function H(e){this._context=e}H.prototype={areaStart:B,areaEnd:B,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:F(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};var W=function(e){return new H(e)};function Y(e){this._context=e}Y.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:F(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};var V=function(e){return new Y(e)};function q(e,t){this._basis=new z(e),this._beta=t}q.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],o=t[0],a=e[n]-i,s=t[n]-o,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*a),this._beta*t[c]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(e,t){this._x.push(+e),this._y.push(+t)}};var $=function e(t){function n(e){return 1===t?new z(e):new q(e,t)}return n.beta=function(t){return e(+t)},n}(.85);function G(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function X(e,t){this._context=e,this._k=(1-t)/6}X.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:G(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:G(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var K=function e(t){function n(e){return new X(e,t)}return n.tension=function(t){return e(+t)},n}(0);function Z(e,t){this._context=e,this._k=(1-t)/6}Z.prototype={areaStart:B,areaEnd:B,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:G(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var J=function e(t){function n(e){return new Z(e,t)}return n.tension=function(t){return e(+t)},n}(0);function Q(e,t){this._context=e,this._k=(1-t)/6}Q.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:G(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var ee=function e(t){function n(e){return new Q(e,t)}return n.tension=function(t){return e(+t)},n}(0);function te(e,t,n){var r=e._x1,i=e._y1,o=e._x2,a=e._y2;if(e._l01_a>m.f){var s=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*s-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*s-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>m.f){var u=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);o=(o*u+e._x1*e._l23_2a-t*e._l12_2a)/l,a=(a*u+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,o,a,e._x2,e._y2)}function ne(e,t){this._context=e,this._alpha=t}ne.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:te(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var re=function e(t){function n(e){return t?new ne(e,t):new X(e,0)}return n.alpha=function(t){return e(+t)},n}(.5);function ie(e,t){this._context=e,this._alpha=t}ie.prototype={areaStart:B,areaEnd:B,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:te(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var oe=function e(t){function n(e){return t?new ie(e,t):new Z(e,0)}return n.alpha=function(t){return e(+t)},n}(.5);function ae(e,t){this._context=e,this._alpha=t}ae.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:te(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var se=function e(t){function n(e){return t?new ae(e,t):new Q(e,0)}return n.alpha=function(t){return e(+t)},n}(.5);function ce(e){this._context=e}ce.prototype={areaStart:B,areaEnd:B,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};var ue=function(e){return new ce(e)};function le(e){return e<0?-1:1}function fe(e,t,n){var r=e._x1-e._x0,i=t-e._x1,o=(e._y1-e._y0)/(r||i<0&&-0),a=(n-e._y1)/(i||r<0&&-0),s=(o*i+a*r)/(r+i);return(le(o)+le(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function de(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function he(e,t,n){var r=e._x0,i=e._y0,o=e._x1,a=e._y1,s=(o-r)/3;e._context.bezierCurveTo(r+s,i+s*t,o-s,a-s*n,o,a)}function pe(e){this._context=e}function ge(e){this._context=new ye(e)}function ye(e){this._context=e}function me(e){return new pe(e)}function be(e){return new ge(e)}function ve(e){this._context=e}function xe(e){var t,n,r=e.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(a[t]-i[t+1])/o[t];for(o[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var ke=function(e){return new _e(e,.5)};function Oe(e){return new _e(e,0)}function Ee(e){return new _e(e,1)}var Se=n(171),Ce=function(e,t){if((i=e.length)>1)for(var n,r,i,o=1,a=e[t[0]],s=a.length;o=0;)n[t]=t;return n};function je(e,t){return e[t]}var Ae=function(){var e=Object(R.a)([]),t=Te,n=Ce,r=je;function i(i){var o,a,s=e.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(o=0;o0){for(var n,r,i,o=0,a=e[0].length;o0)for(var n,r,i,o,a,s,c=0,u=e[t[0]].length;c0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=a,r[0]=a+=i):(r[0]=0,r[1]=i)},Ne=function(e,t){if((n=e.length)>0){for(var n,r=0,i=e[t[0]],o=i.length;r0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,o=0,a=1;ao&&(o=t,r=n);return r}var Le=function(e){var t=e.map(Be);return Te(e).sort((function(e,n){return t[e]-t[n]}))};function Be(e){for(var t,n=0,r=-1,i=e.length;++r=0||(i[n]=e[n]);return i}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(266),i=(n(0),n(101));function o(){return Object(r.a)()||i.a}},function(e,t,n){var r;"undefined"!==typeof self&&self,r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="./src/mermaid.js")}({"./node_modules/node-libs-browser/mock/empty.js":function(e,t){},"./node_modules/path-browserify/index.js":function(e,t,n){(function(e){function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r=-1&&!i;o--){var a=o>=0?arguments[o]:e.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return(i?"/":"")+(t=n(r(t.split("/"),(function(e){return!!e})),!i).join("/"))||"."},t.normalize=function(e){var o=t.isAbsolute(e),a="/"===i(e,-1);return(e=n(r(e.split("/"),(function(e){return!!e})),!o).join("/"))||o||(e="."),e&&a&&(e+="/"),(o?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function r(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var i=r(e.split("/")),o=r(n.split("/")),a=Math.min(i.length,o.length),s=a,c=0;c=1;--o)if(47===(t=e.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},t.basename=function(e,t){var n=function(e){"string"!==typeof e&&(e+="");var t,n=0,r=-1,i=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!i){n=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":e.slice(n,r)}(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,n=0,r=-1,i=!0,o=0,a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(47!==s)-1===r&&(i=!1,r=a+1),46===s?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){n=a+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===n+1?"":e.slice(t,r)};var i="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n("./node_modules/process/browser.js"))},"./node_modules/process/browser.js":function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"===typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"===typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function d(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&h())}function h(){if(!l){var e=s(d);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;n docs/getting-started/Setup.md","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","babel-eslint":"^10.1.0","d3":"^5.7.0","dagre":"^0.8.4","dagre-d3":"^0.6.4","entity-decode":"^2.0.2","graphlib":"^2.1.7","he":"^1.2.0","khroma":"^1.1.0","minify":"^4.1.1","moment-mini":"^2.22.1","stylis":"^3.5.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.8.4","@babel/register":"^7.0.0","@percy/cypress":"*","babel-core":"7.0.0-bridge.0","babel-jest":"^24.9.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","cypress":"4.0.1","documentation":"^12.0.1","eslint":"^6.3.0","eslint-config-prettier":"^6.3.0","eslint-plugin-prettier":"^3.1.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^24.9.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.12.0","prettier":"^1.18.2","puppeteer":"^1.17.0","sass-loader":"^7.1.0","start-server-and-test":"^1.10.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^3.7.0","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},"./src/config.js":function(e,t,n){"use strict";n.r(t),n.d(t,"defaultConfig",(function(){return c})),n.d(t,"updateCurrentConfig",(function(){return d})),n.d(t,"setSiteConfig",(function(){return h})),n.d(t,"setSiteConfigDelta",(function(){return p})),n.d(t,"updateSiteConfig",(function(){return g})),n.d(t,"getSiteConfig",(function(){return y})),n.d(t,"setConfig",(function(){return m})),n.d(t,"getConfig",(function(){return b})),n.d(t,"sanitize",(function(){return v})),n.d(t,"addDirective",(function(){return x})),n.d(t,"reset",(function(){return w}));var r,i=n("./src/utils.js"),o=n("./src/logger.js"),a=n("./src/themes/index.js"),s=n("./src/defaultConfig.js"),c=Object.freeze(s.default),u=Object(i.assignWithDepth)({},c),l=[],f=Object(i.assignWithDepth)({},c),d=function(e,t){for(var n=Object(i.assignWithDepth)({},e),o={},s=0;s"),i.logger.info("vertexText"+s);var c=function(e){var t,n,i=Object(r.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),o=i.append("xhtml:div"),a=e.label,s=e.isNode?"nodeLabel":"edgeLabel";return o.html(''+a+""),t=o,(n=e.labelStyle)&&t.attr("style",n),o.style("display","inline-block"),o.style("white-space","nowrap"),o.attr("xmlns","http://www.w3.org/1999/xhtml"),i.node()}({isNode:a,label:s.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")}))});return c}var u=document.createElementNS("http://www.w3.org/2000/svg","text");u.setAttribute("style",t.replace("color:","fill:"));var l=[];l="string"===typeof s?s.split(/\\n|\n|/gi):Array.isArray(s)?s:[];for(var f=0;f=a||o>=s},p=function(e,t,n){r.logger.warn("intersection calc o:",t," i:",n,e);var i=e.x,o=e.y,a=Math.abs(i-n.x),s=e.width/2,c=n.xMath.abs(i-t.x)*u){var y=n.y=0;x--){var w=u[x],_=i[n.fromCluster].node;if(h(_,w)||v)r.logger.trace("Outside point",w),v||b.unshift(w);else{r.logger.warn("inside",n.fromCluster,w,_);var k=p(_,m,w);b.unshift(k),v=!0}m=w}u=b,l=!0}var O,E=u.filter((function(e){return!Number.isNaN(e.y)})),S=Object(o.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(o.curveBasis);switch(n.thickness){case"normal":O="edge-thickness-normal";break;case"thick":O="edge-thickness-thick";break;default:O=""}switch(n.pattern){case"solid":O+=" edge-pattern-solid";break;case"dotted":O+=" edge-pattern-dotted";break;case"dashed":O+=" edge-pattern-dashed"}var C=e.append("path").attr("d",S(E)).attr("id",n.id).attr("class"," "+O+(n.classes?" "+n.classes:"")),T="";switch(Object(a.getConfig)().state.arrowMarkerAbsolute&&(T=(T=(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),r.logger.info("arrowTypeStart",n.arrowTypeStart),r.logger.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":C.attr("marker-start","url("+T+"#"+s+"-crossStart)");break;case"arrow_point":C.attr("marker-start","url("+T+"#"+s+"-pointStart)");break;case"arrow_barb":C.attr("marker-start","url("+T+"#"+s+"-barbStart)");break;case"arrow_circle":C.attr("marker-start","url("+T+"#"+s+"-circleStart)");break;case"aggregation":C.attr("marker-start","url("+T+"#"+s+"-aggregationStart)");break;case"extension":C.attr("marker-start","url("+T+"#"+s+"-extensionStart)");break;case"composition":C.attr("marker-start","url("+T+"#"+s+"-compositionStart)");break;case"dependency":C.attr("marker-start","url("+T+"#"+s+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":C.attr("marker-end","url("+T+"#"+s+"-crossEnd)");break;case"arrow_point":C.attr("marker-end","url("+T+"#"+s+"-pointEnd)");break;case"arrow_barb":C.attr("marker-end","url("+T+"#"+s+"-barbEnd)");break;case"arrow_circle":C.attr("marker-end","url("+T+"#"+s+"-circleEnd)");break;case"aggregation":C.attr("marker-end","url("+T+"#"+s+"-aggregationEnd)");break;case"extension":C.attr("marker-end","url("+T+"#"+s+"-extensionEnd)");break;case"composition":C.attr("marker-end","url("+T+"#"+s+"-compositionEnd)");break;case"dependency":C.attr("marker-end","url("+T+"#"+s+"-dependencyEnd)")}var j={};return l&&(j.updatedPath=u),j.originalPath=n.points,j}},"./src/dagre-wrapper/index.js":function(e,t,n){"use strict";n.r(t),n.d(t,"render",(function(){return g}));var r=n("dagre"),i=n.n(r),o=n("graphlib"),a=n.n(o),s=n("./src/dagre-wrapper/markers.js"),c=n("./src/dagre-wrapper/shapes/util.js"),u=n("./src/dagre-wrapper/mermaid-graphlib.js"),l=n("./src/dagre-wrapper/nodes.js"),f=n("./src/dagre-wrapper/clusters.js"),d=n("./src/dagre-wrapper/edges.js"),h=n("./src/logger.js"),p=function e(t,n,r,o){h.logger.info("Graph in recursive render: XXX",a.a.json.write(n),o);var s=n.graph().rankdir;h.logger.warn("Dir in recursive render - dir:",s);var p=t.insert("g").attr("class","root");n.nodes()?h.logger.info("Recursive render XXX",n.nodes()):h.logger.info("No nodes found for",n),n.edges().length>0&&h.logger.info("Recursive edges",n.edge(n.edges()[0]));var g=p.insert("g").attr("class","clusters"),y=p.insert("g").attr("class","edgePaths"),m=p.insert("g").attr("class","edgeLabels"),b=p.insert("g").attr("class","nodes");return n.nodes().forEach((function(t){var i=n.node(t);if("undefined"!==typeof o){var a=JSON.parse(JSON.stringify(o.clusterData));h.logger.info("Setting data for cluster XXX (",t,") ",a,o),n.setNode(o.id,a),n.parent(t)||(h.logger.warn("Setting parent",t,o.id),n.setParent(t,o.id,a))}if(h.logger.info("(Insert) Node XXX"+t+": "+JSON.stringify(n.node(t))),i&&i.clusterNode){h.logger.info("Cluster identified",t,i,n.node(t));var f=e(b,i.graph,r,n.node(t));Object(c.updateNodeBounds)(i,f),Object(l.setNodeElem)(f,i),h.logger.warn("Recursive render complete",f,i)}else n.children(t).length>0?(h.logger.info("Cluster - the non recursive path XXX",t,i.id,i,n),h.logger.info(Object(u.findNonClusterChild)(i.id,n)),u.clusterDb[i.id]={id:Object(u.findNonClusterChild)(i.id,n),node:i}):(h.logger.info("Node - the non recursive path",t,i.id,i),Object(l.insertNode)(b,n.node(t),s))})),n.edges().forEach((function(e){var t=n.edge(e.v,e.w,e.name);h.logger.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),h.logger.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(n.edge(e))),h.logger.info("Fix",u.clusterDb,"ids:",e.v,e.w,"Translateing: ",u.clusterDb[e.v],u.clusterDb[e.w]),Object(d.insertEdgeLabel)(m,t)})),n.edges().forEach((function(e){h.logger.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),h.logger.info("#############################################"),h.logger.info("### Layout ###"),h.logger.info("#############################################"),h.logger.info(n),i.a.layout(n),h.logger.info("Graph after layout:",a.a.json.write(n)),Object(u.sortNodesByHierarchy)(n).forEach((function(e){var t=n.node(e);h.logger.info("Position "+e+": "+JSON.stringify(n.node(e))),h.logger.info("Position "+e+": ("+t.x,","+t.y,") width: ",t.width," height: ",t.height),t&&t.clusterNode?Object(l.positionNode)(t):n.children(e).length>0?(Object(f.insertCluster)(g,t),u.clusterDb[t.id].node=t):Object(l.positionNode)(t)})),n.edges().forEach((function(e){var t=n.edge(e);h.logger.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t),t);var i=Object(d.insertEdge)(y,e,t,u.clusterDb,r,n);Object(d.positionEdgeLabel)(t,i)})),p},g=function(e,t,n,r,i){Object(s.default)(e,n,r,i),Object(l.clear)(),Object(d.clear)(),Object(f.clear)(),Object(u.clear)(),h.logger.warn("Graph at first:",a.a.json.write(t)),Object(u.adjustClustersAndEdges)(t),h.logger.warn("Graph after:",a.a.json.write(t)),p(e,t,r)}},"./src/dagre-wrapper/intersect/index.js":function(e,t,n){"use strict";n.r(t);var r=n("./src/dagre-wrapper/intersect/intersect-node.js"),i=n.n(r),o=n("./src/dagre-wrapper/intersect/intersect-circle.js"),a=n("./src/dagre-wrapper/intersect/intersect-ellipse.js"),s=n("./src/dagre-wrapper/intersect/intersect-polygon.js"),c=n("./src/dagre-wrapper/intersect/intersect-rect.js");t.default={node:i.a,circle:o.default,ellipse:a.default,polygon:s.default,rect:c.default}},"./src/dagre-wrapper/intersect/intersect-circle.js":function(e,t,n){"use strict";n.r(t);var r=n("./src/dagre-wrapper/intersect/intersect-ellipse.js");t.default=function(e,t,n){return Object(r.default)(e,t,t,n)}},"./src/dagre-wrapper/intersect/intersect-ellipse.js":function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n,r){var i=e.x,o=e.y,a=i-r.x,s=o-r.y,c=Math.sqrt(t*t*s*s+n*n*a*a),u=Math.abs(t*n*a/c);r.x0}n.r(t),t.default=function(e,t,n,i){var o,a,s,c,u,l,f,d,h,p,g,y,m;if(o=t.y-e.y,s=e.x-t.x,u=t.x*e.y-e.x*t.y,h=o*n.x+s*n.y+u,p=o*i.x+s*i.y+u,(0===h||0===p||!r(h,p))&&(a=i.y-n.y,c=n.x-i.x,l=i.x*n.y-n.x*i.y,f=a*e.x+c*e.y+l,d=a*t.x+c*t.y+l,(0===f||0===d||!r(f,d))&&0!==(g=o*c-a*s)))return y=Math.abs(g/2),{x:(m=s*l-c*u)<0?(m-y)/g:(m+y)/g,y:(m=a*u-o*l)<0?(m-y)/g:(m+y)/g}}},"./src/dagre-wrapper/intersect/intersect-node.js":function(e,t){e.exports=function(e,t){return e.intersect(t)}},"./src/dagre-wrapper/intersect/intersect-polygon.js":function(e,t,n){"use strict";n.r(t);var r=n("./src/dagre-wrapper/intersect/intersect-line.js");t.default=function(e,t,n){var i=e.x,o=e.y,a=[],s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;"function"===typeof t.forEach?t.forEach((function(e){s=Math.min(s,e.x),c=Math.min(c,e.y)})):(s=Math.min(s,t.x),c=Math.min(c,t.y));for(var u=i-e.width/2-s,l=o-e.height/2-c,f=0;f1&&a.sort((function(e,t){var r=e.x-n.x,i=e.y-n.y,o=Math.sqrt(r*r+i*i),a=t.x-n.x,s=t.y-n.y,c=Math.sqrt(a*a+s*s);return oMath.abs(a)*u?(s<0&&(u=-u),n=0===s?0:u*a/s,r=u):(a<0&&(c=-c),n=c,r=0===a?0:c*s/a),{x:i+n,y:o+r}}},"./src/dagre-wrapper/markers.js":function(e,t,n){"use strict";n.r(t);var r=n("./src/logger.js"),i={extension:function(e,t,n){r.logger.trace("Making markers for ",n),e.append("defs").append("marker").attr("id",t+"-extensionStart").attr("class","marker extension "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:function(e,t){e.append("defs").append("marker").attr("id",t+"-compositionStart").attr("class","marker composition "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:function(e,t){e.append("defs").append("marker").attr("id",t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:function(e,t){e.append("defs").append("marker").attr("id",t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},point:function(e,t){e.append("marker").attr("id",t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:function(e,t){e.append("marker").attr("id",t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:function(e,t){e.append("marker").attr("id",t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:function(e,t){e.append("defs").append("marker").attr("id",t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}};t.default=function(e,t,n,r){t.forEach((function(t){i[t](e,n,r)}))}},"./src/dagre-wrapper/mermaid-graphlib.js":function(e,t,n){"use strict";n.r(t),n.d(t,"clusterDb",(function(){return a})),n.d(t,"clear",(function(){return u})),n.d(t,"extractDecendants",(function(){return d})),n.d(t,"validate",(function(){return h})),n.d(t,"findNonClusterChild",(function(){return p})),n.d(t,"adjustClustersAndEdges",(function(){return y})),n.d(t,"extractor",(function(){return m})),n.d(t,"sortNodesByHierarchy",(function(){return v}));var r=n("./src/logger.js"),i=n("graphlib"),o=n.n(i),a={},s={},c={},u=function(){s={},c={},a={}},l=function(e,t){return r.logger.debug("In isDecendant",t," ",e," = ",s[t].indexOf(e)>=0),s[t].indexOf(e)>=0},f=function e(t,n,i,o){r.logger.warn("Copying children of ",t,"root",o,"data",n.node(t),o);var a=n.children(t)||[];t!==o&&a.push(t),r.logger.warn("Copying (nodes) clusterId",t,"nodes",a),a.forEach((function(a){if(n.children(a).length>0)e(a,n,i,o);else{var c=n.node(a);r.logger.info("cp ",a," to ",o," with parent ",t),i.setNode(a,c),o!==n.parent(a)&&(r.logger.warn("Setting parent",a,n.parent(a)),i.setParent(a,n.parent(a))),t!==o&&a!==t?(r.logger.debug("Setting parent",a,t),i.setParent(a,t)):(r.logger.info("In copy ",t,"root",o,"data",n.node(t),o),r.logger.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==o,"node!==clusterId",a!==t));var u=n.edges(a);r.logger.debug("Copying Edges",u),u.forEach((function(e){r.logger.info("Edge",e);var a=n.edge(e.v,e.w,e.name);r.logger.info("Edge data",a,o);try{!function(e,t){return r.logger.info("Decendants of ",t," is ",s[t]),r.logger.info("Edge is ",e),e.v!==t&&e.w!==t&&(s[t]?(r.logger.info("Here "),s[t].indexOf(e.v)>=0||!!l(e.v,t)||!!l(e.w,t)||s[t].indexOf(e.w)>=0):(r.logger.debug("Tilt, ",t,",not in decendants"),!1))}(e,o)?r.logger.info("Skipping copy of edge ",e.v,"--\x3e",e.w," rootId: ",o," clusterId:",t):(r.logger.info("Copying as ",e.v,e.w,a,e.name),i.setEdge(e.v,e.w,a,e.name),r.logger.info("newGraph edges ",i.edges(),i.edge(i.edges()[0])))}catch(c){r.logger.error(c)}}))}r.logger.debug("Removing node",a),n.removeNode(a)}))},d=function e(t,n){for(var r=n.children(t),i=[].concat(r),o=0;o0)return r.logger.trace("The node ",t[n].v," is part of and edge even though it has children"),!1;if(e.children(t[n].w).length>0)return r.logger.trace("The node ",t[n].w," is part of and edge even though it has children"),!1}return!0},p=function e(t,n){r.logger.trace("Searching",t);var i=n.children(t);if(r.logger.trace("Searching children of id ",t,i),i.length<1)return r.logger.trace("This is a valid node",t),t;for(var o=0;o ",a),a}},g=function(e){return a[e]&&a[e].externalConnections&&a[e]?a[e].id:e},y=function(e,t){!e||t>10?r.logger.debug("Opting out, no graph "):(r.logger.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(r.logger.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),s[t]=d(t,e),a[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){var n=e.children(t),i=e.edges();n.length>0?(r.logger.debug("Cluster identified",t,s),i.forEach((function(e){e.v!==t&&e.w!==t&&l(e.v,t)^l(e.w,t)&&(r.logger.warn("Edge: ",e," leaves cluster ",t),r.logger.warn("Decendants of XXX ",t,": ",s[t]),a[t].externalConnections=!0)}))):r.logger.debug("Not a cluster ",t,s)})),e.edges().forEach((function(t){var n=e.edge(t);r.logger.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),r.logger.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));var i=t.v,o=t.w;r.logger.warn("Fix XXX",a,"ids:",t.v,t.w,"Translateing: ",a[t.v]," --- ",a[t.w]),(a[t.v]||a[t.w])&&(r.logger.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),i=g(t.v),o=g(t.w),e.removeEdge(t.v,t.w,t.name),i!==t.v&&(n.fromCluster=t.v),o!==t.w&&(n.toCluster=t.w),r.logger.warn("Fix Replacing with XXX",i,o,t.name),e.setEdge(i,o,n,t.name))})),r.logger.warn("Adjusted Graph",o.a.json.write(e)),m(e,0),r.logger.trace(a))},m=function e(t,n){if(r.logger.warn("extractor - ",n,o.a.json.write(t),t.children("D")),n>10)r.logger.error("Bailing out");else{for(var i=t.nodes(),s=!1,c=0;c0}if(s){r.logger.debug("Nodes = ",i,n);for(var d=0;d0){r.logger.warn("Cluster without external connections, without a parent and with children",h,n);var p=t.graph(),g=new o.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB"===p.rankdir?"LR":"TB",nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));r.logger.warn("Old graph before copy",o.a.json.write(t)),f(h,t,g,h),t.setNode(h,{clusterNode:!0,id:h,clusterData:a[h].clusterData,labelText:a[h].labelText,graph:g}),r.logger.warn("New graph after copy node: (",h,")",o.a.json.write(g)),r.logger.debug("Old graph after copy",o.a.json.write(t))}else r.logger.warn("Cluster ** ",h," **not meeting the criteria !externalConnections:",!a[h].externalConnections," no parent: ",!t.parent(h)," children ",t.children(h)&&t.children(h).length>0,t.children("D"),n),r.logger.debug(a);else r.logger.debug("Not a cluster",h,n)}i=t.nodes(),r.logger.warn("New list of nodes",i);for(var y=0;y"),t.labelStyle,!0,!0));if(Object(a.getConfig)().flowchart.htmlLabels){var w=x.children[0],_=Object(r.select)(x);p=w.getBoundingClientRect(),_.attr("width",p.width),_.attr("height",p.height)}var k=t.padding/2;return Object(r.select)(x).attr("transform","translate( "+(p.width>v.width?0:(v.width-p.width)/2)+", "+(v.height+k+5)+")"),Object(r.select)(g).attr("transform","translate( "+(p.widtht.height/2-u)){var i=u*u*(1-r*r/(c*c));0!=i&&(i=Math.sqrt(i)),i=u-i,e.y-t.y>0&&(i=-i),n.y+=i}return n},r},start:function(e,t){var n=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Object(o.updateNodeBounds)(t,r),t.intersect=function(e){return s.default.circle(t,7,e)},n},end:function(e,t){var n=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Object(o.updateNodeBounds)(t,i),t.intersect=function(e){return s.default.circle(t,7,e)},n},note:u.default,subroutine:function(e,t){var n=Object(o.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+t.padding,c=i.height+t.padding,u=[{x:0,y:0},{x:a,y:0},{x:a,y:-c},{x:0,y:-c},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-c},{x:-8,y:-c},{x:-8,y:0}],l=Object(o.insertPolygonShape)(r,a,c,u);return Object(o.updateNodeBounds)(t,l),t.intersect=function(e){return s.default.polygon(t,e)},r},fork:f,join:f,class_box:function(e,t){var n,i=t.padding/2;n=t.classes?"node "+t.classes:"node default";var u=e.insert("g").attr("class",n).attr("id",t.domId||t.id),f=u.insert("rect",":first-child"),d=u.insert("line"),h=u.insert("line"),p=0,g=4,y=u.insert("g").attr("class","label"),m=0,b=t.classData.annotations&&t.classData.annotations[0],v=t.classData.annotations[0]?"\xab"+t.classData.annotations[0]+"\xbb":"",x=y.node().appendChild(Object(c.default)(v,t.labelStyle,!0,!0)),w=x.getBBox();if(Object(a.getConfig)().flowchart.htmlLabels){var _=x.children[0],k=Object(r.select)(x);w=_.getBoundingClientRect(),k.attr("width",w.width),k.attr("height",w.height)}t.classData.annotations[0]&&(g+=w.height+4,p+=w.width);var O=t.classData.id;void 0!==t.classData.type&&""!==t.classData.type&&(O+="<"+t.classData.type+">");var E=y.node().appendChild(Object(c.default)(O,t.labelStyle,!0,!0));Object(r.select)(E).attr("class","classTitle");var S=E.getBBox();if(Object(a.getConfig)().flowchart.htmlLabels){var C=E.children[0],T=Object(r.select)(E);S=C.getBoundingClientRect(),T.attr("width",S.width),T.attr("height",S.height)}g+=S.height+4,S.width>p&&(p=S.width);var j=[];t.classData.members.forEach((function(e){var n=Object(l.parseMember)(e).displayText,i=y.node().appendChild(Object(c.default)(n,t.labelStyle,!0,!0)),o=i.getBBox();if(Object(a.getConfig)().flowchart.htmlLabels){var s=i.children[0],u=Object(r.select)(i);o=s.getBoundingClientRect(),u.attr("width",o.width),u.attr("height",o.height)}o.width>p&&(p=o.width),g+=o.height+4,j.push(i)})),g+=8;var A=[];if(t.classData.methods.forEach((function(e){var n=Object(l.parseMember)(e).displayText,i=y.node().appendChild(Object(c.default)(n,t.labelStyle,!0,!0)),o=i.getBBox();if(Object(a.getConfig)().flowchart.htmlLabels){var s=i.children[0],u=Object(r.select)(i);o=s.getBoundingClientRect(),u.attr("width",o.width),u.attr("height",o.height)}o.width>p&&(p=o.width),g+=o.height+4,A.push(i)})),g+=8,b){var M=(p-w.width)/2;Object(r.select)(x).attr("transform","translate( "+(-1*p/2+M)+", "+-1*g/2+")"),m=w.height+4}var P=(p-S.width)/2;return Object(r.select)(E).attr("transform","translate( "+(-1*p/2+P)+", "+(-1*g/2+m)+")"),m+=S.height+4,d.attr("class","divider").attr("x1",-p/2-i).attr("x2",p/2+i).attr("y1",-g/2-i+8+m).attr("y2",-g/2-i+8+m),m+=8,j.forEach((function(e){Object(r.select)(e).attr("transform","translate( "+-p/2+", "+(-1*g/2+m+4)+")"),m+=S.height+4})),m+=8,h.attr("class","divider").attr("x1",-p/2-i).attr("x2",p/2+i).attr("y1",-g/2-i+8+m).attr("y2",-g/2-i+8+m),m+=8,A.forEach((function(e){Object(r.select)(e).attr("transform","translate( "+-p/2+", "+(-1*g/2+m)+")"),m+=S.height+4})),f.attr("class","outer title-state").attr("x",-p/2-i).attr("y",-g/2-i).attr("width",p+t.padding).attr("height",g+t.padding),Object(o.updateNodeBounds)(t,f),t.intersect=function(e){return s.default.rect(t,e)},u}},h={},p=function(e,t,n){var r,i;t.link?(r=e.insert("svg:a").attr("xlink:href",t.link).attr("target",t.linkTarget||"_blank"),i=d[t.shape](r,t,n)):r=i=d[t.shape](e,t,n),t.tooltip&&i.attr("title",t.tooltip),t.class&&i.attr("class","node default "+t.class),h[t.id]=r,t.haveCallback&&h[t.id].attr("class",h[t.id].attr("class")+" clickable")},g=function(e,t){h[t.id]=e},y=function(){h={}},m=function(e){var t=h[e.id];i.logger.trace("Transforming node",e,"translate("+(e.x-e.width/2-5)+", "+(e.y-e.height/2-5)+")"),e.clusterNode?t.attr("transform","translate("+(e.x-e.width/2-8)+", "+(e.y-e.height/2-8)+")"):t.attr("transform","translate("+e.x+", "+e.y+")")}},"./src/dagre-wrapper/shapes/note.js":function(e,t,n){"use strict";n.r(t);var r=n("./src/dagre-wrapper/shapes/util.js"),i=n("./src/logger.js"),o=n("./src/dagre-wrapper/intersect/index.js");t.default=function(e,t){var n=Object(r.labelHelper)(e,t,"node "+t.classes,!0),a=n.shapeSvg,s=n.bbox,c=n.halfPadding;i.logger.info("Classes = ",t.classes);var u=a.insert("rect",":first-child");return u.attr("rx",t.rx).attr("ry",t.ry).attr("x",-s.width/2-c).attr("y",-s.height/2-c).attr("width",s.width+t.padding).attr("height",s.height+t.padding),Object(r.updateNodeBounds)(t,u),t.intersect=function(e){return o.default.rect(t,e)},a}},"./src/dagre-wrapper/shapes/util.js":function(e,t,n){"use strict";n.r(t),n.d(t,"labelHelper",(function(){return a})),n.d(t,"updateNodeBounds",(function(){return s})),n.d(t,"insertPolygonShape",(function(){return c}));var r=n("./src/dagre-wrapper/createLabel.js"),i=n("./src/config.js"),o=n("d3"),a=function(e,t,n,a){var s;s=n||"node default";var c=e.insert("g").attr("class",s).attr("id",t.domId||t.id),u=c.insert("g").attr("class","label").attr("style",t.labelStyle),l=u.node().appendChild(Object(r.default)(t.labelText,t.labelStyle,!1,a)),f=l.getBBox();if(Object(i.getConfig)().flowchart.htmlLabels){var d=l.children[0],h=Object(o.select)(l);f=d.getBoundingClientRect(),h.attr("width",f.width),h.attr("height",f.height)}var p=t.padding/2;return u.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),{shapeSvg:c,bbox:f,halfPadding:p,label:u}},s=function(e,t){var n=t.node().getBBox();e.width=n.width,e.height=n.height};function c(e,t,n,r){return e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+n/2+")")}},"./src/defaultConfig.js":function(e,t,n){"use strict";n.r(t);var r={theme:"default",themeVariables:n("./src/themes/index.js").default.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,fontFamily:'"trebuchet ms", verdana, arial;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],flowchart:{diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"linear",padding:15,useMaxWidth:!0},sequence:{activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open-Sans", "sans-serif"',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d",useMaxWidth:!0,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1},class:{arrowMarkerAbsolute:!1,useMaxWidth:!0},git:{arrowMarkerAbsolute:!1,useWidth:void 0,useMaxWidth:!0},state:{dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0},er:{diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0}};r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute,r.git.arrowMarkerAbsolute=r.arrowMarkerAbsolute,t.default=r},"./src/diagrams/class/classDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return p})),n.d(t,"addClass",(function(){return y})),n.d(t,"lookUpDomId",(function(){return m})),n.d(t,"clear",(function(){return b})),n.d(t,"getClass",(function(){return v})),n.d(t,"getClasses",(function(){return x})),n.d(t,"getRelations",(function(){return w})),n.d(t,"addRelation",(function(){return _})),n.d(t,"addAnnotation",(function(){return k})),n.d(t,"addMember",(function(){return O})),n.d(t,"addMembers",(function(){return E})),n.d(t,"cleanupLabel",(function(){return S})),n.d(t,"setCssClass",(function(){return C})),n.d(t,"setLink",(function(){return T})),n.d(t,"setClickEvent",(function(){return j})),n.d(t,"bindFunctions",(function(){return M})),n.d(t,"lineType",(function(){return P})),n.d(t,"relationType",(function(){return N}));var r=n("d3"),i=n("./src/logger.js"),o=n("./src/config.js"),a=n("./src/diagrams/common/common.js"),s=n("./src/utils.js"),c=n("./src/mermaidAPI.js"),u="classid-",l=[],f={},d=0,h=[],p=function(e,t,n){c.default.parseDirective(this,e,t,n)},g=function(e){var t="",n=e;if(e.indexOf("~")>0){var r=e.split("~");n=r[0],t=r[1]}return{className:n,type:t}},y=function(e){var t=g(e);"undefined"===typeof f[t.className]&&(f[t.className]={id:t.className,type:t.type,cssClasses:[],methods:[],members:[],annotations:[],domId:u+t.className+"-"+d},d++)},m=function(e){for(var t=Object.keys(f),n=0;n>")?r.annotations.push(i.substring(2,i.length-2)):i.indexOf(")")>0?r.methods.push(i):i&&r.members.push(i)}},E=function(e,t){Array.isArray(t)&&(t.reverse(),t.forEach((function(t){return O(e,t)})))},S=function(e){return":"===e.substring(0,1)?e.substr(1).trim():e.trim()},C=function(e,t){e.split(",").forEach((function(e){var n=e;e[0].match(/\d/)&&(n=u+n),"undefined"!==typeof f[n]&&f[n].cssClasses.push(t)}))},T=function(e,t,n){var r=o.getConfig();e.split(",").forEach((function(e){var i=e;e[0].match(/\d/)&&(i=u+i),"undefined"!==typeof f[i]&&(f[i].link=s.default.formatUrl(t,r),n&&(f[i].tooltip=a.default.sanitizeText(n,r)))})),C(e,"clickable")},j=function(e,t,n){e.split(",").forEach((function(e){A(e,t,n),f[e].haveCallback=!0})),C(e,"clickable")},A=function(e,t,n){var r=o.getConfig(),i=e,c=m(i);"loose"===r.securityLevel&&"undefined"!==typeof t&&"undefined"!==typeof f[i]&&(n&&(f[i].tooltip=a.default.sanitizeText(n,r)),h.push((function(){var e=document.querySelector('[id="'.concat(c,'"]'));null!==e&&e.addEventListener("click",(function(){s.default.runFunc(t,c)}),!1)})))},M=function(e){h.forEach((function(t){t(e)}))},P={LINE:0,DOTTED_LINE:1},N={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},D=function(e){var t=Object(r.select)(".mermaidTooltip");null===(t._groups||t)[0][0]&&(t=Object(r.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Object(r.select)(e).select("svg").selectAll("g.node").on("mouseover",(function(){var e=Object(r.select)(this);if(null!==e.attr("title")){var n=this.getBoundingClientRect();t.transition().duration(200).style("opacity",".9"),t.html(e.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.classed("hover",!0)}})).on("mouseout",(function(){t.transition().duration(500).style("opacity",0),Object(r.select)(this).classed("hover",!1)}))};h.push(D),t.default={parseDirective:p,getConfig:function(){return o.getConfig().class},addClass:y,bindFunctions:M,clear:b,getClass:v,getClasses:x,addAnnotation:k,getRelations:w,addRelation:_,addMember:O,addMembers:E,cleanupLabel:S,lineType:P,relationType:N,setClickEvent:j,setCssClass:C,setLink:T,lookUpDomId:m}},"./src/diagrams/class/classRenderer-v2.js":function(e,t,n){"use strict";n.r(t),n.d(t,"addClasses",(function(){return b})),n.d(t,"addRelations",(function(){return v})),n.d(t,"setConf",(function(){return w})),n.d(t,"drawOld",(function(){return _})),n.d(t,"draw",(function(){return k}));var r=n("d3"),i=n("dagre"),o=n.n(i),a=n("graphlib"),s=n.n(a),c=n("./src/logger.js"),u=n("./src/diagrams/class/classDb.js"),l=n("./src/diagrams/class/parser/classDiagram.jison"),f=n("./src/diagrams/class/svgDraw.js"),d=n("./src/config.js"),h=n("./src/dagre-wrapper/index.js"),p=n("./src/utils.js"),g=n("./src/diagrams/common/common.js");l.parser.yy=u.default;var y={},m={dividerMargin:10,padding:5,textHeight:10},b=function(e,t){var n=Object.keys(e);c.logger.info("keys:",n),c.logger.info(e),n.forEach((function(n){var r=e[n],i="";r.cssClasses.length>0&&(i=i+" "+r.cssClasses.join(" "));var o={labelStyle:""},a=void 0!==r.text?r.text:r.id,s="";r.type,s="class_box",t.setNode(r.id,{labelStyle:o.labelStyle,shape:s,labelText:a,classData:r,rx:0,ry:0,class:i,style:o.style,id:r.id,domId:r.domId,haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:Object(d.getConfig)().flowchart.padding}),c.logger.info("setNode",{labelStyle:o.labelStyle,shape:s,labelText:a,rx:0,ry:0,class:i,style:o.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:Object(d.getConfig)().flowchart.padding})}))},v=function(e,t){var n=0;e.forEach((function(i){n++;var o={classes:"relation"};o.pattern=1==i.relation.lineType?"dashed":"solid",o.id="id"+n,"arrow_open"===i.type?o.arrowhead="none":o.arrowhead="normal",c.logger.info(o,i),o.startLabelRight="none"===i.relationTitle1?"":i.relationTitle1,o.endLabelLeft="none"===i.relationTitle2?"":i.relationTitle2,o.arrowTypeStart=O(i.relation.type1),o.arrowTypeEnd=O(i.relation.type2);var a="",s="";if("undefined"!==typeof i.style){var u=Object(p.getStylesFromArray)(i.style);a=u.style,s=u.labelStyle}else a="fill:none";o.style=a,o.labelStyle=s,"undefined"!==typeof i.interpolate?o.curve=Object(p.interpolateToCurve)(i.interpolate,r.curveLinear):"undefined"!==typeof e.defaultInterpolate?o.curve=Object(p.interpolateToCurve)(e.defaultInterpolate,r.curveLinear):o.curve=Object(p.interpolateToCurve)(m.curve,r.curveLinear),i.text=i.title,"undefined"===typeof i.text?"undefined"!==typeof i.style&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",o.labelpos="c",Object(d.getConfig)().flowchart.htmlLabels,o.labelType="text",o.label=i.text.replace(g.default.lineBreakRegex,"\n"),"undefined"===typeof i.style&&(o.style=o.style||"stroke: #333; stroke-width: 1.5px;fill:none"),o.labelStyle=o.labelStyle.replace("color:","fill:")),t.setEdge(i.id1,i.id2,o,n)}))},x=function(e){for(var t=Object.keys(y),n=0;n "+e.w+": "+JSON.stringify(i.edge(e))),f.default.drawEdge(n,i.edge(e),i.edge(e).relation,m))}));var w=n.node().getBBox(),_=w.width+40,k=w.height+40;Object(p.configureSvgSize)(n,k,_,m.useMaxWidth);var O="".concat(w.x-20," ").concat(w.y-20," ").concat(_," ").concat(k);c.logger.debug("viewBox ".concat(O)),n.attr("viewBox",O)},k=function(e,t){c.logger.info("Drawing class"),u.default.clear(),l.parser.parse(e);var n=Object(d.getConfig)().flowchart;c.logger.info("config:",n);var i=n.nodeSpacing||50,o=n.rankSpacing||50,a=new s.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:i,ranksep:o,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),f=u.default.getClasses(),g=u.default.getRelations();c.logger.info(g),b(f,a,t),v(g,a);var y=Object(r.select)('[id="'.concat(t,'"]'));y.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var m=Object(r.select)("#"+t+" g");Object(h.render)(m,a,["aggregation","extension","composition","dependency"],"classDiagram",t);var x=y.node().getBBox(),w=x.width+16,_=x.height+16;if(c.logger.debug("new ViewBox 0 0 ".concat(w," ").concat(_),"translate(".concat(8-a._label.marginx,", ").concat(8-a._label.marginy,")")),Object(p.configureSvgSize)(y,_,w,n.useMaxWidth),y.attr("viewBox","0 0 ".concat(w," ").concat(_)),y.select("g").attr("transform","translate(".concat(8-a._label.marginx,", ").concat(8-x.y,")")),!n.htmlLabels)for(var k=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label'),O=0;O "+e.w+": "+JSON.stringify(a.edge(e))),f.default.drawEdge(i,a.edge(e),a.edge(e).relation,p))}));var w=i.node().getBBox(),_=w.width+40,k=w.height+40;Object(d.configureSvgSize)(i,k,_,p.useMaxWidth);var O="".concat(w.x-20," ").concat(w.y-20," ").concat(_," ").concat(k);c.logger.debug("viewBox ".concat(O)),i.attr("viewBox",O)};t.default={setConf:y,draw:m}},"./src/diagrams/class/parser/classDiagram.jison":function(e,t,n){(function(e,r){var i=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,7],n=[1,6],r=[1,14],i=[1,25],o=[1,28],a=[1,26],s=[1,27],c=[1,29],u=[1,30],l=[1,31],f=[1,33],d=[1,34],h=[1,35],p=[10,19],g=[1,47],y=[1,48],m=[1,49],b=[1,50],v=[1,51],x=[1,52],w=[10,19,25,32,33,41,44,45,46,47,48,49],_=[10,19,23,25,32,33,37,41,44,45,46,47,48,49,66,67,68],k=[10,13,17,19],O=[41,66,67,68],E=[41,48,49,66,67,68],S=[41,44,45,46,47,66,67,68],C=[10,19,25],T=[1,81],j={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,graphConfig:6,openDirective:7,typeDirective:8,closeDirective:9,NEWLINE:10,":":11,argDirective:12,open_directive:13,type_directive:14,arg_directive:15,close_directive:16,CLASS_DIAGRAM:17,statements:18,EOF:19,statement:20,className:21,alphaNumToken:22,GENERICTYPE:23,relationStatement:24,LABEL:25,classStatement:26,methodStatement:27,annotationStatement:28,clickStatement:29,cssClassStatement:30,CLASS:31,STYLE_SEPARATOR:32,STRUCT_START:33,members:34,STRUCT_STOP:35,ANNOTATION_START:36,ANNOTATION_END:37,MEMBER:38,SEPARATOR:39,relation:40,STR:41,relationType:42,lineType:43,AGGREGATION:44,EXTENSION:45,COMPOSITION:46,DEPENDENCY:47,LINE:48,DOTTED_LINE:49,CALLBACK:50,LINK:51,CSSCLASS:52,commentToken:53,textToken:54,graphCodeTokens:55,textNoTagsToken:56,TAGSTART:57,TAGEND:58,"==":59,"--":60,PCT:61,DEFAULT:62,SPACE:63,MINUS:64,keywords:65,UNICODE_TEXT:66,NUM:67,ALPHA:68,$accept:0,$end:1},terminals_:{2:"error",10:"NEWLINE",11:":",13:"open_directive",14:"type_directive",15:"arg_directive",16:"close_directive",17:"CLASS_DIAGRAM",19:"EOF",23:"GENERICTYPE",25:"LABEL",31:"CLASS",32:"STYLE_SEPARATOR",33:"STRUCT_START",35:"STRUCT_STOP",36:"ANNOTATION_START",37:"ANNOTATION_END",38:"MEMBER",39:"SEPARATOR",41:"STR",44:"AGGREGATION",45:"EXTENSION",46:"COMPOSITION",47:"DEPENDENCY",48:"LINE",49:"DOTTED_LINE",50:"CALLBACK",51:"LINK",52:"CSSCLASS",55:"graphCodeTokens",57:"TAGSTART",58:"TAGEND",59:"==",60:"--",61:"PCT",62:"DEFAULT",63:"SPACE",64:"MINUS",65:"keywords",66:"UNICODE_TEXT",67:"NUM",68:"ALPHA"},productions_:[0,[3,1],[3,2],[4,1],[5,4],[5,6],[7,1],[8,1],[12,1],[9,1],[6,4],[18,1],[18,2],[18,3],[21,1],[21,2],[21,3],[21,2],[20,1],[20,2],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[26,2],[26,4],[26,5],[26,7],[28,4],[34,1],[34,2],[27,1],[27,2],[27,1],[27,1],[24,3],[24,4],[24,4],[24,5],[40,3],[40,2],[40,2],[40,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[29,3],[29,4],[29,3],[29,4],[30,3],[53,1],[53,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[22,1]],performAction:function(e,t,n,r,i,o,a){var s=o.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(o[s],"type_directive");break;case 8:o[s]=o[s].trim().replace(/'/g,'"'),r.parseDirective(o[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","class");break;case 14:this.$=o[s];break;case 15:this.$=o[s-1]+o[s];break;case 16:this.$=o[s-2]+"~"+o[s-1]+o[s];break;case 17:this.$=o[s-1]+"~"+o[s];break;case 18:r.addRelation(o[s]);break;case 19:o[s-1].title=r.cleanupLabel(o[s]),r.addRelation(o[s-1]);break;case 26:r.addClass(o[s]);break;case 27:r.addClass(o[s-2]),r.setCssClass(o[s-2],o[s]);break;case 28:r.addClass(o[s-3]),r.addMembers(o[s-3],o[s-1]);break;case 29:r.addClass(o[s-5]),r.setCssClass(o[s-5],o[s-3]),r.addMembers(o[s-5],o[s-1]);break;case 30:r.addAnnotation(o[s],o[s-2]);break;case 31:this.$=[o[s]];break;case 32:o[s].push(o[s-1]),this.$=o[s];break;case 33:case 35:case 36:break;case 34:r.addMember(o[s-1],r.cleanupLabel(o[s]));break;case 37:this.$={id1:o[s-2],id2:o[s],relation:o[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 38:this.$={id1:o[s-3],id2:o[s],relation:o[s-1],relationTitle1:o[s-2],relationTitle2:"none"};break;case 39:this.$={id1:o[s-3],id2:o[s],relation:o[s-2],relationTitle1:"none",relationTitle2:o[s-1]};break;case 40:this.$={id1:o[s-4],id2:o[s],relation:o[s-2],relationTitle1:o[s-3],relationTitle2:o[s-1]};break;case 41:this.$={type1:o[s-2],type2:o[s],lineType:o[s-1]};break;case 42:this.$={type1:"none",type2:o[s],lineType:o[s-1]};break;case 43:this.$={type1:o[s-1],type2:"none",lineType:o[s]};break;case 44:this.$={type1:"none",type2:"none",lineType:o[s]};break;case 45:this.$=r.relationType.AGGREGATION;break;case 46:this.$=r.relationType.EXTENSION;break;case 47:this.$=r.relationType.COMPOSITION;break;case 48:this.$=r.relationType.DEPENDENCY;break;case 49:this.$=r.lineType.LINE;break;case 50:this.$=r.lineType.DOTTED_LINE;break;case 51:this.$=o[s-2],r.setClickEvent(o[s-1],o[s],void 0);break;case 52:this.$=o[s-3],r.setClickEvent(o[s-2],o[s-1],o[s]);break;case 53:this.$=o[s-2],r.setLink(o[s-1],o[s],void 0);break;case 54:this.$=o[s-3],r.setLink(o[s-2],o[s-1],o[s]);break;case 55:r.setCssClass(o[s-1],o[s])}},table:[{3:1,4:2,5:3,6:4,7:5,13:t,17:n},{1:[3]},{1:[2,1]},{3:8,4:2,5:3,6:4,7:5,13:t,17:n},{1:[2,3]},{8:9,14:[1,10]},{10:[1,11]},{14:[2,6]},{1:[2,2]},{9:12,11:[1,13],16:r},e([11,16],[2,7]),{5:23,7:5,13:t,18:15,20:16,21:24,22:32,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:o,38:a,39:s,50:c,51:u,52:l,66:f,67:d,68:h},{10:[1,36]},{12:37,15:[1,38]},{10:[2,9]},{19:[1,39]},{10:[1,40],19:[2,11]},e(p,[2,18],{25:[1,41]}),e(p,[2,20]),e(p,[2,21]),e(p,[2,22]),e(p,[2,23]),e(p,[2,24]),e(p,[2,25]),e(p,[2,33],{40:42,42:45,43:46,25:[1,44],41:[1,43],44:g,45:y,46:m,47:b,48:v,49:x}),{21:53,22:32,66:f,67:d,68:h},e(p,[2,35]),e(p,[2,36]),{22:54,66:f,67:d,68:h},{21:55,22:32,66:f,67:d,68:h},{21:56,22:32,66:f,67:d,68:h},{41:[1,57]},e(w,[2,14],{22:32,21:58,23:[1,59],66:f,67:d,68:h}),e(_,[2,69]),e(_,[2,70]),e(_,[2,71]),e(k,[2,4]),{9:60,16:r},{16:[2,8]},{1:[2,10]},{5:23,7:5,13:t,18:61,19:[2,12],20:16,21:24,22:32,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:o,38:a,39:s,50:c,51:u,52:l,66:f,67:d,68:h},e(p,[2,19]),{21:62,22:32,41:[1,63],66:f,67:d,68:h},{40:64,42:45,43:46,44:g,45:y,46:m,47:b,48:v,49:x},e(p,[2,34]),{43:65,48:v,49:x},e(O,[2,44],{42:66,44:g,45:y,46:m,47:b}),e(E,[2,45]),e(E,[2,46]),e(E,[2,47]),e(E,[2,48]),e(S,[2,49]),e(S,[2,50]),e(p,[2,26],{32:[1,67],33:[1,68]}),{37:[1,69]},{41:[1,70]},{41:[1,71]},{22:72,66:f,67:d,68:h},e(w,[2,15]),e(w,[2,17],{22:32,21:73,66:f,67:d,68:h}),{10:[1,74]},{19:[2,13]},e(C,[2,37]),{21:75,22:32,66:f,67:d,68:h},{21:76,22:32,41:[1,77],66:f,67:d,68:h},e(O,[2,43],{42:78,44:g,45:y,46:m,47:b}),e(O,[2,42]),{22:79,66:f,67:d,68:h},{34:80,38:T},{21:82,22:32,66:f,67:d,68:h},e(p,[2,51],{41:[1,83]}),e(p,[2,53],{41:[1,84]}),e(p,[2,55]),e(w,[2,16]),e(k,[2,5]),e(C,[2,39]),e(C,[2,38]),{21:85,22:32,66:f,67:d,68:h},e(O,[2,41]),e(p,[2,27],{33:[1,86]}),{35:[1,87]},{34:88,35:[2,31],38:T},e(p,[2,30]),e(p,[2,52]),e(p,[2,54]),e(C,[2,40]),{34:89,38:T},e(p,[2,28]),{35:[2,32]},{35:[1,90]},e(p,[2,29])],defaultActions:{2:[2,1],4:[2,3],7:[2,6],8:[2,2],14:[2,9],38:[2,8],39:[2,10],61:[2,13],88:[2,32]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],o=[],a=this.table,s="",c=0,u=0,l=0,f=2,d=1,h=o.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(e,g.yy),g.yy.lexer=p,g.yy.parser=this,"undefined"==typeof p.yylloc&&(p.yylloc={});var m=p.yylloc;o.push(m);var b=p.options&&p.options.ranges;function v(){var e;return"number"!==typeof(e=r.pop()||p.lex()||d)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"===typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,w,_,k,O,E,S,C,T,j={};;){if(_=n[n.length-1],this.defaultActions[_]?k=this.defaultActions[_]:(null!==x&&"undefined"!=typeof x||(x=v()),k=a[_]&&a[_][x]),"undefined"===typeof k||!k.length||!k[0]){var A="";for(E in T=[],a[_])this.terminals_[E]&&E>f&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},A={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:case 8:case 15:break;case 7:return 10;case 9:case 10:return 17;case 11:return this.begin("struct"),33;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),35;case 16:return"MEMBER";case 17:return 31;case 18:return 52;case 19:return 50;case 20:return 51;case 21:return 36;case 22:return 37;case 23:this.begin("generic");break;case 24:case 27:this.popState();break;case 25:return"GENERICTYPE";case 26:this.begin("string");break;case 28:return"STR";case 29:case 30:return 45;case 31:case 32:return 47;case 33:return 46;case 34:return 44;case 35:return 48;case 36:return 49;case 37:return 25;case 38:return 32;case 39:return 64;case 40:return"DOT";case 41:return"PLUS";case 42:return 61;case 43:case 44:return"EQUALS";case 45:return 68;case 46:return"PUNCTUATION";case 47:return 67;case 48:return 66;case 49:return 63;case 50:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[27,28],inclusive:!1},generic:{rules:[24,25],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};function M(){this.yy={}}return j.lexer=A,M.prototype=j,j.Parser=M,new M}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/class/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return"g.classGroup text {\n fill: ".concat(e.nodeBorder,";\n fill: ").concat(e.classText,";\n stroke: none;\n font-family: ").concat(e.fontFamily,";\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ").concat(e.nodeBorder,";\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n}\n\ng.classGroup line {\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(e.mainBkg,";\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ").concat(e.nodeBorder,";\n font-size: 10px;\n}\n\n.relation {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n#compositionStart, .composition {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ").concat(e.mainBkg," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ").concat(e.mainBkg," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n")}},"./src/diagrams/class/svgDraw.js":function(e,t,n){"use strict";n.r(t),n.d(t,"drawEdge",(function(){return c})),n.d(t,"drawClass",(function(){return u})),n.d(t,"parseMember",(function(){return l}));var r=n("d3"),i=n("./src/diagrams/class/classDb.js"),o=n("./src/utils.js"),a=n("./src/logger.js"),s=0,c=function(e,t,n,c){var u=function(e){switch(e){case i.relationType.AGGREGATION:return"aggregation";case i.relationType.EXTENSION:return"extension";case i.relationType.COMPOSITION:return"composition";case i.relationType.DEPENDENCY:return"dependency"}};t.points=t.points.filter((function(e){return!Number.isNaN(e.y)}));var l,f,d=t.points,h=Object(r.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(r.curveBasis),p=e.append("path").attr("d",h(d)).attr("id","edge"+s).attr("class","relation"),g="";c.arrowMarkerAbsolute&&(g=(g=(g=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&p.attr("class","relation dashed-line"),"none"!==n.relation.type1&&p.attr("marker-start","url("+g+"#"+u(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&p.attr("marker-end","url("+g+"#"+u(n.relation.type2)+"End)");var y,m,b,v,x=t.points.length,w=o.default.calcLabelPosition(t.points);if(l=w.x,f=w.y,x%2!==0&&x>1){var _=o.default.calcCardinalityPosition("none"!==n.relation.type1,t.points,t.points[0]),k=o.default.calcCardinalityPosition("none"!==n.relation.type2,t.points,t.points[x-1]);a.logger.debug("cardinality_1_point "+JSON.stringify(_)),a.logger.debug("cardinality_2_point "+JSON.stringify(k)),y=_.x,m=_.y,b=k.x,v=k.y}if("undefined"!==typeof n.title){var O=e.append("g").attr("class","classLabel"),E=O.append("text").attr("class","label").attr("x",l).attr("y",f).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=E;var S=E.node().getBBox();O.insert("rect",":first-child").attr("class","box").attr("x",S.x-c.padding/2).attr("y",S.y-c.padding/2).attr("width",S.width+c.padding).attr("height",S.height+c.padding)}a.logger.info("Rendering relation "+JSON.stringify(n)),"undefined"!==typeof n.relationTitle1&&"none"!==n.relationTitle1&&e.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",y).attr("y",m).attr("fill","black").attr("font-size","6").text(n.relationTitle1),"undefined"!==typeof n.relationTitle2&&"none"!==n.relationTitle2&&e.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",v).attr("fill","black").attr("font-size","6").text(n.relationTitle2),s++},u=function(e,t,n){a.logger.info("Rendering class "+t);var r,o=t.id,s={id:o,label:t.id,width:0,height:0},c=e.append("g").attr("id",Object(i.lookUpDomId)(o)).attr("class","classGroup");r=t.link?c.append("svg:a").attr("xlink:href",t.link).attr("target","_blank").append("text").attr("y",n.textHeight+n.padding).attr("x",0):c.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var u=!0;t.annotations.forEach((function(e){var t=r.append("tspan").text("\xab"+e+"\xbb");u||t.attr("dy",n.textHeight),u=!1}));var l=t.id;void 0!==t.type&&""!==t.type&&(l+="<"+t.type+">");var f=r.append("tspan").text(l).attr("class","title");u||f.attr("dy",n.textHeight);var d=r.node().getBBox().height,h=c.append("line").attr("x1",0).attr("y1",n.padding+d+n.dividerMargin/2).attr("y2",n.padding+d+n.dividerMargin/2),g=c.append("text").attr("x",n.padding).attr("y",d+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");u=!0,t.members.forEach((function(e){p(g,e,u,n),u=!1}));var y=g.node().getBBox(),m=c.append("line").attr("x1",0).attr("y1",n.padding+d+n.dividerMargin+y.height).attr("y2",n.padding+d+n.dividerMargin+y.height),b=c.append("text").attr("x",n.padding).attr("y",d+2*n.dividerMargin+y.height+n.textHeight).attr("fill","white").attr("class","classText");u=!0,t.methods.forEach((function(e){p(b,e,u,n),u=!1}));var v=c.node().getBBox(),x=" ";t.cssClasses.length>0&&(x+=t.cssClasses.join(" "));var w=c.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",v.width+2*n.padding).attr("height",v.height+n.padding+.5*n.dividerMargin).attr("class",x).node().getBBox().width;return r.node().childNodes.forEach((function(e){e.setAttribute("x",(w-e.getBBox().width)/2)})),t.tooltip&&r.insert("title").text(t.tooltip),h.attr("x2",w),m.attr("x2",w),s.width=w,s.height=v.height+n.padding+.5*n.dividerMargin,s},l=function(e){var t=e.match(/(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+)/),n=e.match(/^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/);return t&&!n?f(t):n?d(n):h(e)},f=function(e){var t="";try{t=(e[1]?e[1].trim():"")+(e[2]?e[2].trim():"")+(e[3]?g(e[3].trim()):"")+" "+(e[4]?e[4].trim():"")}catch(n){t=e}return{displayText:t,cssStyle:""}},d=function(e){var t="",n="";try{var r=e[1]?e[1].trim():"",i=e[2]?e[2].trim():"",o=e[3]?g(e[3].trim()):"",a=e[4]?e[4].trim():"";n=r+i+"("+o+")"+(e[5]?" : "+g(e[5]).trim():""),t=y(a)}catch(s){n=e}return{displayText:n,cssStyle:t}},h=function(e){var t="",n="",r="",i=e.indexOf("("),o=e.indexOf(")");if(i>1&&o>i&&o<=e.length){var a="",s="",c=e.substring(0,1);c.match(/\w/)?s=e.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(a=c),s=e.substring(1,i).trim());var u=e.substring(i+1,o),l=e.substring(o+1,1);n=y(l),t=a+s+"("+g(u.trim())+")",o<"".length&&""!==(r=e.substring(o+2).trim())&&(r=" : "+g(r))}else t=g(e);return{displayText:t,cssStyle:n}},p=function(e,t,n,r){var i=l(t),o=e.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&o.attr("style",i.cssStyle),n||o.attr("dy",r.textHeight)},g=function e(t){var n=t;return-1!=t.indexOf("~")?e(n=(n=n.replace("~","<")).replace("~",">")):n},y=function(e){switch(e){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}};t.default={drawClass:u,drawEdge:c,parseMember:l}},"./src/diagrams/common/common.js":function(e,t,n){"use strict";n.r(t),n.d(t,"getRows",(function(){return r})),n.d(t,"removeScript",(function(){return i})),n.d(t,"sanitizeText",(function(){return o})),n.d(t,"lineBreakRegex",(function(){return a})),n.d(t,"hasBreaks",(function(){return s})),n.d(t,"splitBreaks",(function(){return c}));var r=function(e){if(!e)return 1;var t=u(e);return(t=t.replace(/\\n/g,"#br#")).split("#br#")},i=function(e){for(var t="",n=0;n>=0;){if(!((n=e.indexOf("=0)){t+=e,n=-1;break}t+=e.substr(0,n),(n=(e=e.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,e=e.substr(n))}return t},o=function(e,t){var n=e,r=!0;if(!t.flowchart||!1!==t.flowchart.htmlLabels&&"false"!==t.flowchart.htmlLabels||(r=!1),r){var o=t.securityLevel;"antiscript"===o?n=i(n):"loose"!==o&&(n=(n=(n=u(n)).replace(//g,">")).replace(/=/g,"="),n=l(n))}return n},a=//gi,s=function(e){return//gi.test(e)},c=function(e){return e.split(//gi)},u=function(e){return e.replace(a,"#br#")},l=function(e){return e.replace(/#br#/g,"
")};t.default={getRows:r,sanitizeText:o,hasBreaks:s,splitBreaks:c,lineBreakRegex:a,removeScript:i}},"./src/diagrams/er/erDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return u}));var r=n("./src/logger.js"),i=n("./src/mermaidAPI.js"),o=n("./src/config.js"),a={},s=[],c="",u=function(e,t,n){i.default.parseDirective(this,e,t,n)};t.default={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:u,getConfig:function(){return o.getConfig().er},addEntity:function(e){"undefined"===typeof a[e]&&(a[e]=e,r.logger.debug("Added new entity :",e))},getEntities:function(){return a},addRelationship:function(e,t,n,i){var o={entityA:e,roleA:t,entityB:n,relSpec:i};s.push(o),r.logger.debug("Added new relationship :",o)},getRelationships:function(){return s},clear:function(){a={},s=[],c=""},setTitle:function(e){c=e},getTitle:function(){return c}}},"./src/diagrams/er/erMarkers.js":function(e,t,n){"use strict";n.r(t);var r={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"};t.default={ERMarkers:r,insertMarkers:function(e,t){var n;e.append("defs").append("marker").attr("id",r.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),e.append("defs").append("marker").attr("id",r.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M21,0 L21,18"),e.append("defs").append("marker").attr("id",r.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),e.append("defs").append("marker").attr("id",r.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}}},"./src/diagrams/er/erRenderer.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return y})),n.d(t,"draw",(function(){return v}));var r=n("graphlib"),i=n.n(r),o=n("d3"),a=n("./src/diagrams/er/erDb.js"),s=n("./src/diagrams/er/parser/erDiagram.jison"),c=n.n(s),u=n("dagre"),l=n.n(u),f=n("./src/config.js"),d=n("./src/logger.js"),h=n("./src/diagrams/er/erMarkers.js"),p=n("./src/utils.js"),g={},y=function(e){for(var t=Object.keys(e),n=0;nf&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},p={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),30;case 1:return this.begin("type_directive"),31;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),33;case 4:return 32;case 5:case 6:case 8:break;case 7:return 11;case 9:return 9;case 10:return 29;case 11:return 4;case 12:case 16:return 23;case 13:case 17:return 24;case 14:case 18:return 25;case 15:return 26;case 19:case 21:case 22:return 27;case 20:return 28;case 23:return 20;case 24:return t.yytext[0];case 25:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0}}};function g(){this.yy={}}return h.lexer=p,g.prototype=h,h.Parser=g,new g}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/er/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return"\n .entityBox {\n fill: ".concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(e.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(e.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(e.lineColor,";\n }\n")}},"./src/diagrams/flowchart/flowChartShapes.js":function(e,t,n){"use strict";n.r(t),n.d(t,"addToRender",(function(){return y})),n.d(t,"addToRenderV2",(function(){return m}));var r=n("dagre-d3"),i=n.n(r);function o(e,t,n){var r=.9*(t.width+t.height),o=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}],a=b(e,r,r,o);return n.intersect=function(e){return i.a.intersect.polygon(n,o,e)},a}function a(e,t,n){var r=t.height,o=r/4,a=t.width+2*o,s=[{x:o,y:0},{x:a-o,y:0},{x:a,y:-r/2},{x:a-o,y:-r},{x:o,y:-r},{x:0,y:-r/2}],c=b(e,a,r,s);return n.intersect=function(e){return i.a.intersect.polygon(n,s,e)},c}function s(e,t,n){var r=t.width,o=t.height,a=[{x:-o/2,y:0},{x:r,y:0},{x:r,y:-o},{x:-o/2,y:-o},{x:0,y:-o/2}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function c(e,t,n){var r=t.width,o=t.height,a=[{x:-2*o/6,y:0},{x:r-o/6,y:0},{x:r+2*o/6,y:-o},{x:o/6,y:-o}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function u(e,t,n){var r=t.width,o=t.height,a=[{x:2*o/6,y:0},{x:r+o/6,y:0},{x:r-2*o/6,y:-o},{x:-o/6,y:-o}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function l(e,t,n){var r=t.width,o=t.height,a=[{x:-2*o/6,y:0},{x:r+2*o/6,y:0},{x:r-o/6,y:-o},{x:o/6,y:-o}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function f(e,t,n){var r=t.width,o=t.height,a=[{x:o/6,y:0},{x:r-o/6,y:0},{x:r+2*o/6,y:-o},{x:-2*o/6,y:-o}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function d(e,t,n){var r=t.width,o=t.height,a=[{x:0,y:0},{x:r+o/2,y:0},{x:r,y:-o/2},{x:r+o/2,y:-o},{x:0,y:-o}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function h(e,t,n){var r=t.height,o=t.width+r/4,a=e.insert("rect",":first-child").attr("rx",r/2).attr("ry",r/2).attr("x",-o/2).attr("y",-r/2).attr("width",o).attr("height",r);return n.intersect=function(e){return i.a.intersect.rect(n,e)},a}function p(e,t,n){var r=t.width,o=t.height,a=[{x:0,y:0},{x:r,y:0},{x:r,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:r+8,y:0},{x:r+8,y:-o},{x:-8,y:-o},{x:-8,y:0}],s=b(e,r,o,a);return n.intersect=function(e){return i.a.intersect.polygon(n,a,e)},s}function g(e,t,n){var r=t.width,o=r/2,a=o/(2.5+r/50),s=t.height+a,c="M 0,"+a+" a "+o+","+a+" 0,0,0 "+r+" 0 a "+o+","+a+" 0,0,0 "+-r+" 0 l 0,"+s+" a "+o+","+a+" 0,0,0 "+r+" 0 l 0,"+-s,u=e.attr("label-offset-y",a).insert("path",":first-child").attr("d",c).attr("transform","translate("+-r/2+","+-(s/2+a)+")");return n.intersect=function(e){var t=i.a.intersect.rect(n,e),r=t.x-n.x;if(0!=o&&(Math.abs(r)n.height/2-a)){var s=a*a*(1-r*r/(o*o));0!=s&&(s=Math.sqrt(s)),s=a-s,e.y-n.y>0&&(s=-s),t.y+=s}return t},u}function y(e){e.shapes().question=o,e.shapes().hexagon=a,e.shapes().stadium=h,e.shapes().subroutine=p,e.shapes().cylinder=g,e.shapes().rect_left_inv_arrow=s,e.shapes().lean_right=c,e.shapes().lean_left=u,e.shapes().trapezoid=l,e.shapes().inv_trapezoid=f,e.shapes().rect_right_inv_arrow=d}function m(e){e({question:o}),e({hexagon:a}),e({stadium:h}),e({subroutine:p}),e({cylinder:g}),e({rect_left_inv_arrow:s}),e({lean_right:c}),e({lean_left:u}),e({trapezoid:l}),e({inv_trapezoid:f}),e({rect_right_inv_arrow:d})}function b(e,t,n,r){return e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+-t/2+","+n/2+")")}t.default={addToRender:y,addToRenderV2:m}},"./src/diagrams/flowchart/flowDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return k})),n.d(t,"lookUpDomId",(function(){return O})),n.d(t,"addVertex",(function(){return E})),n.d(t,"addSingleLink",(function(){return S})),n.d(t,"addLink",(function(){return C})),n.d(t,"updateLinkInterpolate",(function(){return T})),n.d(t,"updateLink",(function(){return j})),n.d(t,"addClass",(function(){return A})),n.d(t,"setDirection",(function(){return M})),n.d(t,"setClass",(function(){return P})),n.d(t,"setLink",(function(){return D})),n.d(t,"getTooltip",(function(){return R})),n.d(t,"setClickEvent",(function(){return I})),n.d(t,"bindFunctions",(function(){return L})),n.d(t,"getDirection",(function(){return B})),n.d(t,"getVertices",(function(){return F})),n.d(t,"getEdges",(function(){return z})),n.d(t,"getClasses",(function(){return U})),n.d(t,"clear",(function(){return W})),n.d(t,"setGen",(function(){return Y})),n.d(t,"defaultStyle",(function(){return V})),n.d(t,"addSubGraph",(function(){return q})),n.d(t,"getDepthFirstPos",(function(){return Z})),n.d(t,"indexNodes",(function(){return J})),n.d(t,"getSubGraphs",(function(){return Q})),n.d(t,"firstGraph",(function(){return ee}));var r=n("d3"),i=n("./src/utils.js"),o=n("./src/config.js"),a=n("./src/diagrams/common/common.js"),s=n("./src/mermaidAPI.js"),c=n("./src/logger.js");function u(e){return u="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}var l,f,d=0,h=o.getConfig(),p={},g=[],y=[],m=[],b={},v={},x=0,w=!0,_=[],k=function(e,t,n){s.default.parseDirective(this,e,t,n)},O=function(e){for(var t=Object.keys(p),n=0;n/)&&(l="LR"),l.match(/.*v/)&&(l="TB")},P=function(e,t){e.split(",").forEach((function(e){var n=e;"undefined"!==typeof p[n]&&p[n].classes.push(t),"undefined"!==typeof b[n]&&b[n].classes.push(t)}))},N=function(e,t){e.split(",").forEach((function(e){"undefined"!==typeof t&&(v["gen-1"===f?O(e):e]=a.default.sanitizeText(t,h))}))},D=function(e,t,n,r){e.split(",").forEach((function(e){"undefined"!==typeof p[e]&&(p[e].link=i.default.formatUrl(t,h),p[e].linkTarget=r)})),N(e,n),P(e,"clickable")},R=function(e){return v[e]},I=function(e,t,n){e.split(",").forEach((function(e){!function(e,t){var n=O(e);"loose"===o.getConfig().securityLevel&&"undefined"!==typeof t&&"undefined"!==typeof p[e]&&(p[e].haveCallback=!0,_.push((function(){var r=document.querySelector('[id="'.concat(n,'"]'));null!==r&&r.addEventListener("click",(function(){i.default.runFunc(t,e)}),!1)})))}(e,t)})),N(e,n),P(e,"clickable")},L=function(e){_.forEach((function(t){t(e)}))},B=function(){return l.trim()},F=function(){return p},z=function(){return g},U=function(){return y},H=function(e){var t=Object(r.select)(".mermaidTooltip");null===(t._groups||t)[0][0]&&(t=Object(r.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Object(r.select)(e).select("svg").selectAll("g.node").on("mouseover",(function(){var e=Object(r.select)(this);if(null!==e.attr("title")){var n=this.getBoundingClientRect();t.transition().duration(200).style("opacity",".9"),t.html(e.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.classed("hover",!0)}})).on("mouseout",(function(){t.transition().duration(500).style("opacity",0),Object(r.select)(this).classed("hover",!1)}))};_.push(H);var W=function(e){p={},y={},g=[],(_=[]).push(H),m=[],b={},x=0,v=[],w=!0,f=e||"gen-1"},Y=function(e){f=e||"gen-1"},V=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},q=function(e,t,n){var r=e.trim(),i=n;e===n&&n.match(/\s/)&&(r=void 0);var o=[];if(o=function(e){var t={boolean:{},number:{},string:{}},n=[];return e.filter((function(e){var r=u(e);return""!==e.trim()&&(r in t?!t[r].hasOwnProperty(e)&&(t[r][e]=!0):!(n.indexOf(e)>=0)&&n.push(e))}))}(o.concat.apply(o,t)),"gen-1"===f){c.logger.warn("LOOKING UP");for(var s=0;s2e3)){if(X[G]=n,m[n].id===t)return{result:!0,count:0};for(var i=0,o=1;i=0){var s=e(t,a);if(s.result)return{result:!0,count:o+s.count};o+=s.count}i+=1}return{result:!1,count:o}}},Z=function(e){return X[e]},J=function(){G=-1,m.length>0&&K("none",m.length-1)},Q=function(){return m},ee=function(){return!!w&&(w=!1,!0)},te=function(e,t){var n=!1;return e.forEach((function(e){e.nodes.indexOf(t)>=0&&(n=!0)})),n},ne=function(e,t){var n=[];return e.nodes.forEach((function(r,i){te(t,r)||n.push(e.nodes[i])})),{nodes:n}};t.default={parseDirective:k,defaultConfig:function(){return o.defaultConfig.flowchart},addVertex:E,lookUpDomId:O,addLink:C,updateLinkInterpolate:T,updateLink:j,addClass:A,setDirection:M,setClass:P,getTooltip:R,setClickEvent:I,setLink:D,bindFunctions:L,getDirection:B,getVertices:F,getEdges:z,getClasses:U,clear:W,setGen:Y,defaultStyle:V,addSubGraph:q,getDepthFirstPos:Z,indexNodes:J,getSubGraphs:Q,destructLink:function(e,t){var n,r=function(e){var t=e.trim(),n=t.slice(0,-1),r="arrow_open";switch(t.slice(-1)){case"x":r="arrow_cross","x"===t[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===t[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===t[0]&&(r="double_"+r,n=n.slice(1))}var i="normal",o=n.length-1;"="===n[0]&&(i="thick");var a=function(e,t){for(var n=t.length,r=0,i=0;i0&&(o=i.classes.join(" "));var s,c=Object(g.getStylesFromArray)(i.styles),l=void 0!==i.text?i.text:i.id;if(Object(u.getConfig)().flowchart.htmlLabels){var f={label:l.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")}))};(s=d()(r,f).node()).parentNode.removeChild(s)}else{var y=document.createElementNS("http://www.w3.org/2000/svg","text");y.setAttribute("style",c.labelStyle.replace("color:","fill:"));for(var m=l.split(p.default.lineBreakRegex),b=0;b=0;x--)s=m[x],h.logger.info("Subgraph - ",s),a.default.addVertex(s.id,s.title,"group",void 0,s.classes);var w=a.default.getVertices(),_=a.default.getEdges();h.logger.info(_);var k=0;for(k=m.length-1;k>=0;k--){s=m[k],Object(o.selectAll)("cluster").append("text");for(var O=0;O0&&(o=i.classes.join(" "));var s,c=Object(y.getStylesFromArray)(i.styles),l=void 0!==i.text?i.text:i.id;if(Object(u.getConfig)().flowchart.htmlLabels){var f={label:l.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")}))};(s=h()(r,f).node()).parentNode.removeChild(s)}else{var d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("style",c.labelStyle.replace("color:","fill:"));for(var m=l.split(g.default.lineBreakRegex),b=0;b').concat(s.text,"")):(d.labelType="text",d.label=s.text.replace(g.default.lineBreakRegex,"\n"),"undefined"===typeof s.style&&(d.style=d.style||"stroke: #333; stroke-width: 1.5px;fill:none"),d.labelStyle=d.labelStyle.replace("color:","fill:"))),d.id=c,d.class=l+" "+f,d.minlen=s.length||1,t.setEdge(a.default.lookUpDomId(s.start),a.default.lookUpDomId(s.end),d,i)}))},_=function(e){p.logger.info("Extracting classes"),a.default.clear();try{var t=c.a.parser;return t.yy=a.default,t.parse(e),a.default.getClasses()}catch(n){return}},k=function(e,t){p.logger.info("Drawing flowchart"),a.default.clear(),a.default.setGen("gen-1");var n=c.a.parser;n.yy=a.default,n.parse(e);var r=a.default.getDirection();"undefined"===typeof r&&(r="TD");for(var s,l=Object(u.getConfig)().flowchart,d=l.nodeSpacing||50,h=l.rankSpacing||50,g=new i.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:r,nodesep:d,ranksep:h,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),b=a.default.getSubGraphs(),v=b.length-1;v>=0;v--)s=b[v],a.default.addVertex(s.id,s.title,"group",void 0,s.classes);var _=a.default.getVertices();p.logger.warn("Get vertices",_);var k=a.default.getEdges(),O=0;for(O=b.length-1;O>=0;O--){s=b[O],Object(o.selectAll)("cluster").append("text");for(var E=0;Ef&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},Ge={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 75;case 11:return 84;case 12:return 76;case 13:return 90;case 14:return 77;case 15:return 78;case 16:return 79;case 17:case 18:return e.lex.firstGraph()&&this.begin("dir"),24;case 19:return 38;case 20:return 42;case 21:case 22:case 23:case 24:return 87;case 25:return this.popState(),25;case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:return this.popState(),26;case 36:return 91;case 37:return 99;case 38:return 47;case 39:return 96;case 40:return 46;case 41:return 20;case 42:return 92;case 43:return 110;case 44:case 45:case 46:return 70;case 47:case 48:case 49:return 69;case 50:return 51;case 51:return 52;case 52:return 53;case 53:return 54;case 54:return 55;case 55:return 56;case 56:return 57;case 57:return 58;case 58:return 97;case 59:return 100;case 60:return 111;case 61:return 108;case 62:return 101;case 63:case 64:return 109;case 65:return 102;case 66:return 61;case 67:return 81;case 68:return"SEP";case 69:return 80;case 70:return 95;case 71:return 63;case 72:return 62;case 73:return 65;case 74:return 64;case 75:return 106;case 76:return 107;case 77:return 71;case 78:return 49;case 79:return 50;case 80:return 40;case 81:return 41;case 82:return 59;case 83:return 60;case 84:return 117;case 85:return 21;case 86:return 22;case 87:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[25,26,27,28,29,30,31,32,33,34,35],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87],inclusive:!0}}};function Xe(){this.yy={}}return $e.lexer=Ge,Xe.prototype=$e,$e.Parser=Xe,new Xe}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/flowchart/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return".label {\n font-family: ".concat(e.fontFamily,";\n color: ").concat(e.nodeTextColor||e.textColor,";\n }\n\n .label text {\n fill: ").concat(e.nodeTextColor||e.textColor,";\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(e.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(e.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(e.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n background-color: ").concat(e.edgeLabelBackground,";\n fill: ").concat(e.edgeLabelBackground,";\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ").concat(e.clusterBkg,";\n stroke: ").concat(e.clusterBorder,";\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ").concat(e.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ").concat(e.fontFamily,";\n font-size: 12px;\n background: ").concat(e.tertiaryColor,";\n border: 1px solid ").concat(e.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n")}},"./src/diagrams/gantt/ganttDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return E})),n.d(t,"clear",(function(){return S})),n.d(t,"setAxisFormat",(function(){return C})),n.d(t,"getAxisFormat",(function(){return T})),n.d(t,"setTodayMarker",(function(){return j})),n.d(t,"getTodayMarker",(function(){return A})),n.d(t,"setDateFormat",(function(){return M})),n.d(t,"enableInclusiveEndDates",(function(){return P})),n.d(t,"endDatesAreInclusive",(function(){return N})),n.d(t,"getDateFormat",(function(){return D})),n.d(t,"setExcludes",(function(){return R})),n.d(t,"getExcludes",(function(){return I})),n.d(t,"setTitle",(function(){return L})),n.d(t,"getTitle",(function(){return B})),n.d(t,"addSection",(function(){return F})),n.d(t,"getSections",(function(){return z})),n.d(t,"getTasks",(function(){return U})),n.d(t,"addTask",(function(){return J})),n.d(t,"findTaskById",(function(){return Q})),n.d(t,"addTaskOrg",(function(){return ee})),n.d(t,"setLink",(function(){return ne})),n.d(t,"setClass",(function(){return re})),n.d(t,"setClickEvent",(function(){return oe})),n.d(t,"bindFunctions",(function(){return ae}));var r=n("moment-mini"),i=n.n(r),o=n("@braintree/sanitize-url"),a=n("./src/logger.js"),s=n("./src/config.js"),c=n("./src/utils.js"),u=n("./src/mermaidAPI.js");function l(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t=6&&n.indexOf("weekends")>=0||n.indexOf(e.format("dddd").toLowerCase())>=0||n.indexOf(e.format(t.trim()))>=0},W=function(e,t,n){if(n.length&&!e.manualEndTime){var r=i()(e.startTime,t,!0);r.add(1,"d");var o=i()(e.endTime,t,!0),a=Y(r,o,t,n);e.endTime=o.toDate(),e.renderEndTime=a}},Y=function(e,t,n,r){for(var i=!1,o=null;e<=t;)i||(o=t.toDate()),(i=H(e,n,r))&&t.add(1,"d"),e.add(1,"d");return o},V=function(e,t,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var o=null;if(r[1].split(" ").forEach((function(e){var t=Q(e);"undefined"!==typeof t&&(o?t.endTime>o.endTime&&(o=t):o=t)})),o)return o.endTime;var s=new Date;return s.setHours(0,0,0,0),s}var c=i()(n,t.trim(),!0);return c.isValid()?c.toDate():(a.logger.debug("Invalid date:"+n),a.logger.debug("With date format:"+t.trim()),new Date)},q=function(e,t){if(null!==e)switch(e[2]){case"s":t.add(e[1],"seconds");break;case"m":t.add(e[1],"minutes");break;case"h":t.add(e[1],"hours");break;case"d":t.add(e[1],"days");break;case"w":t.add(e[1],"weeks")}return t.toDate()},$=function(e,t,n,r){r=r||!1,n=n.trim();var o=i()(n,t.trim(),!0);return o.isValid()?(r&&o.add(1,"d"),o.toDate()):q(/^([\d]+)([wdhms])/.exec(n.trim()),i()(e))},G=0,X=function(e){return"undefined"===typeof e?"task"+(G+=1):e},K=[],Z={},J=function(e,t){var n={section:x,type:x,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:t},task:e,classes:[]},r=function(e,t){var n=(":"===t.substr(0,1)?t.substr(1,t.length):t).split(","),r={};se(n,r,w);for(var i=0;ir?i=1:n0&&(n=e.classes.join(" "));for(var r=0,i=0;in-t?n+o+1.5*u.leftPadding>a?t+r-5:n+r+5:(n-t)/2+t+r})).attr("y",(function(e,r){return e.order*t+u.barHeight/2+(u.fontSize/2-2)+n})).attr("text-height",i).attr("class",(function(e){var t=h(e.startTime),n=h(e.endTime);e.milestone&&(n=t+i);var r=this.getBBox().width,o="";e.classes.length>0&&(o=e.classes.join(" "));for(var s=0,c=0;cn-t?n+r+1.5*u.leftPadding>a?o+" taskTextOutsideLeft taskTextOutside"+s+" "+l:o+" taskTextOutsideRight taskTextOutside"+s+" "+l+" width-"+r:o+" taskText taskText"+s+" "+l+" width-"+r}))}(e,c,l,f,s,0,t),function(e,t){for(var n=[],r=0,i=0;i0&&a.setAttribute("dy","1em"),a.textContent=t[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(i,o){if(!(o>0))return i[1]*e/2+t;for(var a=0;af&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),32;case 1:return this.begin("type_directive"),33;case 2:return this.popState(),this.begin("arg_directive"),25;case 3:return this.popState(),this.popState(),35;case 4:return 34;case 5:case 6:case 7:case 9:case 10:case 11:break;case 8:return 11;case 12:this.begin("href");break;case 13:case 16:case 19:case 22:this.popState();break;case 14:return 30;case 15:this.begin("callbackname");break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 28;case 20:return 29;case 21:this.begin("click");break;case 23:return 27;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return"date";case 31:return 17;case 32:return 18;case 33:return 20;case 34:return 21;case 35:return 25;case 36:return 7;case 37:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37],inclusive:!0}}};function m(){this.yy={}}return g.lexer=y,m.prototype=g,g.Parser=m,new m}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/gantt/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(e.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(e.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(e.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(e.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(e.fontFamily,";\n fill: ").concat(e.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(e.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n\n .taskText:not([font-size]) {\n font-size: 11px;\n }\n\n .taskTextOutsideRight {\n fill: ").concat(e.taskTextDarkColor,";\n text-anchor: start;\n font-size: 11px;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(e.taskTextDarkColor,";\n text-anchor: end;\n font-size: 11px;\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(e.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(e.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(e.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(e.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(e.taskBkgColor,";\n stroke: ").concat(e.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(e.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(e.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(e.activeTaskBkgColor,";\n stroke: ").concat(e.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(e.doneTaskBorderColor,";\n fill: ").concat(e.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(e.critBorderColor,";\n fill: ").concat(e.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(e.critBorderColor,";\n fill: ").concat(e.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(e.critBorderColor,";\n fill: ").concat(e.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(e.textColor," ;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n")}},"./src/diagrams/git/gitGraphAst.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setDirection",(function(){return h})),n.d(t,"setOptions",(function(){return g})),n.d(t,"getOptions",(function(){return y})),n.d(t,"commit",(function(){return m})),n.d(t,"branch",(function(){return b})),n.d(t,"merge",(function(){return v})),n.d(t,"checkout",(function(){return x})),n.d(t,"reset",(function(){return w})),n.d(t,"prettyPrint",(function(){return O})),n.d(t,"clear",(function(){return E})),n.d(t,"getBranchesAsObjArray",(function(){return S})),n.d(t,"getBranches",(function(){return C})),n.d(t,"getCommits",(function(){return T})),n.d(t,"getCommitsArray",(function(){return j})),n.d(t,"getCurrentBranch",(function(){return A})),n.d(t,"getDirection",(function(){return M})),n.d(t,"getHead",(function(){return P}));var r=n("./src/logger.js"),i=n("./src/utils.js"),o={},a=null,s={master:a},c="master",u="LR",l=0;function f(){return Object(i.random)({length:7})}function d(e,t){for(r.logger.debug("Entering isfastforwardable:",e.id,t.id);e.seq<=t.seq&&e!==t&&null!=t.parent;){if(Array.isArray(t.parent))return r.logger.debug("In merge commit:",t.parent),d(e,o[t.parent[0]])||d(e,o[t.parent[1]]);t=o[t.parent]}return r.logger.debug(e.id,t.id),e.id===t.id}var h=function(e){u=e},p={},g=function(e){r.logger.debug("options str",e),e=(e=e&&e.trim())||"{}";try{p=JSON.parse(e)}catch(t){r.logger.error("error while parsing gitGraph options",t.message)}},y=function(){return p},m=function(e){var t={id:f(),message:e,seq:l++,parent:null==a?null:a.id};a=t,o[t.id]=t,s[c]=t.id,r.logger.debug("in pushCommit "+t.id)},b=function(e){s[e]=null!=a?a.id:null,r.logger.debug("in createBranch")},v=function(e){var t=o[s[c]],n=o[s[e]];if(function(e,t){return e.seq>t.seq&&d(t,e)}(t,n))r.logger.debug("Already merged");else{if(d(t,n))s[c]=s[e],a=o[s[c]];else{var i={id:f(),message:"merged branch "+e+" into "+c,seq:l++,parent:[null==a?null:a.id,s[e]]};a=i,o[i.id]=i,s[c]=i.id}r.logger.debug(s),r.logger.debug("in mergeBranch")}},x=function(e){r.logger.debug("in checkout");var t=s[c=e];a=o[t]},w=function(e){r.logger.debug("in reset",e);var t=e.split(":")[0],n=parseInt(e.split(":")[1]),i="HEAD"===t?a:o[s[t]];for(r.logger.debug(i,n);n>0;)if(n--,!(i=o[i.parent])){var u="Critical error - unique parent commit not found during reset";throw r.logger.error(u),u}a=i,s[c]=i.id};function _(e,t,n){var r=e.indexOf(t);-1===r?e.push(n):e.splice(r,1,n)}function k(e){var t=e.reduce((function(e,t){return e.seq>t.seq?e:t}),e[0]),n="";e.forEach((function(e){n+=e===t?"\t*":"\t|"}));var i=[n,t.id,t.seq];for(var a in s)s[a]===t.id&&i.push(a);if(r.logger.debug(i.join(" ")),Array.isArray(t.parent)){var c=o[t.parent[0]];_(e,t,c),e.push(o[t.parent[1]])}else{if(null==t.parent)return;var u=o[t.parent];_(e,t,u)}k(e=function(e,t){var n=Object.create(null);return e.reduce((function(e,r){var i=t(r);return n[i]||(n[i]=!0,e.push(r)),e}),[])}(e,(function(e){return e.id})))}var O=function(){r.logger.debug(o),k([j()[0]])},E=function(){o={},s={master:a=null},c="master",l=0},S=function(){var e=[];for(var t in s)e.push({name:t,commit:o[s[t]]});return e},C=function(){return s},T=function(){return o},j=function(){var e=Object.keys(o).map((function(e){return o[e]}));return e.forEach((function(e){r.logger.debug(e.id)})),e.sort((function(e,t){return t.seq-e.seq})),e},A=function(){return c},M=function(){return u},P=function(){return a};t.default={setDirection:h,setOptions:g,getOptions:y,commit:m,branch:b,merge:v,checkout:x,reset:w,prettyPrint:O,clear:E,getBranchesAsObjArray:S,getBranches:C,getCommits:T,getCommitsArray:j,getCurrentBranch:A,getDirection:M,getHead:P}},"./src/diagrams/git/gitGraphRenderer.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return h})),n.d(t,"draw",(function(){return x}));var r,i=n("d3"),o=n("./src/diagrams/git/gitGraphAst.js"),a=n("./src/diagrams/git/parser/gitGraph.jison"),s=n.n(a),c=n("./src/logger.js"),u=n("./src/utils.js"),l={},f={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},d={},h=function(e){d=e};function p(e,t,n,r){var o=Object(u.interpolateToCurve)(r,i.curveBasis),a=f.branchColors[n%f.branchColors.length],s=Object(i.line)().x((function(e){return Math.round(e.x)})).y((function(e){return Math.round(e.y)})).curve(o);e.append("svg:path").attr("d",s(t)).style("stroke",a).style("stroke-width",f.lineStrokeWidth).style("fill","none")}function g(e,t){t=t||e.node().getBBox();var n=e.node().getCTM();return{left:n.e+t.x*n.a,top:n.f+t.y*n.d,width:t.width,height:t.height}}function y(e,t,n,r,i){c.logger.debug("svgDrawLineForCommits: ",t,n);var o=g(e.select("#node-"+t+" circle")),a=g(e.select("#node-"+n+" circle"));switch(r){case"LR":if(o.left-a.left>f.nodeSpacing){var s={x:o.left-f.nodeSpacing,y:a.top+a.height/2};p(e,[s,{x:a.left+a.width,y:a.top+a.height/2}],i,"linear"),p(e,[{x:o.left,y:o.top+o.height/2},{x:o.left-f.nodeSpacing/2,y:o.top+o.height/2},{x:o.left-f.nodeSpacing/2,y:s.y},s],i)}else p(e,[{x:o.left,y:o.top+o.height/2},{x:o.left-f.nodeSpacing/2,y:o.top+o.height/2},{x:o.left-f.nodeSpacing/2,y:a.top+a.height/2},{x:a.left+a.width,y:a.top+a.height/2}],i);break;case"BT":if(a.top-o.top>f.nodeSpacing){var u={x:a.left+a.width/2,y:o.top+o.height+f.nodeSpacing};p(e,[u,{x:a.left+a.width/2,y:a.top}],i,"linear"),p(e,[{x:o.left+o.width/2,y:o.top+o.height},{x:o.left+o.width/2,y:o.top+o.height+f.nodeSpacing/2},{x:a.left+a.width/2,y:u.y-f.nodeSpacing/2},u],i)}else p(e,[{x:o.left+o.width/2,y:o.top+o.height},{x:o.left+o.width/2,y:o.top+f.nodeSpacing/2},{x:a.left+a.width/2,y:a.top-f.nodeSpacing/2},{x:a.left+a.width/2,y:a.top}],i)}}function m(e,t){return e.select(t).node().cloneNode(!0)}function b(e,t,n,i){var o,a=Object.keys(l).length;if("string"===typeof t)do{if(o=l[t],c.logger.debug("in renderCommitHistory",o.id,o.seq),e.select("#node-"+t).size()>0)return;e.append((function(){return m(e,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+o.id})).attr("transform",(function(){switch(i){case"LR":return"translate("+(o.seq*f.nodeSpacing+f.leftMargin)+", "+r*f.branchOffset+")";case"BT":return"translate("+(r*f.branchOffset+f.leftMargin)+", "+(a-o.seq)*f.nodeSpacing+")"}})).attr("fill",f.nodeFillColor).attr("stroke",f.nodeStrokeColor).attr("stroke-width",f.nodeStrokeWidth);var s=void 0;for(var u in n)if(n[u].commit===o){s=n[u];break}s&&(c.logger.debug("found branch ",s.name),e.select("#node-"+o.id+" p").append("xhtml:span").attr("class","branch-label").text(s.name+", ")),e.select("#node-"+o.id+" p").append("xhtml:span").attr("class","commit-id").text(o.id),""!==o.message&&"BT"===i&&e.select("#node-"+o.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+o.message),t=o.parent}while(t&&l[t]);Array.isArray(t)&&(c.logger.debug("found merge commmit",t),b(e,t[0],n,i),r++,b(e,t[1],n,i),r--)}function v(e,t,n,r){for(r=r||0;t.seq>0&&!t.lineDrawn;)"string"===typeof t.parent?(y(e,t.id,t.parent,n,r),t.lineDrawn=!0,t=l[t.parent]):Array.isArray(t.parent)&&(y(e,t.id,t.parent[0],n,r),y(e,t.id,t.parent[1],n,r+1),v(e,l[t.parent[1]],n,r+1),t.lineDrawn=!0,t=l[t.parent[0]])}var x=function(e,t,n){try{var a=s.a.parser;a.yy=o.default,a.yy.clear(),c.logger.debug("in gitgraph renderer",e+"\n","id:",t,n),a.parse(e+"\n"),f=Object.assign(f,d,o.default.getOptions()),c.logger.debug("effective options",f);var u=o.default.getDirection();l=o.default.getCommits();var h=o.default.getBranchesAsObjArray();"BT"===u&&(f.nodeLabel.x=h.length*f.branchOffset,f.nodeLabel.width="100%",f.nodeLabel.y=-2*f.nodeRadius);var p=Object(i.select)('[id="'.concat(t,'"]'));for(var g in function(e){e.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",f.nodeRadius).attr("cx",0).attr("cy",0),e.select("#def-commit").append("foreignObject").attr("width",f.nodeLabel.width).attr("height",f.nodeLabel.height).attr("x",f.nodeLabel.x).attr("y",f.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(p),r=1,h){var y=h[g];b(p,y.commit.id,h,u),v(p,y.commit,u),r++}p.attr("height",(function(){return"BT"===u?Object.keys(l).length*f.nodeSpacing:(h.length+1)*f.branchOffset}))}catch(m){c.logger.error("Error while rendering gitgraph"),c.logger.error(m.message)}};t.default={setConf:h,draw:x}},"./src/diagrams/git/parser/gitGraph.jison":function(e,t,n){(function(e,r){var i=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],o=[2,20],a=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(e,t,n,r,i,o,a){var s=o.length-1;switch(i){case 1:return o[s-1];case 2:return r.setDirection(o[s-3]),o[s-1];case 4:r.setOptions(o[s-1]),this.$=o[s];break;case 5:o[s-1]+=o[s],this.$=o[s-1];break;case 7:this.$=[];break;case 8:o[s-1].push(o[s]),this.$=o[s-1];break;case 9:this.$=o[s-1];break;case 11:r.commit(o[s]);break;case 12:r.branch(o[s]);break;case 13:r.checkout(o[s]);break;case 14:r.merge(o[s]);break;case 15:r.reset(o[s]);break;case 16:this.$="";break;case 17:this.$=o[s];break;case 18:this.$=o[s-1]+":"+o[s];break;case 19:this.$=o[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:t,9:6,12:n},{5:[1,8]},{7:[1,9]},e(r,[2,7],{10:10,11:[1,11]}),e(i,[2,6]),{6:12,7:t,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},e(i,[2,5]),{7:[1,21]},e(r,[2,8]),{12:[1,22]},e(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},e(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:o,25:31,26:a},{12:o,25:33,26:a},{12:[2,18]},{12:o,25:34,26:a},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],o=[],a=this.table,s="",c=0,u=0,l=0,f=2,d=1,h=o.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(e,g.yy),g.yy.lexer=p,g.yy.parser=this,"undefined"==typeof p.yylloc&&(p.yylloc={});var m=p.yylloc;o.push(m);var b=p.options&&p.options.ranges;function v(){var e;return"number"!==typeof(e=r.pop()||p.lex()||d)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"===typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,w,_,k,O,E,S,C,T,j={};;){if(_=n[n.length-1],this.defaultActions[_]?k=this.defaultActions[_]:(null!==x&&"undefined"!=typeof x||(x=v()),k=a[_]&&a[_][x]),"undefined"===typeof k||!k.length||!k[0]){var A="";for(E in T=[],a[_])this.terminals_[E]&&E>f&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:case 18:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/git/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n }\n"}},"./src/diagrams/info/infoDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setMessage",(function(){return a})),n.d(t,"getMessage",(function(){return s})),n.d(t,"setInfo",(function(){return c})),n.d(t,"getInfo",(function(){return u}));var r=n("./src/logger.js"),i="",o=!1,a=function(e){r.logger.debug("Setting message to: "+e),i=e},s=function(){return i},c=function(e){o=e},u=function(){return o};t.default={setMessage:a,getMessage:s,setInfo:c,getInfo:u}},"./src/diagrams/info/infoRenderer.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return u})),n.d(t,"draw",(function(){return l}));var r=n("d3"),i=n("./src/diagrams/info/infoDb.js"),o=n("./src/diagrams/info/parser/info.jison"),a=n.n(o),s=n("./src/logger.js"),c={},u=function(e){Object.keys(e).forEach((function(t){c[t]=e[t]}))},l=function(e,t,n){try{var o=a.a.parser;o.yy=i.default,s.logger.debug("Renering info diagram\n"+e),o.parse(e),s.logger.debug("Parsed info diagram");var c=Object(r.select)("#"+t);c.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),c.attr("height",100),c.attr("width",400)}catch(u){s.logger.error("Error while rendering info diagram"),s.logger.error(u.message)}};t.default={setConf:u,draw:l}},"./src/diagrams/info/parser/info.jison":function(e,t,n){(function(e,r){var i=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(e,t,n,r,i,o,a){switch(o.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},e(t,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},e(t,[2,3]),e(t,[2,4]),e(t,[2,5]),e(t,[2,6])],defaultActions:{4:[2,1]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],o=[],a=this.table,s="",c=0,u=0,l=0,f=2,d=1,h=o.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(e,g.yy),g.yy.lexer=p,g.yy.parser=this,"undefined"==typeof p.yylloc&&(p.yylloc={});var m=p.yylloc;o.push(m);var b=p.options&&p.options.ranges;function v(){var e;return"number"!==typeof(e=r.pop()||p.lex()||d)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"===typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,w,_,k,O,E,S,C,T,j={};;){if(_=n[n.length-1],this.defaultActions[_]?k=this.defaultActions[_]:(null!==x&&"undefined"!=typeof x||(x=v()),k=a[_]&&a[_][x]),"undefined"===typeof k||!k.length||!k[0]){var A="";for(E in T=[],a[_])this.terminals_[E]&&E>f&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/info/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(){return""}},"./src/diagrams/pie/parser/pie.jison":function(e,t,n){(function(e,r){var i=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,5],r=[1,6],i=[1,7],o=[1,9],a=[1,10,12,19,20,21,22],s=[1,6,10,12,19,20,21,22],c=[19,20,21],u=[1,22],l=[6,19,20,21,22],f={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,NEWLINE:19,";":20,EOF:21,open_directive:22,type_directive:23,arg_directive:24,close_directive:25,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",10:"txt",11:"value",12:"title",13:"title_value",17:":",19:"NEWLINE",20:";",21:"EOF",22:"open_directive",23:"type_directive",24:"arg_directive",25:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,2],[9,1],[5,3],[5,5],[4,1],[4,1],[4,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(e,t,n,r,i,o,a){var s=o.length-1;switch(i){case 6:this.$=o[s-1];break;case 8:r.addSection(o[s-1],r.cleanupValue(o[s]));break;case 9:this.$=o[s].trim(),r.setTitle(this.$);break;case 16:r.parseDirective("%%{","open_directive");break;case 17:r.parseDirective(o[s],"type_directive");break;case 18:o[s]=o[s].trim().replace(/'/g,'"'),r.parseDirective(o[s],"arg_directive");break;case 19:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:t,14:8,19:n,20:r,21:i,22:o},{1:[3]},{3:10,4:2,5:3,6:t,14:8,19:n,20:r,21:i,22:o},{3:11,4:2,5:3,6:t,14:8,19:n,20:r,21:i,22:o},e(a,[2,4],{7:12}),e(s,[2,13]),e(s,[2,14]),e(s,[2,15]),{15:13,23:[1,14]},{23:[2,16]},{1:[2,1]},{1:[2,2]},e(c,[2,7],{14:8,8:15,9:16,5:19,1:[2,3],10:[1,17],12:[1,18],22:o}),{16:20,17:[1,21],25:u},e([17,25],[2,17]),e(a,[2,5]),{4:23,19:n,20:r,21:i},{11:[1,24]},{13:[1,25]},e(c,[2,10]),e(l,[2,11]),{18:26,24:[1,27]},e(l,[2,19]),e(a,[2,6]),e(c,[2,8]),e(c,[2,9]),{16:28,25:u},{25:[2,18]},e(l,[2,12])],defaultActions:{9:[2,16],10:[2,1],11:[2,2],27:[2,18]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],o=[],a=this.table,s="",c=0,u=0,l=0,f=2,d=1,h=o.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(e,g.yy),g.yy.lexer=p,g.yy.parser=this,"undefined"==typeof p.yylloc&&(p.yylloc={});var m=p.yylloc;o.push(m);var b=p.options&&p.options.ranges;function v(){var e;return"number"!==typeof(e=r.pop()||p.lex()||d)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"===typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,w,_,k,O,E,S,C,T,j={};;){if(_=n[n.length-1],this.defaultActions[_]?k=this.defaultActions[_]:(null!==x&&"undefined"!=typeof x||(x=v()),k=a[_]&&a[_][x]),"undefined"===typeof k||!k.length||!k[0]){var A="";for(E in T=[],a[_])this.terminals_[E]&&E>f&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},d={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),22;case 1:return this.begin("type_directive"),23;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),25;case 4:return 24;case 5:case 6:case 8:case 9:break;case 7:return 19;case 10:return this.begin("title"),12;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return"value";case 17:return 21}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17],inclusive:!0}}};function h(){this.yy={}}return f.lexer=d,h.prototype=f,f.Parser=h,new h}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/pie/pieDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return c}));var r=n("./src/logger.js"),i=n("./src/mermaidAPI.js"),o=n("./src/config.js"),a={},s="",c=function(e,t,n){i.default.parseDirective(this,e,t,n)};t.default={parseDirective:c,getConfig:function(){return o.getConfig().pie},addSection:function(e,t){"undefined"===typeof a[e]&&(a[e]=t,r.logger.debug("Added new section :",e))},getSections:function(){return a},cleanupValue:function(e){return":"===e.substring(0,1)?(e=e.substring(1).trim(),Number(e.trim())):Number(e.trim())},clear:function(){a={},s=""},setTitle:function(e){s=e},getTitle:function(){return s}}},"./src/diagrams/pie/pieRenderer.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return f})),n.d(t,"draw",(function(){return h}));var r,i=n("d3"),o=n("./src/diagrams/pie/pieDb.js"),a=n("./src/diagrams/pie/parser/pie.jison"),s=n.n(a),c=n("./src/logger.js"),u=n("./src/utils.js"),l={},f=function(e){Object.keys(e).forEach((function(t){l[t]=e[t]}))},d=450,h=function(e,t){try{var n=s.a.parser;n.yy=o.default,c.logger.debug("Rendering info diagram\n"+e),n.yy.clear(),n.parse(e),c.logger.debug("Parsed info diagram");var a=document.getElementById(t);"undefined"===typeof(r=a.parentElement.offsetWidth)&&(r=1200),"undefined"!==typeof l.useWidth&&(r=l.useWidth);var f=Object(i.select)("#"+t);Object(u.configureSvgSize)(f,d,r,l.useMaxWidth),a.setAttribute("viewBox","0 0 "+r+" "+d);var h=18,p=Math.min(r,d)/2-40,g=f.append("g").attr("transform","translate("+r/2+",225)"),y=o.default.getSections(),m=0;Object.keys(y).forEach((function(e){m+=y[e]}));var b=Object(i.scaleOrdinal)().domain(y).range(i.schemeSet2),v=Object(i.pie)().value((function(e){return e.value}))(Object(i.entries)(y)),x=Object(i.arc)().innerRadius(0).outerRadius(p);g.selectAll("mySlices").data(v).enter().append("path").attr("d",x).attr("fill",(function(e){return b(e.data.key)})).attr("stroke","black").style("stroke-width","2px").style("opacity",.7),g.selectAll("mySlices").data(v).enter().append("text").text((function(e){return(e.data.value/m*100).toFixed(0)+"%"})).attr("transform",(function(e){return"translate("+x.centroid(e)+")"})).style("text-anchor","middle").attr("class","slice").style("font-size",17),g.append("text").text(n.yy.getTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var w=g.selectAll(".legend").data(b.domain()).enter().append("g").attr("class","legend").attr("transform",(function(e,t){return"translate(216,"+(22*t-22*b.domain().length/2)+")"}));w.append("rect").attr("width",h).attr("height",h).style("fill",b).style("stroke",b),w.append("text").attr("x",22).attr("y",14).text((function(e){return e}))}catch(_){c.logger.error("Error while rendering info diagram"),c.logger.error(_)}};t.default={setConf:f,draw:h}},"./src/diagrams/pie/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return".pieTitleText {\n text-anchor: middle;\n font-size: 25px;\n fill: ".concat(e.taskTextDarkColor,";\n font-family: ").concat(e.fontFamily,";\n }\n .slice {\n font-family: ").concat(e.fontFamily,";\n fill: ").concat(e.textColor,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(e.taskTextDarkColor,";\n font-family: ").concat(e.fontFamily,";\n font-size: 17px;\n }\n")}},"./src/diagrams/sequence/parser/sequenceDiagram.jison":function(e,t,n){(function(e,r){var i=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,2],n=[1,3],r=[1,5],i=[1,7],o=[2,5],a=[1,15],s=[1,17],c=[1,18],u=[1,20],l=[1,21],f=[1,22],d=[1,24],h=[1,25],p=[1,26],g=[1,27],y=[1,28],m=[1,29],b=[1,32],v=[1,33],x=[1,36],w=[1,4,5,16,21,22,23,25,27,28,29,30,31,33,35,36,37,48,56],_=[1,44],k=[4,5,16,21,22,23,25,27,28,29,30,31,33,37,48,56],O=[4,5,16,21,22,23,25,27,28,29,30,31,33,36,37,48,56],E=[4,5,16,21,22,23,25,27,28,29,30,31,33,35,37,48,56],S=[46,47,48],C=[1,4,5,7,16,21,22,23,25,27,28,29,30,31,33,35,36,37,48,56],T={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,signal:20,autonumber:21,activate:22,deactivate:23,note_statement:24,title:25,text2:26,loop:27,end:28,rect:29,opt:30,alt:31,else_sections:32,par:33,par_sections:34,and:35,else:36,note:37,placement:38,over:39,actor_pair:40,spaceList:41,",":42,left_of:43,right_of:44,signaltype:45,"+":46,"-":47,ACTOR:48,SOLID_OPEN_ARROW:49,DOTTED_OPEN_ARROW:50,SOLID_ARROW:51,DOTTED_ARROW:52,SOLID_CROSS:53,DOTTED_CROSS:54,TXT:55,open_directive:56,type_directive:57,arg_directive:58,close_directive:59,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",21:"autonumber",22:"activate",23:"deactivate",25:"title",27:"loop",28:"end",29:"rect",30:"opt",31:"alt",33:"par",35:"and",36:"else",37:"note",39:"over",42:",",43:"left_of",44:"right_of",46:"+",47:"-",48:"ACTOR",49:"SOLID_OPEN_ARROW",50:"DOTTED_OPEN_ARROW",51:"SOLID_ARROW",52:"DOTTED_ARROW",53:"SOLID_CROSS",54:"DOTTED_CROSS",55:"TXT",56:"open_directive",57:"type_directive",58:"arg_directive",59:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,2],[10,1],[10,3],[10,3],[10,2],[10,3],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[34,1],[34,4],[32,1],[32,4],[24,4],[24,4],[41,2],[41,1],[40,3],[40,1],[38,1],[38,1],[20,5],[20,5],[20,4],[17,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[26,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(e,t,n,r,i,o,a){var s=o.length-1;switch(i){case 4:return r.apply(o[s]),o[s];case 5:case 9:this.$=[];break;case 6:o[s-1].push(o[s]),this.$=o[s-1];break;case 7:case 8:case 35:this.$=o[s];break;case 12:o[s-3].description=r.parseMessage(o[s-1]),this.$=o[s-3];break;case 13:this.$=o[s-1];break;case 15:r.enableSequenceNumbers();break;case 16:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:o[s-1]};break;case 17:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:o[s-1]};break;case 19:this.$=[{type:"setTitle",text:o[s-1]}];break;case 20:o[s-1].unshift({type:"loopStart",loopText:r.parseMessage(o[s-2]),signalType:r.LINETYPE.LOOP_START}),o[s-1].push({type:"loopEnd",loopText:o[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=o[s-1];break;case 21:o[s-1].unshift({type:"rectStart",color:r.parseMessage(o[s-2]),signalType:r.LINETYPE.RECT_START}),o[s-1].push({type:"rectEnd",color:r.parseMessage(o[s-2]),signalType:r.LINETYPE.RECT_END}),this.$=o[s-1];break;case 22:o[s-1].unshift({type:"optStart",optText:r.parseMessage(o[s-2]),signalType:r.LINETYPE.OPT_START}),o[s-1].push({type:"optEnd",optText:r.parseMessage(o[s-2]),signalType:r.LINETYPE.OPT_END}),this.$=o[s-1];break;case 23:o[s-1].unshift({type:"altStart",altText:r.parseMessage(o[s-2]),signalType:r.LINETYPE.ALT_START}),o[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=o[s-1];break;case 24:o[s-1].unshift({type:"parStart",parText:r.parseMessage(o[s-2]),signalType:r.LINETYPE.PAR_START}),o[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=o[s-1];break;case 27:this.$=o[s-3].concat([{type:"and",parText:r.parseMessage(o[s-1]),signalType:r.LINETYPE.PAR_AND},o[s]]);break;case 29:this.$=o[s-3].concat([{type:"else",altText:r.parseMessage(o[s-1]),signalType:r.LINETYPE.ALT_ELSE},o[s]]);break;case 30:this.$=[o[s-1],{type:"addNote",placement:o[s-2],actor:o[s-1].actor,text:o[s]}];break;case 31:o[s-2]=[].concat(o[s-1],o[s-1]).slice(0,2),o[s-2][0]=o[s-2][0].actor,o[s-2][1]=o[s-2][1].actor,this.$=[o[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:o[s-2].slice(0,2),text:o[s]}];break;case 34:this.$=[o[s-2],o[s]];break;case 36:this.$=r.PLACEMENT.LEFTOF;break;case 37:this.$=r.PLACEMENT.RIGHTOF;break;case 38:this.$=[o[s-4],o[s-1],{type:"addMessage",from:o[s-4].actor,to:o[s-1].actor,signalType:o[s-3],msg:o[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:o[s-1]}];break;case 39:this.$=[o[s-4],o[s-1],{type:"addMessage",from:o[s-4].actor,to:o[s-1].actor,signalType:o[s-3],msg:o[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:o[s-4]}];break;case 40:this.$=[o[s-3],o[s-1],{type:"addMessage",from:o[s-3].actor,to:o[s-1].actor,signalType:o[s-2],msg:o[s]}];break;case 41:this.$={type:"addActor",actor:o[s]};break;case 42:this.$=r.LINETYPE.SOLID_OPEN;break;case 43:this.$=r.LINETYPE.DOTTED_OPEN;break;case 44:this.$=r.LINETYPE.SOLID;break;case 45:this.$=r.LINETYPE.DOTTED;break;case 46:this.$=r.LINETYPE.SOLID_CROSS;break;case 47:this.$=r.LINETYPE.DOTTED_CROSS;break;case 48:this.$=r.parseMessage(o[s].trim().substring(1));break;case 49:r.parseDirective("%%{","open_directive");break;case 50:r.parseDirective(o[s],"type_directive");break;case 51:o[s]=o[s].trim().replace(/'/g,'"'),r.parseDirective(o[s],"arg_directive");break;case 52:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:t,5:n,6:4,7:r,11:6,56:i},{1:[3]},{3:8,4:t,5:n,6:4,7:r,11:6,56:i},{3:9,4:t,5:n,6:4,7:r,11:6,56:i},{3:10,4:t,5:n,6:4,7:r,11:6,56:i},e([1,4,5,16,21,22,23,25,27,29,30,31,33,37,48,56],o,{8:11}),{12:12,57:[1,13]},{57:[2,49]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:a,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,29:p,30:g,31:y,33:m,37:b,48:v,56:i},{13:34,14:[1,35],59:x},e([14,59],[2,50]),e(w,[2,6]),{6:30,10:37,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,29:p,30:g,31:y,33:m,37:b,48:v,56:i},e(w,[2,8]),e(w,[2,9]),{17:38,48:v},{5:[1,39]},e(w,[2,15]),{17:40,48:v},{17:41,48:v},{5:[1,42]},{26:43,55:_},{19:[1,45]},{19:[1,46]},{19:[1,47]},{19:[1,48]},{19:[1,49]},e(w,[2,25]),{45:50,49:[1,51],50:[1,52],51:[1,53],52:[1,54],53:[1,55],54:[1,56]},{38:57,39:[1,58],43:[1,59],44:[1,60]},e([5,18,42,49,50,51,52,53,54,55],[2,41]),{5:[1,61]},{15:62,58:[1,63]},{5:[2,52]},e(w,[2,7]),{5:[1,65],18:[1,64]},e(w,[2,14]),{5:[1,66]},{5:[1,67]},e(w,[2,18]),{5:[1,68]},{5:[2,48]},e(k,o,{8:69}),e(k,o,{8:70}),e(k,o,{8:71}),e(O,o,{32:72,8:73}),e(E,o,{34:74,8:75}),{17:78,46:[1,76],47:[1,77],48:v},e(S,[2,42]),e(S,[2,43]),e(S,[2,44]),e(S,[2,45]),e(S,[2,46]),e(S,[2,47]),{17:79,48:v},{17:81,40:80,48:v},{48:[2,36]},{48:[2,37]},e(C,[2,10]),{13:82,59:x},{59:[2,51]},{19:[1,83]},e(w,[2,13]),e(w,[2,16]),e(w,[2,17]),e(w,[2,19]),{4:a,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,28:[1,84],29:p,30:g,31:y,33:m,37:b,48:v,56:i},{4:a,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,28:[1,85],29:p,30:g,31:y,33:m,37:b,48:v,56:i},{4:a,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,28:[1,86],29:p,30:g,31:y,33:m,37:b,48:v,56:i},{28:[1,87]},{4:a,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,28:[2,28],29:p,30:g,31:y,33:m,36:[1,88],37:b,48:v,56:i},{28:[1,89]},{4:a,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:f,24:23,25:d,27:h,28:[2,26],29:p,30:g,31:y,33:m,35:[1,90],37:b,48:v,56:i},{17:91,48:v},{17:92,48:v},{26:93,55:_},{26:94,55:_},{26:95,55:_},{42:[1,96],55:[2,35]},{5:[1,97]},{5:[1,98]},e(w,[2,20]),e(w,[2,21]),e(w,[2,22]),e(w,[2,23]),{19:[1,99]},e(w,[2,24]),{19:[1,100]},{26:101,55:_},{26:102,55:_},{5:[2,40]},{5:[2,30]},{5:[2,31]},{17:103,48:v},e(C,[2,11]),e(w,[2,12]),e(O,o,{8:73,32:104}),e(E,o,{8:75,34:105}),{5:[2,38]},{5:[2,39]},{55:[2,34]},{28:[2,29]},{28:[2,27]}],defaultActions:{7:[2,49],8:[2,1],9:[2,2],10:[2,3],36:[2,52],44:[2,48],59:[2,36],60:[2,37],63:[2,51],93:[2,40],94:[2,30],95:[2,31],101:[2,38],102:[2,39],103:[2,34],104:[2,29],105:[2,27]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],o=[],a=this.table,s="",c=0,u=0,l=0,f=2,d=1,h=o.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(e,g.yy),g.yy.lexer=p,g.yy.parser=this,"undefined"==typeof p.yylloc&&(p.yylloc={});var m=p.yylloc;o.push(m);var b=p.options&&p.options.ranges;function v(){var e;return"number"!==typeof(e=r.pop()||p.lex()||d)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"===typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,w,_,k,O,E,S,C,T,j={};;){if(_=n[n.length-1],this.defaultActions[_]?k=this.defaultActions[_]:(null!==x&&"undefined"!=typeof x||(x=v()),k=a[_]&&a[_][x]),"undefined"===typeof k||!k.length||!k[0]){var A="";for(E in T=[],a[_])this.terminals_[E]&&E>f&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},j={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),56;case 1:return this.begin("type_directive"),57;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),59;case 4:return 58;case 5:case 34:case 45:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return t.yytext=t.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 35:return t.yytext=t.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 46;case 44:return 47;case 46:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};function A(){this.yy={}}return T.lexer=j,A.prototype=T,T.Parser=A,new A}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/sequence/sequenceDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return g})),n.d(t,"addActor",(function(){return y})),n.d(t,"addMessage",(function(){return b})),n.d(t,"addSignal",(function(){return v})),n.d(t,"getMessages",(function(){return x})),n.d(t,"getActors",(function(){return w})),n.d(t,"getActor",(function(){return _})),n.d(t,"getActorKeys",(function(){return k})),n.d(t,"getTitle",(function(){return O})),n.d(t,"getTitleWrapped",(function(){return E})),n.d(t,"enableSequenceNumbers",(function(){return S})),n.d(t,"showSequenceNumbers",(function(){return C})),n.d(t,"setWrap",(function(){return T})),n.d(t,"autoWrap",(function(){return j})),n.d(t,"clear",(function(){return A})),n.d(t,"parseMessage",(function(){return M})),n.d(t,"LINETYPE",(function(){return P})),n.d(t,"ARROWTYPE",(function(){return N})),n.d(t,"PLACEMENT",(function(){return D})),n.d(t,"addNote",(function(){return R})),n.d(t,"setTitle",(function(){return I})),n.d(t,"apply",(function(){return L}));var r=n("./src/mermaidAPI.js"),i=n("./src/config.js"),o=n("./src/diagrams/common/common.js"),a=n("./src/logger.js"),s=void 0,c={},u=[],l=[],f="",d=!1,h=!1,p=!1,g=function(e,t,n){r.default.parseDirective(this,e,t,n)},y=function(e,t,n){var r=c[e];r&&t===r.name&&null==n||(null!=n&&null!=n.text||(n={text:t,wrap:null}),c[e]={name:t,description:n.text,wrap:void 0===n.wrap&&j()||!!n.wrap,prevActor:s},s&&c[s]&&(c[s].nextActor=e),s=e)},m=function(e){var t,n=0;for(t=0;t2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===P.ACTIVE_END){var i=m(e.actor);if(i<1){var o=new Error("Trying to inactivate an inactive participant ("+e.actor+")");throw o.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},o}}return u.push({from:e,to:t,message:n.text,wrap:void 0===n.wrap&&j()||!!n.wrap,type:r}),!0},x=function(){return u},w=function(){return c},_=function(e){return c[e]},k=function(){return Object.keys(c)},O=function(){return f},E=function(){return d},S=function(){h=!0},C=function(){return h},T=function(e){p=e},j=function(){return p},A=function(){c={},u=[]},M=function(e){var t=e.trim(),n={text:t.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null===t.match(/^[:]?(?:no)?wrap:/)?o.default.hasBreaks(t)||void 0:null!==t.match(/^[:]?wrap:/)||null===t.match(/^[:]?nowrap:/)&&void 0};return a.logger.debug("parseMessage:",n),n},P={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23},N={FILLED:0,OPEN:1},D={LEFTOF:0,RIGHTOF:1,OVER:2},R=function(e,t,n){var r={actor:e,placement:t,message:n.text,wrap:void 0===n.wrap&&j()||!!n.wrap},i=[].concat(e,e);l.push(r),u.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&j()||!!n.wrap,type:P.NOTE,placement:t})},I=function(e){f=e.text,d=void 0===e.wrap&&j()||!!e.wrap},L=function e(t){if(t instanceof Array)t.forEach((function(t){e(t)}));else switch(t.type){case"addActor":y(t.actor,t.actor,t.description);break;case"activeStart":case"activeEnd":v(t.actor,void 0,void 0,t.signalType);break;case"addNote":R(t.actor,t.placement,t.text);break;case"addMessage":v(t.from,t.to,t.msg,t.signalType);break;case"loopStart":v(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":v(void 0,void 0,void 0,t.signalType);break;case"rectStart":v(void 0,void 0,t.color,t.signalType);break;case"optStart":v(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":v(void 0,void 0,t.altText,t.signalType);break;case"setTitle":I(t.text);break;case"parStart":case"and":v(void 0,void 0,t.parText,t.signalType)}};t.default={addActor:y,addMessage:b,addSignal:v,autoWrap:j,setWrap:T,enableSequenceNumbers:S,showSequenceNumbers:C,getMessages:x,getActors:w,getActor:_,getActorKeys:k,getTitle:O,parseDirective:g,getConfig:function(){return i.getConfig().sequence},getTitleWrapped:E,clear:A,parseMessage:M,LINETYPE:P,ARROWTYPE:N,PLACEMENT:D,addNote:R,setTitle:I,apply:L}},"./src/diagrams/sequence/sequenceRenderer.js":function(e,t,n){"use strict";n.r(t),n.d(t,"bounds",(function(){return d})),n.d(t,"drawActors",(function(){return y})),n.d(t,"setConf",(function(){return m})),n.d(t,"draw",(function(){return w}));var r=n("d3"),i=n("./src/diagrams/sequence/svgDraw.js"),o=n("./src/logger.js"),a=n("./src/diagrams/sequence/parser/sequenceDiagram.jison"),s=n("./src/diagrams/common/common.js"),c=n("./src/diagrams/sequence/sequenceDb.js"),u=n("./src/config.js"),l=n("./src/utils.js");a.parser.yy=c.default;var f={},d={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(e){return e.height||0})))+(0===this.loops.length?0:this.loops.map((function(e){return e.height||0})).reduce((function(e,t){return e+t})))+(0===this.messages.length?0:this.messages.map((function(e){return e.height||0})).reduce((function(e,t){return e+t})))+(0===this.notes.length?0:this.notes.map((function(e){return e.height||0})).reduce((function(e,t){return e+t})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(e){this.actors.push(e)},addLoop:function(e){this.loops.push(e)},addMessage:function(e){this.messages.push(e)},addNote:function(e){this.notes.push(e)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,m(a.parser.yy.getConfig())},updateVal:function(e,t,n,r){"undefined"===typeof e[t]?e[t]=n:e[t]=r(n,e[t])},updateBounds:function(e,t,n,r){var i=this,o=0;function a(a){return function(s){o++;var c=i.sequenceItems.length-o+1;i.updateVal(s,"starty",t-c*f.boxMargin,Math.min),i.updateVal(s,"stopy",r+c*f.boxMargin,Math.max),i.updateVal(d.data,"startx",e-c*f.boxMargin,Math.min),i.updateVal(d.data,"stopx",n+c*f.boxMargin,Math.max),"activation"!==a&&(i.updateVal(s,"startx",e-c*f.boxMargin,Math.min),i.updateVal(s,"stopx",n+c*f.boxMargin,Math.max),i.updateVal(d.data,"starty",t-c*f.boxMargin,Math.min),i.updateVal(d.data,"stopy",r+c*f.boxMargin,Math.max))}}this.sequenceItems.forEach(a()),this.activations.forEach(a("activation"))},insert:function(e,t,n,r){var i=Math.min(e,n),o=Math.max(e,n),a=Math.min(t,r),s=Math.max(t,r);this.updateVal(d.data,"startx",i,Math.min),this.updateVal(d.data,"starty",a,Math.min),this.updateVal(d.data,"stopx",o,Math.max),this.updateVal(d.data,"stopy",s,Math.max),this.updateBounds(i,a,o,s)},newActivation:function(e,t,n){var r=n[e.from.actor],o=b(e.from.actor).length||0,a=r.x+r.width/2+(o-1)*f.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+f.activationWidth,stopy:void 0,actor:e.from.actor,anchored:i.default.anchorElement(t)})},endActivation:function(e){var t=this.activations.map((function(e){return e.actor})).lastIndexOf(e.from.actor);return this.activations.splice(t,1)[0]},createLoop:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},t=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:e.message,wrap:e.wrap,width:e.width,height:0,fill:t}},newLoop:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},t=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(e,t))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(e){var t=this.sequenceItems.pop();t.sections=t.sections||[],t.sectionTitles=t.sectionTitles||[],t.sections.push({y:d.getVerticalPos(),height:0}),t.sectionTitles.push(e),this.sequenceItems.push(t)},bumpVerticalPos:function(e){this.verticalPos=this.verticalPos+e,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},h=function(e){return{fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight}},p=function(e){return{fontFamily:e.noteFontFamily,fontSize:e.noteFontSize,fontWeight:e.noteFontWeight}},g=function(e){return{fontFamily:e.actorFontFamily,fontSize:e.actorFontSize,fontWeight:e.actorFontWeight}},y=function(e,t,n,r){for(var o=0,a=0,s=0;st&&(r.starty=t-6,t+=12),i.default.drawActivation(n,r,t,f,b(e.from.actor).length),d.insert(r.startx,t-10,r.stopx,t)}(e,d.getVerticalPos());break;case a.parser.yy.LINETYPE.LOOP_START:x(E,e,f.boxMargin,f.boxMargin+f.boxTextMargin,(function(e){return d.newLoop(e)}));break;case a.parser.yy.LINETYPE.LOOP_END:t=d.endLoop(),i.default.drawLoop(n,t,"loop",f),d.bumpVerticalPos(t.stopy-d.getVerticalPos()),d.models.addLoop(t);break;case a.parser.yy.LINETYPE.RECT_START:x(E,e,f.boxMargin,f.boxMargin,(function(e){return d.newLoop(void 0,e.message)}));break;case a.parser.yy.LINETYPE.RECT_END:t=d.endLoop(),i.default.drawBackgroundRect(n,t),d.models.addLoop(t),d.bumpVerticalPos(t.stopy-d.getVerticalPos());break;case a.parser.yy.LINETYPE.OPT_START:x(E,e,f.boxMargin,f.boxMargin+f.boxTextMargin,(function(e){return d.newLoop(e)}));break;case a.parser.yy.LINETYPE.OPT_END:t=d.endLoop(),i.default.drawLoop(n,t,"opt",f),d.bumpVerticalPos(t.stopy-d.getVerticalPos()),d.models.addLoop(t);break;case a.parser.yy.LINETYPE.ALT_START:x(E,e,f.boxMargin,f.boxMargin+f.boxTextMargin,(function(e){return d.newLoop(e)}));break;case a.parser.yy.LINETYPE.ALT_ELSE:x(E,e,f.boxMargin+f.boxTextMargin,f.boxMargin,(function(e){return d.addSectionToLoop(e)}));break;case a.parser.yy.LINETYPE.ALT_END:t=d.endLoop(),i.default.drawLoop(n,t,"alt",f),d.bumpVerticalPos(t.stopy-d.getVerticalPos()),d.models.addLoop(t);break;case a.parser.yy.LINETYPE.PAR_START:x(E,e,f.boxMargin,f.boxMargin+f.boxTextMargin,(function(e){return d.newLoop(e)}));break;case a.parser.yy.LINETYPE.PAR_AND:x(E,e,f.boxMargin+f.boxTextMargin,f.boxMargin,(function(e){return d.addSectionToLoop(e)}));break;case a.parser.yy.LINETYPE.PAR_END:t=d.endLoop(),i.default.drawLoop(n,t,"par",f),d.bumpVerticalPos(t.stopy-d.getVerticalPos()),d.models.addLoop(t);break;default:try{(u=e.msgModel).starty=d.getVerticalPos(),u.sequenceIndex=S,function(e,t){d.bumpVerticalPos(10);var n=t.startx,r=t.stopx,o=t.starty,u=t.message,p=t.type,g=t.sequenceIndex,y=t.wrap,m=s.default.splitBreaks(u).length,b=l.default.calculateTextDimensions(u,h(f)),v=b.height/m;t.height+=v,d.bumpVerticalPos(v);var x=i.default.getTextObj();x.x=n,x.y=o+10,x.width=r-n,x.class="messageText",x.dy="1em",x.text=u,x.fontFamily=f.messageFontFamily,x.fontSize=f.messageFontSize,x.fontWeight=f.messageFontWeight,x.anchor=f.messageAlign,x.valign=f.messageAlign,x.textMargin=f.wrapPadding,x.tspan=!1,x.wrap=y,Object(i.drawText)(e,x);var w,_,k=b.height-10,O=b.width;if(n===r){_=d.getVerticalPos()+k,f.rightAngles?w=e.append("path").attr("d","M ".concat(n,",").concat(_," H ").concat(n+Math.max(f.width/2,O/2)," V ").concat(_+25," H ").concat(n)):(k+=f.boxMargin,_=d.getVerticalPos()+k,w=e.append("path").attr("d","M "+n+","+_+" C "+(n+60)+","+(_-10)+" "+(n+60)+","+(_+30)+" "+n+","+(_+20))),k+=30;var E=Math.max(O/2,f.width/2);d.insert(n-E,d.getVerticalPos()-10+k,r+E,d.getVerticalPos()+30+k)}else k+=f.boxMargin,_=d.getVerticalPos()+k,(w=e.append("line")).attr("x1",n),w.attr("y1",_),w.attr("x2",r),w.attr("y2",_),d.insert(n,_-10,r,_);p===a.parser.yy.LINETYPE.DOTTED||p===a.parser.yy.LINETYPE.DOTTED_CROSS||p===a.parser.yy.LINETYPE.DOTTED_OPEN?(w.style("stroke-dasharray","3, 3"),w.attr("class","messageLine1")):w.attr("class","messageLine0");var S="";f.arrowMarkerAbsolute&&(S=(S=(S=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),w.attr("stroke-width",2),w.attr("stroke","none"),w.style("fill","none"),p!==a.parser.yy.LINETYPE.SOLID&&p!==a.parser.yy.LINETYPE.DOTTED||w.attr("marker-end","url("+S+"#arrowhead)"),p!==a.parser.yy.LINETYPE.SOLID_CROSS&&p!==a.parser.yy.LINETYPE.DOTTED_CROSS||w.attr("marker-end","url("+S+"#crosshead)"),(c.default.showSequenceNumbers()||f.showSequenceNumbers)&&(w.attr("marker-start","url("+S+"#sequencenumber)"),e.append("text").attr("x",n).attr("y",_+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(g)),d.bumpVerticalPos(k),t.height+=k,t.stopy=t.starty+t.height,d.insert(t.fromBounds,t.starty,t.toBounds,t.stopy)}(n,u),d.models.addMessage(u)}catch(g){o.logger.error("error while drawing message",g)}}[a.parser.yy.LINETYPE.SOLID_OPEN,a.parser.yy.LINETYPE.DOTTED_OPEN,a.parser.yy.LINETYPE.SOLID,a.parser.yy.LINETYPE.DOTTED,a.parser.yy.LINETYPE.SOLID_CROSS,a.parser.yy.LINETYPE.DOTTED_CROSS].includes(e.type)&&S++})),f.mirrorActors&&(d.bumpVerticalPos(2*f.boxMargin),y(n,p,g,d.getVerticalPos()));var C=d.getBounds().bounds;o.logger.debug("For line height fix Querying: #"+t+" .actor-line"),Object(r.selectAll)("#"+t+" .actor-line").attr("y2",C.stopy);var T=C.stopy-C.starty+2*f.diagramMarginY;f.mirrorActors&&(T=T-f.boxMargin+f.bottomMarginAdj);var j=C.stopx-C.startx+2*f.diagramMarginX;v&&n.append("text").text(v).attr("x",(C.stopx-C.startx)/2-2*f.diagramMarginX).attr("y",-25),Object(l.configureSvgSize)(n,T,j,f.useMaxWidth);var A=v?40:0;n.attr("viewBox",C.startx-f.diagramMarginX+" -"+(f.diagramMarginY+A)+" "+j+" "+(T+A)),o.logger.debug("models:",d.models)},_=function(e,t){var n={};return t.forEach((function(t){if(e[t.to]&&e[t.from]){var r=e[t.to];if(t.placement===a.parser.yy.PLACEMENT.LEFTOF&&!r.prevActor)return;if(t.placement===a.parser.yy.PLACEMENT.RIGHTOF&&!r.nextActor)return;var i=void 0!==t.placement,o=!i,s=i?p(f):h(f),c=t.wrap?l.default.wrapLabel(t.message,f.width-2*f.wrapPadding,s):t.message,u=l.default.calculateTextDimensions(c,s).width+2*f.wrapPadding;o&&t.from===r.nextActor?n[t.to]=Math.max(n[t.to]||0,u):o&&t.from===r.prevActor?n[t.from]=Math.max(n[t.from]||0,u):o&&t.from===t.to?(n[t.from]=Math.max(n[t.from]||0,u/2),n[t.to]=Math.max(n[t.to]||0,u/2)):t.placement===a.parser.yy.PLACEMENT.RIGHTOF?n[t.from]=Math.max(n[t.from]||0,u):t.placement===a.parser.yy.PLACEMENT.LEFTOF?n[r.prevActor]=Math.max(n[r.prevActor]||0,u):t.placement===a.parser.yy.PLACEMENT.OVER&&(r.prevActor&&(n[r.prevActor]=Math.max(n[r.prevActor]||0,u/2)),r.nextActor&&(n[t.from]=Math.max(n[t.from]||0,u/2)))}})),o.logger.debug("maxMessageWidthPerActor:",n),n},k=function(e,t){var n=0;for(var r in Object.keys(e).forEach((function(t){var r=e[t];r.wrap&&(r.description=l.default.wrapLabel(r.description,f.width-2*f.wrapPadding,g(f)));var i=l.default.calculateTextDimensions(r.description,g(f));r.width=r.wrap?f.width:Math.max(f.width,i.width+2*f.wrapPadding),r.height=r.wrap?Math.max(i.height,f.height):f.height,n=Math.max(n,r.height)})),t){var i=e[r];if(i){var o=e[i.nextActor];if(o){var a=t[r]+f.actorMargin-i.width/2-o.width/2;i.margin=Math.max(a,f.actorMargin)}}}return Math.max(n,f.height)},O=function(e,t){var n,r,i,s={},c=[];return e.forEach((function(e){switch(e.id=l.default.random({length:10}),e.type){case a.parser.yy.LINETYPE.LOOP_START:case a.parser.yy.LINETYPE.ALT_START:case a.parser.yy.LINETYPE.OPT_START:case a.parser.yy.LINETYPE.PAR_START:c.push({id:e.id,msg:e.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case a.parser.yy.LINETYPE.ALT_ELSE:case a.parser.yy.LINETYPE.PAR_AND:e.message&&(n=c.pop(),s[n.id]=n,s[e.id]=n,c.push(n));break;case a.parser.yy.LINETYPE.LOOP_END:case a.parser.yy.LINETYPE.ALT_END:case a.parser.yy.LINETYPE.OPT_END:case a.parser.yy.LINETYPE.PAR_END:n=c.pop(),s[n.id]=n;break;case a.parser.yy.LINETYPE.ACTIVE_START:var u=t[e.from?e.from.actor:e.to.actor],g=b(e.from?e.from.actor:e.to.actor).length,y=u.x+u.width/2+(g-1)*f.activationWidth/2,m={startx:y,stopx:y+f.activationWidth,actor:e.from.actor,enabled:!0};d.activations.push(m);break;case a.parser.yy.LINETYPE.ACTIVE_END:var x=d.activations.map((function(e){return e.actor})).lastIndexOf(e.from.actor);delete d.activations.splice(x,1)[0]}void 0!==e.placement?(r=function(e,t){var n=t[e.from].x,r=t[e.to].x,i=e.wrap&&e.message,s=l.default.calculateTextDimensions(i?l.default.wrapLabel(e.message,f.width,p(f)):e.message,p(f)),c={width:i?f.width:Math.max(f.width,s.width+2*f.noteMargin),height:0,startx:t[e.from].x,stopx:0,starty:0,stopy:0,message:e.message};return e.placement===a.parser.yy.PLACEMENT.RIGHTOF?(c.width=i?Math.max(f.width,s.width):Math.max(t[e.from].width/2+t[e.to].width/2,s.width+2*f.noteMargin),c.startx=n+(t[e.from].width+f.actorMargin)/2):e.placement===a.parser.yy.PLACEMENT.LEFTOF?(c.width=i?Math.max(f.width,s.width+2*f.noteMargin):Math.max(t[e.from].width/2+t[e.to].width/2,s.width+2*f.noteMargin),c.startx=n-c.width+(t[e.from].width-f.actorMargin)/2):e.to===e.from?(s=l.default.calculateTextDimensions(i?l.default.wrapLabel(e.message,Math.max(f.width,t[e.from].width),p(f)):e.message,p(f)),c.width=i?Math.max(f.width,t[e.from].width):Math.max(t[e.from].width,f.width,s.width+2*f.noteMargin),c.startx=n+(t[e.from].width-c.width)/2):(c.width=Math.abs(n+t[e.from].width/2-(r+t[e.to].width/2))+f.actorMargin,c.startx=n0&&c.forEach((function(r){if(n=r,i.startx===i.stopx){var o=t[e.from],a=t[e.to];n.from=Math.min(o.x-i.width/2,o.x-o.width/2,n.from),n.to=Math.max(a.x+i.width/2,a.x+o.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-f.labelBoxWidth}else n.from=Math.min(i.startx,n.from),n.to=Math.max(i.stopx,n.to),n.width=Math.max(n.width,i.width)-f.labelBoxWidth})))})),d.activations=[],o.logger.debug("Loop type widths:",s),s};t.default={bounds:d,drawActors:y,setConf:m,draw:w}},"./src/diagrams/sequence/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return".actor {\n stroke: ".concat(e.actorBorder,";\n fill: ").concat(e.actorBkg,";\n }\n\n text.actor > tspan {\n fill: ").concat(e.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(e.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(e.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(e.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(e.signalColor,";\n stroke: ").concat(e.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(e.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(e.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(e.signalColor,";\n stroke: ").concat(e.signalColor,";\n }\n\n .messageText {\n fill: ").concat(e.signalTextColor,";\n stroke: ").concat(e.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(e.labelBoxBorderColor,";\n fill: ").concat(e.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(e.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(e.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(e.labelBoxBorderColor,";\n fill: ").concat(e.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(e.noteBorderColor,";\n fill: ").concat(e.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(e.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(e.activationBkgColor,";\n stroke: ").concat(e.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(e.activationBkgColor,";\n stroke: ").concat(e.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(e.activationBkgColor,";\n stroke: ").concat(e.activationBorderColor,";\n }\n")}},"./src/diagrams/sequence/svgDraw.js":function(e,t,n){"use strict";n.r(t),n.d(t,"drawRect",(function(){return i})),n.d(t,"drawText",(function(){return o})),n.d(t,"drawLabel",(function(){return a})),n.d(t,"drawActor",(function(){return c})),n.d(t,"anchorElement",(function(){return u})),n.d(t,"drawActivation",(function(){return l})),n.d(t,"drawLoop",(function(){return f})),n.d(t,"drawBackgroundRect",(function(){return d})),n.d(t,"insertArrowHead",(function(){return h})),n.d(t,"insertSequenceNumber",(function(){return p})),n.d(t,"insertArrowCrossHead",(function(){return g})),n.d(t,"getTextObj",(function(){return y})),n.d(t,"getNoteRect",(function(){return m}));var r=n("./src/diagrams/common/common.js"),i=function(e,t){var n=e.append("rect");return n.attr("x",t.x),n.attr("y",t.y),n.attr("fill",t.fill),n.attr("stroke",t.stroke),n.attr("width",t.width),n.attr("height",t.height),n.attr("rx",t.rx),n.attr("ry",t.ry),"undefined"!==typeof t.class&&n.attr("class",t.class),n},o=function(e,t){var n=0,i=0,o=t.wrap?t.text.split(r.default.lineBreakRegex):[t.text.replace(r.default.lineBreakRegex," ")],a=[],s=0,c=function(){return t.y};if("undefined"!==typeof t.valign&&"undefined"!==typeof t.textMargin&&t.textMargin>0)switch(t.valign){case"top":case"start":c=function(){return Math.round(t.y+t.textMargin)};break;case"middle":case"center":c=function(){return Math.round(t.y+(n+i+t.textMargin)/2)};break;case"bottom":case"end":c=function(){return Math.round(t.y+(n+i+2*t.textMargin)-t.textMargin)}}if("undefined"!==typeof t.anchor&&"undefined"!==typeof t.textMargin&&"undefined"!==typeof t.width)switch(t.anchor){case"left":case"start":t.x=Math.round(t.x+t.textMargin),t.anchor="start",t.dominantBaseline="text-after-edge",t.alignmentBaseline="middle";break;case"middle":case"center":t.x=Math.round(t.x+t.width/2),t.anchor="middle",t.dominantBaseline="middle",t.alignmentBaseline="middle";break;case"right":case"end":t.x=Math.round(t.x+t.width-t.textMargin),t.anchor="end",t.dominantBaseline="text-before-edge",t.alignmentBaseline="middle"}for(var u=0;u0&&(i+=(f._groups||f)[0][0].getBBox().height,n=i),a.push(f)}return a},a=function(e,t){var n,r,i,a,s,c=e.append("polygon");return c.attr("points",(n=t.x,r=t.y,i=t.width,a=t.height,n+","+r+" "+(n+i)+","+r+" "+(n+i)+","+(r+a-(s=7))+" "+(n+i-1.2*s)+","+(r+a)+" "+n+","+(r+a))),c.attr("class","labelBox"),t.y=t.y+t.height/2,o(e,t),c},s=-1,c=function(e,t,n){var r=t.x+t.width/2,o=e.append("g");0===t.y&&(s++,o.append("line").attr("id","actor"+s).attr("x1",r).attr("y1",5).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var a=m();a.x=t.x,a.y=t.y,a.fill="#eaeaea",a.width=t.width,a.height=t.height,a.class="actor",a.rx=3,a.ry=3,i(o,a),b(n)(t.description,o,a.x,a.y,a.width,a.height,{class:"actor"},n)},u=function(e){return e.append("g")},l=function(e,t,n,r,o){var a=m(),s=t.anchored;a.x=t.startx,a.y=t.starty,a.class="activation"+o%3,a.width=t.stopx-t.startx,a.height=n-t.starty,i(s,a)},f=function(e,t,n,r){var i=r.boxMargin,s=r.boxTextMargin,c=r.labelBoxHeight,u=r.labelBoxWidth,l=r.messageFontFamily,f=r.messageFontSize,d=r.messageFontWeight,h=e.append("g"),p=function(e,t,n,r){return h.append("line").attr("x1",e).attr("y1",t).attr("x2",n).attr("y2",r).attr("class","loopLine")};p(t.startx,t.starty,t.stopx,t.starty),p(t.stopx,t.starty,t.stopx,t.stopy),p(t.startx,t.stopy,t.stopx,t.stopy),p(t.startx,t.starty,t.startx,t.stopy),"undefined"!==typeof t.sections&&t.sections.forEach((function(e){p(t.startx,e.y,t.stopx,e.y).style("stroke-dasharray","3, 3")}));var g=y();g.text=n,g.x=t.startx,g.y=t.starty,g.fontFamily=l,g.fontSize=f,g.fontWeight=d,g.anchor="middle",g.valign="middle",g.tspan=!1,g.width=u||50,g.height=c||20,g.textMargin=s,g.class="labelText",a(h,g),(g=y()).text=t.title,g.x=t.startx+u/2+(t.stopx-t.startx)/2,g.y=t.starty+i+s,g.anchor="middle",g.valign="middle",g.textMargin=s,g.class="loopText",g.fontFamily=l,g.fontSize=f,g.fontWeight=d,g.wrap=!0;var m=o(h,g);return"undefined"!==typeof t.sectionTitles&&t.sectionTitles.forEach((function(e,n){if(e.message){g.text=e.message,g.x=t.startx+(t.stopx-t.startx)/2,g.y=t.sections[n].y+i+s,g.class="loopText",g.anchor="middle",g.valign="middle",g.tspan=!1,g.fontFamily=l,g.fontSize=f,g.fontWeight=d,g.wrap=t.wrap,m=o(h,g);var r=Math.round(m.map((function(e){return(e._groups||e)[0][0].getBBox().height})).reduce((function(e,t){return e+t})));t.sections[n].height+=r-(i+s)}})),t.height=Math.round(t.stopy-t.starty),h},d=function(e,t){i(e,{x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,class:"rect"}).lower()},h=function(e){e.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},p=function(e){e.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},g=function(e){var t=e.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);t.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),t.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},y=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},m=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},b=function(){function e(e,t,n,r,o,a,s){i(t.append("text").attr("x",n+o/2).attr("y",r+a/2+5).style("text-anchor","middle").text(e),s)}function t(e,t,n,o,a,s,c,u){for(var l=u.actorFontSize,f=u.actorFontFamily,d=u.actorFontWeight,h=e.split(r.default.lineBreakRegex),p=0;pf&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},O={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:case 8:case 9:case 10:case 11:case 29:case 35:break;case 6:console.log("Crap after close");break;case 7:case 49:return 5;case 12:return this.pushState("SCALE"),15;case 13:return 16;case 14:case 23:case 26:this.popState();break;case 15:this.pushState("STATE");break;case 16:case 18:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),23;case 17:case 19:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),24;case 20:this.begin("STATE_STRING");break;case 21:return this.popState(),this.pushState("STATE_ID"),"AS";case 22:case 37:return this.popState(),"ID";case 24:return"STATE_DESCR";case 25:return 17;case 27:return this.popState(),this.pushState("struct"),18;case 28:return this.popState(),19;case 30:return this.begin("NOTE"),26;case 31:return this.popState(),this.pushState("NOTE_ID"),37;case 32:return this.popState(),this.pushState("NOTE_ID"),38;case 33:this.popState(),this.pushState("FLOATING_NOTE");break;case 34:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 36:return"NOTE_TEXT";case 38:return this.popState(),this.pushState("NOTE_TEXT"),22;case 39:return this.popState(),t.yytext=t.yytext.substr(2).trim(),28;case 40:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),28;case 41:case 42:return 7;case 43:return 14;case 44:return 36;case 45:return 22;case 46:return t.yytext=t.yytext.trim(),12;case 47:return 13;case 48:return 25;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:\s*[^:;]+end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},close_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[3,4,9,10],inclusive:!1},type_directive:{rules:[2,3,9,10],inclusive:!1},open_directive:{rules:[1,9,10],inclusive:!1},struct:{rules:[9,10,15,28,29,30,44,45,46,47,48],inclusive:!1},FLOATING_NOTE_ID:{rules:[37],inclusive:!1},FLOATING_NOTE:{rules:[34,35,36],inclusive:!1},NOTE_TEXT:{rules:[39,40],inclusive:!1},NOTE_ID:{rules:[38],inclusive:!1},NOTE:{rules:[31,32,33],inclusive:!1},SCALE:{rules:[13,14],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[22],inclusive:!1},STATE_STRING:{rules:[23,24],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,16,17,18,19,20,21,25,26,27],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,10,11,12,15,27,30,41,42,43,44,45,46,47,49,50],inclusive:!0}}};function E(){this.yy={}}return k.lexer=O,E.prototype=k,k.Parser=E,new E}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/state/shapes.js":function(e,t,n){"use strict";n.r(t),n.d(t,"drawStartState",(function(){return l})),n.d(t,"drawDivider",(function(){return f})),n.d(t,"drawSimpleState",(function(){return d})),n.d(t,"drawDescrState",(function(){return h})),n.d(t,"addTitleAndBox",(function(){return p})),n.d(t,"drawText",(function(){return g})),n.d(t,"drawNote",(function(){return y})),n.d(t,"drawState",(function(){return m})),n.d(t,"drawEdge",(function(){return v}));var r=n("d3"),i=n("./src/diagrams/state/id-cache.js"),o=n("./src/diagrams/state/stateDb.js"),a=n("./src/utils.js"),s=n("./src/diagrams/common/common.js"),c=n("./src/config.js"),u=n("./src/logger.js"),l=function(e){return e.append("circle").attr("class","start-state").attr("r",Object(c.getConfig)().state.sizeUnit).attr("cx",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit).attr("cy",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit)},f=function(e){return e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",Object(c.getConfig)().state.textHeight).attr("class","divider").attr("x2",2*Object(c.getConfig)().state.textHeight).attr("y1",0).attr("y2",0)},d=function(e,t){var n=e.append("text").attr("x",2*Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.textHeight+2*Object(c.getConfig)().state.padding).attr("font-size",Object(c.getConfig)().state.fontSize).attr("class","state-title").text(t.id),r=n.node().getBBox();return e.insert("rect",":first-child").attr("x",Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.padding).attr("width",r.width+2*Object(c.getConfig)().state.padding).attr("height",r.height+2*Object(c.getConfig)().state.padding).attr("rx",Object(c.getConfig)().state.radius),n},h=function(e,t){var n=e.append("text").attr("x",2*Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.textHeight+1.3*Object(c.getConfig)().state.padding).attr("font-size",Object(c.getConfig)().state.fontSize).attr("class","state-title").text(t.descriptions[0]).node().getBBox(),r=n.height,i=e.append("text").attr("x",Object(c.getConfig)().state.padding).attr("y",r+.4*Object(c.getConfig)().state.padding+Object(c.getConfig)().state.dividerMargin+Object(c.getConfig)().state.textHeight).attr("class","state-description"),o=!0,a=!0;t.descriptions.forEach((function(e){o||(function(e,t,n){var r=e.append("tspan").attr("x",2*Object(c.getConfig)().state.padding).text(t);n||r.attr("dy",Object(c.getConfig)().state.textHeight)}(i,e,a),a=!1),o=!1}));var s=e.append("line").attr("x1",Object(c.getConfig)().state.padding).attr("y1",Object(c.getConfig)().state.padding+r+Object(c.getConfig)().state.dividerMargin/2).attr("y2",Object(c.getConfig)().state.padding+r+Object(c.getConfig)().state.dividerMargin/2).attr("class","descr-divider"),u=i.node().getBBox(),l=Math.max(u.width,n.width);return s.attr("x2",l+3*Object(c.getConfig)().state.padding),e.insert("rect",":first-child").attr("x",Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.padding).attr("width",l+2*Object(c.getConfig)().state.padding).attr("height",u.height+r+2*Object(c.getConfig)().state.padding).attr("rx",Object(c.getConfig)().state.radius),e},p=function(e,t,n){var r,i=Object(c.getConfig)().state.padding,o=2*Object(c.getConfig)().state.padding,a=e.node().getBBox(),s=a.width,u=a.x,l=e.append("text").attr("x",0).attr("y",Object(c.getConfig)().state.titleShift).attr("font-size",Object(c.getConfig)().state.fontSize).attr("class","state-title").text(t.id),f=l.node().getBBox().width+o,d=Math.max(f,s);d===s&&(d+=o);var h=e.node().getBBox();t.doc,r=u-i,f>s&&(r=(s-d)/2+i),Math.abs(u-h.x)s&&(r=u-(f-s)/2);var p=1-Object(c.getConfig)().state.textHeight;return e.insert("rect",":first-child").attr("x",r).attr("y",p).attr("class",n?"alt-composit":"composit").attr("width",d).attr("height",h.height+Object(c.getConfig)().state.textHeight+Object(c.getConfig)().state.titleShift+1).attr("rx","0"),l.attr("x",r+i),f<=s&&l.attr("x",u+(d-o)/2-f/2+i),e.insert("rect",":first-child").attr("x",r).attr("y",Object(c.getConfig)().state.titleShift-Object(c.getConfig)().state.textHeight-Object(c.getConfig)().state.padding).attr("width",d).attr("height",3*Object(c.getConfig)().state.textHeight).attr("rx",Object(c.getConfig)().state.radius),e.insert("rect",":first-child").attr("x",r).attr("y",Object(c.getConfig)().state.titleShift-Object(c.getConfig)().state.textHeight-Object(c.getConfig)().state.padding).attr("width",d).attr("height",h.height+3+2*Object(c.getConfig)().state.textHeight).attr("rx",Object(c.getConfig)().state.radius),e},g=function(e,t){var n=t.text.replace(s.default.lineBreakRegex," "),r=e.append("text");r.attr("x",t.x),r.attr("y",t.y),r.style("text-anchor",t.anchor),r.attr("fill",t.fill),"undefined"!==typeof t.class&&r.attr("class",t.class);var i=r.append("tspan");return i.attr("x",t.x+2*t.textMargin),i.attr("fill",t.fill),i.text(n),r},y=function(e,t){t.attr("class","state-note");var n=t.append("rect").attr("x",0).attr("y",Object(c.getConfig)().state.padding),r=function(e,t,n,r){var i=0,o=r.append("text");o.style("text-anchor","start"),o.attr("class","noteText");var a=e.replace(/\r\n/g,"
"),u=(a=a.replace(/\n/g,"
")).split(s.default.lineBreakRegex),l=1.25*Object(c.getConfig)().state.noteMargin,f=!0,d=!1,h=void 0;try{for(var p,g=u[Symbol.iterator]();!(f=(p=g.next()).done);f=!0){var y=p.value.trim();if(y.length>0){var m=o.append("tspan");m.text(y),0===l&&(l+=m.node().getBBox().height),i+=l,m.attr("x",t+Object(c.getConfig)().state.noteMargin),m.attr("y",n+i+1.25*Object(c.getConfig)().state.noteMargin)}}}catch(b){d=!0,h=b}finally{try{f||null==g.return||g.return()}finally{if(d)throw h}}return{textWidth:o.node().getBBox().width,textHeight:i}}(e,0,0,t.append("g")),i=r.textWidth,o=r.textHeight;return n.attr("height",o+2*Object(c.getConfig)().state.noteMargin),n.attr("width",i+2*Object(c.getConfig)().state.noteMargin),n},m=function(e,t){var n=t.id,r={id:n,label:t.id,width:0,height:0},o=e.append("g").attr("id",n).attr("class","stateGroup");"start"===t.type&&l(o),"end"===t.type&&function(e){e.append("circle").attr("class","end-state-outer").attr("r",Object(c.getConfig)().state.sizeUnit+Object(c.getConfig)().state.miniPadding).attr("cx",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+Object(c.getConfig)().state.miniPadding).attr("cy",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+Object(c.getConfig)().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",Object(c.getConfig)().state.sizeUnit).attr("cx",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+2).attr("cy",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+2)}(o),"fork"!==t.type&&"join"!==t.type||function(e,t){var n=Object(c.getConfig)().state.forkWidth,r=Object(c.getConfig)().state.forkHeight;if(t.parentId){var i=n;n=r,r=i}e.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.padding)}(o,t),"note"===t.type&&y(t.note.text,o),"divider"===t.type&&f(o),"default"===t.type&&0===t.descriptions.length&&d(o,t),"default"===t.type&&t.descriptions.length>0&&h(o,t);var a=o.node().getBBox();return r.width=a.width+2*Object(c.getConfig)().state.padding,r.height=a.height+2*Object(c.getConfig)().state.padding,i.default.set(n,r),r},b=0,v=function(e,t,n){t.points=t.points.filter((function(e){return!Number.isNaN(e.y)}));var i=t.points,l=Object(r.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(r.curveBasis),f=e.append("path").attr("d",l(i)).attr("id","edge"+b).attr("class","transition"),d="";if(Object(c.getConfig)().state.arrowMarkerAbsolute&&(d=(d=(d=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("marker-end","url("+d+"#"+function(e){switch(e){case o.default.relationType.AGGREGATION:return"aggregation";case o.default.relationType.EXTENSION:return"extension";case o.default.relationType.COMPOSITION:return"composition";case o.default.relationType.DEPENDENCY:return"dependency"}}(o.default.relationType.DEPENDENCY)+"End)"),"undefined"!==typeof n.title){for(var h=e.append("g").attr("class","stateLabel"),p=a.default.calcLabelPosition(t.points),g=p.x,y=p.y,m=s.default.getRows(n.title),v=0,x=[],w=0,_=0,k=0;k<=m.length;k++){var O=h.append("text").attr("text-anchor","middle").text(m[k]).attr("x",g).attr("y",y+v),E=O.node().getBBox();if(w=Math.max(w,E.width),_=Math.min(_,E.x),u.logger.info(E.x,g,y+v),0===v){var S=O.node().getBBox();v=S.height,u.logger.info("Title height",v,y)}x.push(O)}var C=v*m.length;if(m.length>1){var T=(m.length-1)*v*.5;x.forEach((function(e,t){return e.attr("y",y+t*v-T)})),C=v*m.length}var j=h.node().getBBox();h.insert("rect",":first-child").attr("class","box").attr("x",g-w/2-Object(c.getConfig)().state.padding/2).attr("y",y-C/2-Object(c.getConfig)().state.padding/2-3.5).attr("width",w+Object(c.getConfig)().state.padding).attr("height",C+Object(c.getConfig)().state.padding),u.logger.info(j)}b++}},"./src/diagrams/state/stateDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return l})),n.d(t,"addState",(function(){return g})),n.d(t,"clear",(function(){return y})),n.d(t,"getState",(function(){return m})),n.d(t,"getStates",(function(){return b})),n.d(t,"logDocuments",(function(){return v})),n.d(t,"getRelations",(function(){return x})),n.d(t,"addRelation",(function(){return w})),n.d(t,"cleanupLabel",(function(){return k})),n.d(t,"lineType",(function(){return O})),n.d(t,"relationType",(function(){return C}));var r=n("./src/logger.js"),i=n("./src/utils.js"),o=n("./src/mermaidAPI.js"),a=n("./src/config.js");function s(e){return s="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}var c=function(e){return JSON.parse(JSON.stringify(e))},u=[],l=function(e,t,n){o.default.parseDirective(this,e,t,n)},f=function e(t,n,r){if("relation"===n.stmt)e(t,n.state1,!0),e(t,n.state2,!1);else if("state"===n.stmt&&"[*]"===n.id&&(n.id=r?t.id+"_start":t.id+"_end",n.start=r),n.doc){var o=[],a=0,s=[];for(a=0;a0&&s.length>0){var l={stmt:"state",id:Object(i.generateId)(),type:"divider",doc:c(s)};o.push(c(l)),n.doc=o}n.doc.forEach((function(t){return e(n,t,!0)}))}},d={root:{relations:[],states:{},documents:{}}},h=d.root,p=0,g=function(e,t,n,i,o){"undefined"===typeof h.states[e]?h.states[e]={id:e,descriptions:[],type:t,doc:n,note:o}:(h.states[e].doc||(h.states[e].doc=n),h.states[e].type||(h.states[e].type=t)),i&&(r.logger.info("Adding state ",e,i),"string"===typeof i&&_(e,i.trim()),"object"===s(i)&&i.forEach((function(t){return _(e,t.trim())}))),o&&(h.states[e].note=o)},y=function(){h=(d={root:{relations:[],states:{},documents:{}}}).root,h=d.root,p=0,S=[]},m=function(e){return h.states[e]},b=function(){return h.states},v=function(){r.logger.info("Documents = ",d)},x=function(){return h.relations},w=function(e,t,n){var r=e,i=t,o="default",a="default";"[*]"===e&&(r="start"+ ++p,o="start"),"[*]"===t&&(i="end"+p,a="end"),g(r,o),g(i,a),h.relations.push({id1:r,id2:i,title:n})},_=function(e,t){var n=h.states[e],r=t;":"===r[0]&&(r=r.substr(1).trim()),n.descriptions.push(r)},k=function(e){return":"===e.substring(0,1)?e.substr(2).trim():e.trim()},O={LINE:0,DOTTED_LINE:1},E=0,S=[],C={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};t.default={parseDirective:l,getConfig:function(){return a.getConfig().state},addState:g,clear:y,getState:m,getStates:b,getRelations:x,getClasses:function(){return S},getDirection:function(){return"TB"},addRelation:w,getDividerId:function(){return"divider-id-"+ ++E},cleanupLabel:k,lineType:O,relationType:C,logDocuments:v,getRootDoc:function(){return u},setRootDoc:function(e){r.logger.info("Setting root doc",e),u=e},getRootDocV2:function(){return f({id:"root"},{id:"root",doc:u},!0),{id:"root",doc:u}},extract:function(e){var t;t=e.doc?e.doc:e,r.logger.info(t),y(),r.logger.info("Extract",t),t.forEach((function(e){"state"===e.stmt&&g(e.id,e.type,e.doc,e.description,e.note),"relation"===e.stmt&&w(e.state1.id,e.state2.id,e.description)}))},trimColon:function(e){return e&&":"===e[0]?e.substr(1).trim():e.trim()}}},"./src/diagrams/state/stateRenderer-v2.js":function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return p})),n.d(t,"getClasses",(function(){return y})),n.d(t,"draw",(function(){return x}));var r=n("graphlib"),i=n.n(r),o=n("d3"),a=n("./src/diagrams/state/stateDb.js"),s=n("./src/diagrams/state/parser/stateDiagram.jison"),c=n.n(s),u=n("./src/config.js"),l=n("./src/dagre-wrapper/index.js"),f=n("./src/logger.js"),d=n("./src/utils.js"),h={},p=function(e){for(var t=Object.keys(e),n=0;n0?(g[n.id].shape="rectWithTitle",g[n.id].description===n.id?g[n.id].description=[n.description]:g[n.id].description=[g[n.id].description,n.description]):(g[n.id].shape="rect",g[n.id].description=n.description)),!g[n.id].type&&n.doc&&(f.logger.info("Setting cluser for ",n.id),g[n.id].type="group",g[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",g[n.id].classes=g[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var o={labelStyle:"",shape:g[n.id].shape,labelText:g[n.id].description,classes:g[n.id].classes,style:"",id:n.id,domId:"state-"+n.id+"-"+b,type:g[n.id].type,padding:15};if(n.note){var a={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note",domId:"state-"+n.id+"----note-"+b,type:g[n.id].type,padding:15},s={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:g[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+b,type:"group",padding:0};b++,e.setNode(n.id+"----parent",s),e.setNode(a.id,a),e.setNode(n.id,o),e.setParent(n.id,n.id+"----parent"),e.setParent(a.id,n.id+"----parent");var c=n.id,u=a.id;"left of"===n.note.position&&(c=a.id,u=n.id),e.setEdge(c,u,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else e.setNode(n.id,o)}t&&"root"!==t.id&&(f.logger.info("Setting node ",n.id," to be child of its parent ",t.id),e.setParent(n.id,t.id)),n.doc&&(f.logger.info("Adding nodes children "),v(e,n,n.doc,!r))},b=0,v=function(e,t,n,r){b=0,f.logger.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)m(e,t,n,r);else if("relation"===n.stmt){m(e,t,n.state1,r),m(e,t,n.state2,r);var i={id:"edge"+b,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},o=n.state1.id,a=n.state2.id;e.setEdge(o,a,i,b),b++}}))},x=function(e,t){f.logger.info("Drawing state diagram (v2)",t),a.default.clear(),g={};var n=c.a.parser;n.yy=a.default,n.parse(e);var r=a.default.getDirection();"undefined"===typeof r&&(r="LR");var s=Object(u.getConfig)().state,h=s.nodeSpacing||50,p=s.rankSpacing||50,y=new i.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB",nodesep:h,ranksep:p,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));f.logger.info(a.default.getRootDocV2()),a.default.extract(a.default.getRootDocV2()),f.logger.info(a.default.getRootDocV2()),m(y,void 0,a.default.getRootDocV2(),!0);var b=Object(o.select)('[id="'.concat(t,'"]')),v=Object(o.select)("#"+t+" g");Object(l.render)(v,y,["barb"],"statediagram",t);var x=b.node().getBBox(),w=x.width+16,_=x.height+16;b.attr("class","statediagram");var k=b.node().getBBox();Object(d.configureSvgSize)(b,_,1.75*w,s.useMaxWidth);var O="".concat(k.x-8," ").concat(k.y-8," ").concat(w," ").concat(_);if(f.logger.debug("viewBox ".concat(O)),b.attr("viewBox",O),!s.htmlLabels)for(var E=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label'),S=0;S "+e.w+": "+JSON.stringify(p.edge(e))),Object(h.drawEdge)(n,p.edge(e),p.edge(e).relation))})),j=T.getBBox();var A={id:o||"root",label:o||"root",width:0,height:0};return A.width=j.width+2*r.padding,A.height=j.height+2*r.padding,u.logger.debug("Doc rendered",A,p),A};t.default={setConf:m,draw:b}},"./src/diagrams/state/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return"g.stateGroup text {\n fill: ".concat(e.nodeBorder,";\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ").concat(e.textColor,";\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ").concat(e.labelColor,";\n}\n\ng.stateGroup rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n}\n\ng.stateGroup line {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n}\n\n.transition {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ").concat(e.background,";\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ").concat(e.noteBorderColor,";\n fill: ").concat(e.noteBkgColor,";\n\n text {\n fill: black;\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(e.mainBkg,";\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ").concat(e.tertiaryColor,";\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ").concat(e.tertiaryTextColor,";\n}\n.label div .edgeLabel {\n color: ").concat(e.tertiaryTextColor,";\n}\n\n.stateLabel text {\n fill: ").concat(e.labelColor,";\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ").concat(e.lineColor,";\n stroke: black;\n}\n.node circle.state-end {\n fill: ").concat(e.primaryBorderColor,";\n stroke: ").concat(e.background,";\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ").concat(e.background,";\n // stroke: ").concat(e.background,";\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ").concat(e.lineColor,";\n}\n\n.statediagram-cluster rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ").concat(e.textColor,";\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ").concat(e.nodeBorder,";\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ").concat(e.background,";\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: #e0e0e0;\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ").concat(e.altBackground?e.altBackground:"#efefef",";\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ").concat(e.noteBkgColor,";\n stroke: ").concat(e.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ").concat(e.noteBkgColor,";\n stroke: ").concat(e.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ").concat(e.noteTextColor,";\n}\n\n.statediagram-note .nodeLabel {\n color: ").concat(e.noteTextColor,";\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ").concat(e.lineColor,";\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n}\n")}},"./src/diagrams/user-journey/journeyDb.js":function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return f})),n.d(t,"clear",(function(){return d})),n.d(t,"setTitle",(function(){return h})),n.d(t,"getTitle",(function(){return p})),n.d(t,"addSection",(function(){return g})),n.d(t,"getSections",(function(){return y})),n.d(t,"getTasks",(function(){return m})),n.d(t,"addTask",(function(){return b})),n.d(t,"addTaskOrg",(function(){return v}));var r=n("./src/mermaidAPI.js"),i=n("./src/config.js");function o(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);tf&&T.push("'"+this.terminals_[E]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==d?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+x);switch(k[0]){case 1:n.push(x),i.push(p.yytext),o.push(p.yylloc),n.push(k[1]),x=null,w?(x=w,w=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(S=this.productions_[k[1]][1],j.$=i[i.length-S],j._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},b&&(j._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),"undefined"!==typeof(O=this.performAction.apply(j,[s,u,c,g.yy,k[1],i,o].concat(h))))return O;S&&(n=n.slice(0,-1*S*2),i=i.slice(0,-1*S),o=o.slice(0,-1*S)),n.push(this.productions_[k[1]][0]),i.push(j.$),o.push(j._$),C=a[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var o in i)this[o]=i[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),o=0;ot[0].length)){if(t=n,r=o,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[o])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function f(){this.yy={}}return u.lexer=l,f.prototype=u,u.Parser=f,new f}();t.parser=i,t.Parser=i.Parser,t.parse=function(){return i.parse.apply(i,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var i=n("./node_modules/node-libs-browser/mock/empty.js").readFileSync(n("./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(i)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/user-journey/styles.js":function(e,t,n){"use strict";n.r(t),t.default=function(e){return".label {\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n color: ".concat(e.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(e.textColor,"\n }\n\n .legend {\n fill: ").concat(e.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(e.textColor,"\n }\n\n .face {\n fill: #FFF8DC;\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(e.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(e.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(e.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(e.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(e.tertiaryColor,";\n border: 1px solid ").concat(e.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType7):"",";\n }\n")}},"./src/diagrams/user-journey/svgDraw.js":function(e,t,n){"use strict";n.r(t),n.d(t,"drawRect",(function(){return i})),n.d(t,"drawFace",(function(){return o})),n.d(t,"drawCircle",(function(){return a})),n.d(t,"drawText",(function(){return s})),n.d(t,"drawLabel",(function(){return c})),n.d(t,"drawSection",(function(){return u})),n.d(t,"drawTask",(function(){return f})),n.d(t,"drawBackgroundRect",(function(){return d})),n.d(t,"getTextObj",(function(){return h})),n.d(t,"getNoteRect",(function(){return p}));var r=n("d3"),i=function(e,t){var n=e.append("rect");return n.attr("x",t.x),n.attr("y",t.y),n.attr("fill",t.fill),n.attr("stroke",t.stroke),n.attr("width",t.width),n.attr("height",t.height),n.attr("rx",t.rx),n.attr("ry",t.ry),"undefined"!==typeof t.class&&n.attr("class",t.class),n},o=function(e,t){var n=15,i=e.append("circle").attr("cx",t.cx).attr("cy",t.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),o=e.append("g");return o.append("circle").attr("cx",t.cx-5).attr("cy",t.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),o.append("circle").attr("cx",t.cx+5).attr("cy",t.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),t.score>3?function(e){var i=Object(r.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);e.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+t.cx+","+(t.cy+2)+")")}(o):t.score<3?function(e){var i=Object(r.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);e.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+t.cx+","+(t.cy+7)+")")}(o):function(e){e.append("line").attr("class","mouth").attr("stroke",2).attr("x1",t.cx-5).attr("y1",t.cy+7).attr("x2",t.cx+5).attr("y2",t.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(o),i},a=function(e,t){var n=e.append("circle");return n.attr("cx",t.cx),n.attr("cy",t.cy),n.attr("fill",t.fill),n.attr("stroke",t.stroke),n.attr("r",t.r),"undefined"!==typeof n.class&&n.attr("class",n.class),"undefined"!==typeof t.title&&n.append("title").text(t.title),n},s=function(e,t){var n=t.text.replace(//gi," "),r=e.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),"undefined"!==typeof t.class&&r.attr("class",t.class);var i=r.append("tspan");return i.attr("x",t.x+2*t.textMargin),i.text(n),r},c=function(e,t){var n,r,i,o,a,c=e.append("polygon");c.attr("points",(n=t.x,r=t.y,n+","+r+" "+(n+(i=50))+","+r+" "+(n+i)+","+(r+(o=20)-(a=7))+" "+(n+i-1.2*a)+","+(r+o)+" "+n+","+(r+o))),c.attr("class","labelBox"),t.y=t.y+t.labelMargin,t.x=t.x+.5*t.labelMargin,s(e,t)},u=function(e,t,n){var r=e.append("g"),o=p();o.x=t.x,o.y=t.y,o.fill=t.fill,o.width=n.width,o.height=n.height,o.class="journey-section section-type-"+t.num,o.rx=3,o.ry=3,i(r,o),g(n)(t.text,r,o.x,o.y,o.width,o.height,{class:"journey-section section-type-"+t.num},n,t.colour)},l=-1,f=function(e,t,n){var r=t.x+n.width/2,s=e.append("g");l++,s.append("line").attr("id","task"+l).attr("x1",r).attr("y1",t.y).attr("x2",r).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),o(s,{cx:r,cy:300+30*(5-t.score),score:t.score});var c=p();c.x=t.x,c.y=t.y,c.fill=t.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+t.num,c.rx=3,c.ry=3,i(s,c);var u=t.x+14;t.people.forEach((function(e){var n=t.actors[e],r={cx:u,cy:t.y,r:7,fill:n,stroke:"#000",title:e};a(s,r),u+=10})),g(n)(t.task,s,c.x,c.y,c.width,c.height,{class:"task"},n,t.colour)},d=function(e,t){i(e,{x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,class:"rect"}).lower()},h=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},p=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},g=function(){function e(e,t,n,i,o,a,s,c){r(t.append("text").attr("x",n+o/2).attr("y",i+a/2+5).style("font-color",c).style("text-anchor","middle").text(e),s)}function t(e,t,n,i,o,a,s,c,u){for(var l=c.taskFontSize,f=c.taskFontFamily,d=e.split(//gi),h=0;h0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(e)&&(e=e.toLowerCase(),void 0!==o[e]&&(e=o[e])),a.trace=function(){},a.debug=function(){},a.info=function(){},a.warn=function(){},a.error=function(){},a.fatal=function(){},e<=o.fatal&&(a.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",c("FATAL"))),e<=o.error&&(a.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",c("ERROR"))),e<=o.warn&&(a.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",c("WARN"))),e<=o.info&&(a.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",c("INFO"))),e<=o.debug&&(a.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",c("DEBUG")))},c=function(e){var t=i()().format("ss.SSS");return"%c".concat(t," : ").concat(e," : ")}},"./src/mermaid.js":function(e,t,n){"use strict";n.r(t);var r=n("entity-decode/browser"),i=n.n(r),o=n("./src/mermaidAPI.js"),a=n("./src/logger.js"),s=n("./src/utils.js"),c=function(){u.startOnLoad?o.default.getConfig().startOnLoad&&u.init():"undefined"===typeof u.startOnLoad&&(a.logger.debug("In start, no config"),o.default.getConfig().startOnLoad&&u.init())};"undefined"!==typeof document&&window.addEventListener("load",(function(){c()}),!1);var u={startOnLoad:!0,htmlLabels:!0,mermaidAPI:o.default,parse:o.default.parse,render:o.default.render,init:function(){var e,t,n,r=this,c=o.default.getConfig();arguments.length>=2?("undefined"!==typeof arguments[0]&&(u.sequenceConfig=arguments[0]),e=arguments[1]):e=arguments[0],"function"===typeof arguments[arguments.length-1]?(t=arguments[arguments.length-1],a.logger.debug("Callback function found")):"undefined"!==typeof c.mermaid&&("function"===typeof c.mermaid.callback?(t=c.mermaid.callback,a.logger.debug("Callback function found")):a.logger.debug("No Callback function found")),e=void 0===e?document.querySelectorAll(".mermaid"):"string"===typeof e?document.querySelectorAll(e):e instanceof window.Node?[e]:e,a.logger.debug("Start On Load before: "+u.startOnLoad),"undefined"!==typeof u.startOnLoad&&(a.logger.debug("Start On Load inner: "+u.startOnLoad),o.default.updateSiteConfig({startOnLoad:u.startOnLoad})),"undefined"!==typeof u.ganttConfig&&o.default.updateSiteConfig({gantt:u.ganttConfig});for(var l=function(c){var u=e[c];if(u.getAttribute("data-processed"))return"continue";u.setAttribute("data-processed",!0);var l="mermaid-".concat(Date.now());n=u.innerHTML,n=i()(n).trim().replace(//gi,"
");var f=s.default.detectInit(n);f&&a.logger.debug("Detected early reinit: ",f);try{o.default.render(l,n,(function(e,n){u.innerHTML=e,"undefined"!==typeof t&&t(l),n&&n(u)}),u)}catch(d){a.logger.warn("Syntax Error rendering"),a.logger.warn(d),r.parseError&&r.parseError(d)}},f=0;fg.maxTextSize&&(f="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),"undefined"!==typeof r)r.innerHTML="",Object(o.select)(r).append("div").attr("id","d"+e).attr("style","font-family: "+g.fontFamily).append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var y=document.getElementById(e);y&&y.remove();var m=document.querySelector("#d"+e);m&&m.remove(),Object(o.select)("body").append("div").attr("id","d"+e).append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=f,f=re(f);var v=Object(o.select)("#d"+e).node(),x=c.default.detectType(f),O=v.firstChild,E=O.firstChild,j="";if(void 0!==g.themeCSS&&(j+="\n".concat(g.themeCSS)),void 0!==g.fontFamily&&(j+="\n:root { --mermaid-font-family: ".concat(g.fontFamily,"}")),void 0!==g.altFontFamily&&(j+="\n:root { --mermaid-alt-font-family: ".concat(g.altFontFamily,"}")),"flowchart"===x||"flowchart-v2"===x||"graph"===x){var A=u.default.getClasses(f);for(var M in A)j+="\n.".concat(M," > * { ").concat(A[M].styles.join(" !important; ")," !important; }"),A[M].textStyles&&(j+="\n.".concat(M," tspan { ").concat(A[M].textStyles.join(" !important; ")," !important; }"))}var N=(new i.a)("#".concat(e),Object(ee.default)(x,j,g.themeVariables)),D=document.createElement("style");D.innerHTML=N,O.insertBefore(D,E);try{switch(x){case"git":g.flowchart.arrowMarkerAbsolute=g.arrowMarkerAbsolute,P.default.setConf(g.git),P.default.draw(f,e,!1);break;case"flowchart":g.flowchart.arrowMarkerAbsolute=g.arrowMarkerAbsolute,u.default.setConf(g.flowchart),u.default.draw(f,e,!1);break;case"flowchart-v2":g.flowchart.arrowMarkerAbsolute=g.arrowMarkerAbsolute,l.default.setConf(g.flowchart),l.default.draw(f,e,!1);break;case"sequence":g.sequence.arrowMarkerAbsolute=g.arrowMarkerAbsolute,g.sequenceDiagram?(p.default.setConf(Object.assign(g.sequence,g.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):p.default.setConf(g.sequence),p.default.draw(f,e);break;case"gantt":g.gantt.arrowMarkerAbsolute=g.arrowMarkerAbsolute,b.default.setConf(g.gantt),b.default.draw(f,e);break;case"class":g.class.arrowMarkerAbsolute=g.arrowMarkerAbsolute,_.default.setConf(g.class),_.default.draw(f,e);break;case"classDiagram":g.class.arrowMarkerAbsolute=g.arrowMarkerAbsolute,k.default.setConf(g.class),k.default.draw(f,e);break;case"state":g.class.arrowMarkerAbsolute=g.arrowMarkerAbsolute,C.default.setConf(g.state),C.default.draw(f,e);break;case"stateDiagram":g.class.arrowMarkerAbsolute=g.arrowMarkerAbsolute,T.default.setConf(g.state),T.default.draw(f,e);break;case"info":g.class.arrowMarkerAbsolute=g.arrowMarkerAbsolute,I.default.setConf(g.class),I.default.draw(f,e,a.version);break;case"pie":g.class.arrowMarkerAbsolute=g.arrowMarkerAbsolute,U.default.setConf(g.pie),U.default.draw(f,e,a.version);break;case"er":G.default.setConf(g.er),G.default.draw(f,e,a.version);break;case"journey":J.default.setConf(g.journey),J.default.draw(f,e,a.version)}}catch(F){throw L.default.draw(e,a.version),F}Object(o.select)('[id="'.concat(e,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var R=Object(o.select)("#d"+e).node().innerHTML;if(s.logger.debug("cnf.arrowMarkerAbsolute",g.arrowMarkerAbsolute),g.arrowMarkerAbsolute&&"false"!==g.arrowMarkerAbsolute||(R=R.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),R=ie(R),"undefined"!==typeof n)switch(x){case"flowchart":case"flowchart-v2":n(R,h.default.bindFunctions);break;case"gantt":n(R,w.default.bindFunctions);break;case"class":case"classDiagram":n(R,S.default.bindFunctions);break;default:n(R)}else s.logger.debug("CB = undefined!");var B=Object(o.select)("#d"+e).node();return null!==B&&"function"===typeof B.remove&&Object(o.select)("#d"+e).node().remove(),R},parse:function(e){var t=c.default.detectInit(e);t&&s.logger.debug("reinit ",t);var n,r=c.default.detectType(e);switch(s.logger.debug("Type "+r),r){case"git":(n=D.a).parser.yy=R.default;break;case"flowchart":case"flowchart-v2":h.default.clear(),(n=d.a).parser.yy=h.default;break;case"sequence":(n=y.a).parser.yy=m.default;break;case"gantt":(n=x.a).parser.yy=w.default;break;case"class":case"classDiagram":(n=E.a).parser.yy=S.default;break;case"state":case"stateDiagram":(n=A.a).parser.yy=M.default;break;case"info":s.logger.debug("info info info"),(n=F.a).parser.yy=z.default;break;case"pie":s.logger.debug("pie"),(n=W.a).parser.yy=Y.default;break;case"er":s.logger.debug("er"),(n=$.a).parser.yy=V.default;break;case"journey":s.logger.debug("Journey"),(n=K.a).parser.yy=Z.default}return n.parser.yy.graphType=r,n.parser.yy.parseError=function(e,t){throw{str:e,hash:t}},n.parse(e),n},parseDirective:function(e,t,n,r){try{if(void 0!==t)switch(t=t.trim(),n){case"open_directive":oe={};break;case"type_directive":oe.type=t.toLowerCase();break;case"arg_directive":oe.args=JSON.parse(t);break;case"close_directive":ae(e,oe,r),oe=null}}catch(i){s.logger.error("Error while rendering sequenceDiagram directive: ".concat(t," jison context: ").concat(n)),s.logger.error(i.message)}},initialize:function(e){e&&e.fontFamily&&(e.themeVariables&&e.themeVariables.fontFamily||(e.themeVariables={fontFamily:e.fontFamily})),Q.setSiteConfigDelta(e),e&&e.theme&&te.default[e.theme]?e.themeVariables=te.default[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=te.default.default.getThemeVariables(e.themeVariables));var t="object"===ne(e)?Q.setSiteConfig(e):Q.getSiteConfig();se(t),Object(s.setLogLevel)(t.logLevel)},reinitialize:ce,getConfig:Q.getConfig,setConfig:Q.setConfig,getSiteConfig:Q.getSiteConfig,updateSiteConfig:Q.updateSiteConfig,reset:function(){Q.reset()},globalReset:function(){Q.reset(Q.defaultConfig),se(Q.getConfig())},defaultConfig:Q.defaultConfig});Object(s.setLogLevel)(Q.getConfig().logLevel),Q.reset(Q.getConfig()),t.default=ue},"./src/styles.js":function(e,t,n){"use strict";n.r(t),n.d(t,"calcThemeVariables",(function(){return p}));var r=n("./src/diagrams/class/styles.js"),i=n("./src/diagrams/er/styles.js"),o=n("./src/diagrams/flowchart/styles.js"),a=n("./src/diagrams/gantt/styles.js"),s=n("./src/diagrams/git/styles.js"),c=n("./src/diagrams/info/styles.js"),u=n("./src/diagrams/pie/styles.js"),l=n("./src/diagrams/sequence/styles.js"),f=n("./src/diagrams/state/styles.js"),d=n("./src/diagrams/user-journey/styles.js"),h={flowchart:o.default,"flowchart-v2":o.default,sequence:l.default,gantt:a.default,classDiagram:r.default,"classDiagram-v2":r.default,class:r.default,stateDiagram:f.default,state:f.default,git:s.default,info:c.default,pie:u.default,er:i.default,journey:d.default},p=function(e,t){return e.calcColors(t)};t.default=function(e,t,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(h[e](n),"\n\n ").concat(t,"\n\n ").concat(e," { fill: apa;}\n")}},"./src/themes/index.js":function(e,t,n){"use strict";n.r(t);var r=n("./src/themes/theme-base.js"),i=n("./src/themes/theme-dark.js"),o=n("./src/themes/theme-default.js"),a=n("./src/themes/theme-forest.js"),s=n("./src/themes/theme-neutral.js");t.default={base:{getThemeVariables:r.getThemeVariables},dark:{getThemeVariables:i.getThemeVariables},default:{getThemeVariables:o.getThemeVariables},forest:{getThemeVariables:a.getThemeVariables},neutral:{getThemeVariables:s.getThemeVariables}}},"./src/themes/theme-base.js":function(e,t,n){"use strict";n.r(t),n.d(t,"getThemeVariables",(function(){return c}));var r=n("khroma"),i=n("./src/themes/theme-helpers.js");function o(e){return o="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(d.source,")(?=[}][%]{2}).*\n"),"ig");e=e.trim().replace(n,"").replace(/'/gm,'"'),i.logger.debug("Detecting diagram directive".concat(null!==t?" type:"+t:""," based on the text:").concat(e));for(var r,o=[];null!==(r=f.exec(e));)if(r.index===f.lastIndex&&f.lastIndex++,r&&!t||t&&r[1]&&r[1].match(t)||t&&r[2]&&r[2].match(t)){var a=r[1]?r[1]:r[2],s=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;o.push({type:a,args:s})}return 0===o.length&&o.push({type:e,args:null}),1===o.length?o[0]:o}catch(c){return i.logger.error("ERROR: ".concat(c.message," - Unable to parse directive").concat(null!==t?" type:"+t:""," based on the text:").concat(e)),{type:null,args:null}}},y=function(e){return e=e.replace(f,"").replace(h,"\n"),i.logger.debug("Detecting diagram type based on the text "+e),e.match(/^\s*sequenceDiagram/)?"sequence":e.match(/^\s*gantt/)?"gantt":e.match(/^\s*classDiagram-v2/)?"classDiagram":e.match(/^\s*classDiagram/)?"class":e.match(/^\s*stateDiagram-v2/)?"stateDiagram":e.match(/^\s*stateDiagram/)?"state":e.match(/^\s*gitGraph/)?"git":e.match(/^\s*flowchart/)?"flowchart-v2":e.match(/^\s*info/)?"info":e.match(/^\s*pie/)?"pie":e.match(/^\s*erDiagram/)?"er":e.match(/^\s*journey/)?"journey":"flowchart"},m=function(e,t){var n={};return function(){for(var r=arguments.length,i=new Array(r),o=0;o1?s-1:0),u=1;u"},n),a.default.lineBreakRegex.test(e))return e;var r=e.split(" "),i=[],o="";return r.forEach((function(e,a){var s=N("".concat(e," "),n),c=N(o,n);if(s>t){var l=M(e,t,"-",n),f=l.hyphenatedStrings,d=l.remainingWord;i.push.apply(i,[o].concat(u(f))),o=d}else c+s>=t?(i.push(o),o=e):o=[o,e].filter(Boolean).join(" ");a+1===r.length&&i.push(o)})),i.filter((function(e){return""!==e})).join(n.joinWith)}),(function(e,t,n){return"".concat(e,"-").concat(t,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),M=m((function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=e.split(""),o=[],a="";return i.forEach((function(e,s){var c="".concat(a).concat(e);if(N(c,r)>=t){var u=s+1,l=i.length===u,f="".concat(c).concat(n);o.push(l?c:f),a=""}else a=c})),{hyphenatedStrings:o,remainingWord:a}}),(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(e,"-").concat(t,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),P=function(e,t){return t=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},t),D(e,t).height},N=function(e,t){return t=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},t),D(e,t).width},D=m((function(e,t){var n=t=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},t),i=n.fontSize,o=n.fontFamily,s=n.fontWeight;if(!e)return{width:0,height:0};var c=["sans-serif",o],u=e.split(a.default.lineBreakRegex),l=[],f=Object(r.select)("body");if(!f.remove)return{width:0,height:0,lineHeight:0};for(var d=f.append("svg"),h=0,p=c;hl[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1]}),(function(e,t){return"".concat(e,"-").concat(t.fontSize,"-").concat(t.fontWeight,"-").concat(t.fontFamily)})),R=function(e,t,n){var r=new Map;return r.set("height",e),n?(r.set("width","100%"),r.set("style","max-width: ".concat(t,"px;"))):r.set("width",t),r},I=function(e,t,n,r){!function(e,t){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.attr(s[0],s[1])}}catch(c){r=!0,i=c}finally{try{n||null==a.return||a.return()}finally{if(r)throw i}}}(e,R(t,n,r))};t.default={assignWithDepth:C,wrapLabel:A,calculateTextHeight:P,calculateTextWidth:N,calculateTextDimensions:D,calculateSvgSizeAttrs:R,configureSvgSize:I,detectInit:p,detectDirective:g,detectType:y,isSubstringInArray:b,interpolateToCurve:v,calcLabelPosition:function(e){return function(e){var t,n=0;e.forEach((function(e){n+=_(e,t),t=e}));var r=n/2,i=void 0;return t=void 0,e.forEach((function(e){if(t&&!i){var n=_(e,t);if(n=1&&(i={x:e.x,y:e.y}),o>0&&o<1&&(i={x:(1-o)*t.x+o*e.x,y:(1-o)*t.y+o*e.y})}}t=e})),i}(e)},calcCardinalityPosition:function(e,t,n){var r;i.logger.info("our points",t),t[0]!==n&&(t=t.reverse()),t.forEach((function(e){_(e,r),r=e}));var o,a=25;r=void 0,t.forEach((function(e){if(r&&!o){var t=_(e,r);if(t=1&&(o={x:e.x,y:e.y}),n>0&&n<1&&(o={x:(1-n)*r.x+n*e.x,y:(1-n)*r.y+n*e.y})}}r=e}));var s=e?10:5,c=Math.atan2(t[0].y-o.y,t[0].x-o.x),u={x:0,y:0};return u.x=Math.sin(c)*s+(t[0].x+o.x)/2,u.y=-Math.cos(c)*s+(t[0].y+o.y)/2,u},calcTerminalLabelPosition:function(e,t,n){var r,o=JSON.parse(JSON.stringify(n));i.logger.info("our points",o),"start_left"!==t&&"start_right"!==t&&(o=o.reverse()),o.forEach((function(e){_(e,r),r=e}));var a,s=25;r=void 0,o.forEach((function(e){if(r&&!a){var t=_(e,r);if(t=1&&(a={x:e.x,y:e.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*e.x,y:(1-n)*r.y+n*e.y})}}r=e}));var c=10,u=Math.atan2(o[0].y-a.y,o[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(u)*c+(o[0].x+a.x)/2,l.y=-Math.cos(u)*c+(o[0].y+a.y)/2,"start_left"===t&&(l.x=Math.sin(u+Math.PI)*c+(o[0].x+a.x)/2,l.y=-Math.cos(u+Math.PI)*c+(o[0].y+a.y)/2),"end_right"===t&&(l.x=Math.sin(u-Math.PI)*c+(o[0].x+a.x)/2-5,l.y=-Math.cos(u-Math.PI)*c+(o[0].y+a.y)/2-5),"end_left"===t&&(l.x=Math.sin(u)*c+(o[0].x+a.x)/2-5,l.y=-Math.cos(u)*c+(o[0].y+a.y)/2-5),l},formatUrl:x,getStylesFromArray:k,generateId:E,random:S,memoize:m,runFunc:w}},"@braintree/sanitize-url":function(e,t){e.exports=n(434)},d3:function(e,t){e.exports=n(378)},dagre:function(e,t){e.exports=n(289)},"dagre-d3":function(e,t){e.exports=n(605)},"dagre-d3/lib/label/add-html-label.js":function(e,t){e.exports=n(351)},"entity-decode/browser":function(e,t){e.exports=n(622)},graphlib:function(e,t){e.exports=n(233)},khroma:function(e,t){e.exports=n(623)},"moment-mini":function(e,t){e.exports=n(650)},stylis:function(e,t){e.exports=n(652)}}).default},e.exports=r()},function(e,t,n){"use strict";function r(){this.reset()}t.a=function(){return new r},r.prototype={constructor:r,reset:function(){this.s=this.t=0},add:function(e){o(i,e,this.t),o(this,i.s,this.s),this.s?this.t+=i.t:this.s=i.t},valueOf:function(){return this.s}};var i=new r;function o(e,t,n){var r=e.s=t+n,i=r-t,o=r-i;e.t=t-o+(n-i)}},function(e,t,n){"use strict";t.a=function(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}},function(e,t,n){"use strict";function r(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}n.d(t,"b",(function(){return r})),t.a=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e}},function(e,t,n){"use strict";var r=n(362),i=Object.prototype.toString;function o(e){return"[object Array]"===i.call(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&"object"===typeof e}function c(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function u(e){return"[object Function]"===i.call(e)}function l(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var n=0,r=e.length;n0)&&!(r=o.next()).done;)a.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function u(e){return e.current?Object(r.h)(e.current):""}var l=[];function f(){var e=c(Object(i.useState)(0),2)[1];return Object(i.useCallback)((function(){e((function(e){return e+1}))}),[])}var d={};function h(e,t,n){if(void 0===t&&(t="observed"),void 0===n&&(n=d),a())return e();var o=(n.useForceUpdate||f)(),s=Object(i.useRef)(null);s.current||(s.current=new r.b("observer("+t+")",(function(){o()})));var c,h,p=function(){s.current&&!s.current.isDisposed&&(s.current.dispose(),s.current=null)};if(Object(i.useDebugValue)(s,u),function(e){Object(i.useEffect)((function(){return e}),l)}((function(){p()})),s.current.track((function(){try{c=e()}catch(t){h=t}})),h)throw p(),h;return c}function p(e,t){if(a())return e;var n,r,o,c=s({forwardRef:!1},t),u=e.displayName||e.name,l=function(t,n){return h((function(){return e(t,n)}),u)};return l.displayName=u,n=c.forwardRef?Object(i.memo)(Object(i.forwardRef)(l)):Object(i.memo)(l),r=e,o=n,Object.keys(r).forEach((function(e){r.hasOwnProperty(e)&&!g[e]&&Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(r,e))})),n.displayName=u,n}var g={$$typeof:!0,render:!0,compare:!0,type:!0};function y(e){var t=e.children,n=e.render,r=t||n;return"function"!==typeof r?null:h(r)}function m(e,t,n,r,i){var o="children"===t?"render":"children",a="function"===typeof e[t],s="function"===typeof e[o];return a&&s?new Error("MobX Observer: Do not use children and render in the same time in`"+n):a||s?null:new Error("Invalid prop `"+i+"` of type `"+typeof e[t]+"` supplied to `"+n+"`, expected `function`.")}y.propTypes={children:m,render:m},y.displayName="Observer"},function(e,t,n){"use strict";function r(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:["all"],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.duration,s=void 0===n?o.standard:n,c=t.easing,u=void 0===c?i.easeInOut:c,l=t.delay,f=void 0===l?0:l;Object(r.a)(t,["duration","easing","delay"]);return(Array.isArray(e)?e:[e]).map((function(e){return"".concat(e," ").concat("string"===typeof s?s:a(s)," ").concat(u," ").concat("string"===typeof f?f:a(f))})).join(",")},getAutoHeightDuration:function(e){if(!e)return 0;var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}}},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=o.default.memo(o.default.forwardRef((function(t,n){return o.default.createElement(a.default,(0,i.default)({ref:n},t),e)})));0;return n.muiName=a.default.muiName,n};var i=r(n(431)),o=r(n(0)),a=r(n(129))},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return o})),n.d(t,"d",(function(){return a})),n.d(t,"e",(function(){return s})),n.d(t,"a",(function(){return u}));var r,i,o,a,s,c=n(202);function u(e){return r=Object(c.a)(e),i=r.format,o=r.parse,a=r.utcFormat,s=r.utcParse,r}u({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]})},function(e,t,n){"use strict";function r(e){return r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";t.a=function(e,t,n,r,i){for(var o,a=e.children,s=-1,c=a.length,u=e.value&&(r-t)/e.value;++s13||Number(o)>13,c=function(e){return s?e:e&&e.getDOMNode()},u={},l=!0;function f(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.process&&l||n&&u[t]||(console.warn(t),u[t]=!0)}}).call(this,n(113))},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n(0)),o=(0,r(n(75)).default)(i.default.createElement("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}),"FileCopy");t.default=o},function(e,t,n){"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));var r=n(0),i=r.createContext();function o(){return r.useContext(i)}t.a=i},function(e,t,n){"use strict";var r=n(91);t.a=function(e){return(e=Object(r.b)(Math.abs(e)))?e[1]:NaN}},,function(e,t,n){"use strict";var r=n(172);n.d(t,"c",(function(){return r.a})),n.d(t,"b",(function(){return r.b})),n.d(t,"e",(function(){return r.c}));var i=n(205);n.d(t,"d",(function(){return i.a}));var o=n(140);n.d(t,"f",(function(){return o.b})),n.d(t,"a",(function(){return o.a}));var a=n(277);n.d(t,"g",(function(){return a.a}));var s=n(278);n.d(t,"h",(function(){return s.a}));var c=n(279);n.d(t,"i",(function(){return c.a}))},function(e,t,n){var r=n(131),i=n(238);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},function(e,t,n){var r=n(492),i=n(502),o=n(118),a=n(39),s=n(509);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?a(e)?i(e[0],e[1]):r(e):s(e)}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:166;function r(){for(var r=arguments.length,i=new Array(r),o=0;o1?r[0]+r.slice(2):r,+e.slice(n+1)]}n.d(t,"b",(function(){return r})),t.a=function(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}},function(e,t,n){"use strict";function r(e){return e[0]}function i(e){return e[1]}n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}))},,function(e,t,n){"use strict";var r=n(150);n.d(t,"a",(function(){return r.a}))},function(e,t,n){var r=n(294),i=n(240),o=n(87);e.exports=function(e){return o(e)?r(e):i(e)}},function(e,t,n){var r;if(!r)try{r=n(378)}catch(i){}r||(r=window.d3),e.exports=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(67),i=n(73);t.default=function(e,t){return r.default.lang.round(i.default.parse(e)[t])}},function(e,t,n){"use strict";t.a=function(e,t,n,r,i){for(var o,a=e.children,s=-1,c=a.length,u=e.value&&(i-n)/e.value;++s0?Object(r.a)((function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,n){t.setFullYear(t.getFullYear()+n*e)})):null},t.a=i;var o=i.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));var r=n(26),i=Object(r.a)((function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)}),(function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()}),(function(e){return e.getUTCFullYear()}));i.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Object(r.a)((function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)})):null},t.a=i;var o=i.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return i}));var r=function(e){return e.scrollTop};function i(e,t){var n=e.timeout,r=e.style,i=void 0===r?{}:r;return{duration:i.transitionDuration||"number"===typeof n?n:n[t.mode]||0,delay:i.transitionDelay}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e.default:e}t.__esModule=!0;var i=n(671);t.Motion=r(i);var o=n(673);t.StaggeredMotion=r(o);var a=n(674);t.TransitionMotion=r(a);var s=n(676);t.spring=r(s);var c=n(370);t.presets=r(c);var u=n(194);t.stripStyle=r(u);var l=n(677);t.reorderKeys=r(l)},function(e,t,n){"use strict";var r=n(3),i=n(7),o=n(0),a=(n(1),n(6)),s=n(8),c=n(17),u={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p"},l=o.forwardRef((function(e,t){var n=e.align,s=void 0===n?"inherit":n,l=e.classes,f=e.className,d=e.color,h=void 0===d?"initial":d,p=e.component,g=e.display,y=void 0===g?"initial":g,m=e.gutterBottom,b=void 0!==m&&m,v=e.noWrap,x=void 0!==v&&v,w=e.paragraph,_=void 0!==w&&w,k=e.variant,O=void 0===k?"body1":k,E=e.variantMapping,S=void 0===E?u:E,C=Object(i.a)(e,["align","classes","className","color","component","display","gutterBottom","noWrap","paragraph","variant","variantMapping"]),T=p||(_?"p":S[O]||u[O])||"span";return o.createElement(T,Object(r.a)({className:Object(a.a)(l.root,f,"inherit"!==O&&l[O],"initial"!==h&&l["color".concat(Object(c.a)(h))],x&&l.noWrap,b&&l.gutterBottom,_&&l.paragraph,"inherit"!==s&&l["align".concat(Object(c.a)(s))],"initial"!==y&&l["display".concat(Object(c.a)(y))]),ref:t},C))}));t.a=Object(s.a)((function(e){return{root:{margin:0},body2:e.typography.body2,body1:e.typography.body1,caption:e.typography.caption,button:e.typography.button,h1:e.typography.h1,h2:e.typography.h2,h3:e.typography.h3,h4:e.typography.h4,h5:e.typography.h5,h6:e.typography.h6,subtitle1:e.typography.subtitle1,subtitle2:e.typography.subtitle2,overline:e.typography.overline,srOnly:{position:"absolute",height:1,width:1,overflow:"hidden"},alignLeft:{textAlign:"left"},alignCenter:{textAlign:"center"},alignRight:{textAlign:"right"},alignJustify:{textAlign:"justify"},noWrap:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},gutterBottom:{marginBottom:"0.35em"},paragraph:{marginBottom:16},colorInherit:{color:"inherit"},colorPrimary:{color:e.palette.primary.main},colorSecondary:{color:e.palette.secondary.main},colorTextPrimary:{color:e.palette.text.primary},colorTextSecondary:{color:e.palette.text.secondary},colorError:{color:e.palette.error.main},displayInline:{display:"inline"},displayBlock:{display:"block"}}}),{name:"MuiTypography"})(l)},,function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";var r=n(26);n.d(t,"g",(function(){return r.a}));var i=n(160);n.d(t,"h",(function(){return i.a})),n.d(t,"i",(function(){return i.b})),n.d(t,"L",(function(){return i.a})),n.d(t,"M",(function(){return i.b}));var o=n(159);n.d(t,"r",(function(){return o.a})),n.d(t,"s",(function(){return o.b})),n.d(t,"V",(function(){return o.a})),n.d(t,"W",(function(){return o.b}));var a=n(229);n.d(t,"j",(function(){return a.a})),n.d(t,"k",(function(){return a.b}));var s=n(228);n.d(t,"e",(function(){return s.a})),n.d(t,"f",(function(){return s.b}));var c=n(168);n.d(t,"a",(function(){return c.b})),n.d(t,"b",(function(){return c.a}));var u=n(30);n.d(t,"B",(function(){return u.g})),n.d(t,"C",(function(){return u.h})),n.d(t,"t",(function(){return u.g})),n.d(t,"u",(function(){return u.h})),n.d(t,"l",(function(){return u.c})),n.d(t,"m",(function(){return u.d})),n.d(t,"x",(function(){return u.k})),n.d(t,"y",(function(){return u.l})),n.d(t,"z",(function(){return u.m})),n.d(t,"A",(function(){return u.n})),n.d(t,"v",(function(){return u.i})),n.d(t,"w",(function(){return u.j})),n.d(t,"c",(function(){return u.a})),n.d(t,"d",(function(){return u.b})),n.d(t,"p",(function(){return u.e})),n.d(t,"q",(function(){return u.f}));var l=n(227);n.d(t,"n",(function(){return l.a})),n.d(t,"o",(function(){return l.b}));var f=n(107);n.d(t,"D",(function(){return f.a})),n.d(t,"E",(function(){return f.b}));var d=n(232);n.d(t,"N",(function(){return d.a})),n.d(t,"O",(function(){return d.b}));var h=n(231);n.d(t,"J",(function(){return h.a})),n.d(t,"K",(function(){return h.b}));var p=n(169);n.d(t,"F",(function(){return p.a})),n.d(t,"G",(function(){return p.b}));var g=n(31);n.d(t,"fb",(function(){return g.g})),n.d(t,"gb",(function(){return g.h})),n.d(t,"X",(function(){return g.g})),n.d(t,"Y",(function(){return g.h})),n.d(t,"P",(function(){return g.c})),n.d(t,"Q",(function(){return g.d})),n.d(t,"bb",(function(){return g.k})),n.d(t,"cb",(function(){return g.l})),n.d(t,"db",(function(){return g.m})),n.d(t,"eb",(function(){return g.n})),n.d(t,"Z",(function(){return g.i})),n.d(t,"ab",(function(){return g.j})),n.d(t,"H",(function(){return g.a})),n.d(t,"I",(function(){return g.b})),n.d(t,"T",(function(){return g.e})),n.d(t,"U",(function(){return g.f}));var y=n(230);n.d(t,"R",(function(){return y.a})),n.d(t,"S",(function(){return y.b}));var m=n(108);n.d(t,"hb",(function(){return m.a})),n.d(t,"ib",(function(){return m.b}))},function(e,t,n){var r=n(447),i=n(452);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){var r=n(132),i=n(448),o=n(449),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?i(e):o(e)}},function(e,t,n){var r=n(294),i=n(472),o=n(87);e.exports=function(e){return o(e)?r(e,!0):i(e)}},function(e,t){e.exports=function(e){return e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(67),i=n(73);t.default=function(e,t,n){var o=i.default.parse(e),a=o[t],s=r.default.channel.clamp[t](a+n);return a!==s&&(o[t]=s),i.default.stringify(o)}},function(e,t,n){"use strict";n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return u}));var r=n(35),i=n(138),o=n(196),a=n(29);function s(e){return function(t){var n,i,o=t.length,a=new Array(o),s=new Array(o),c=new Array(o);for(n=0;np&&(p=u),b=d*d*m,(g=Math.max(p/b,b/h))>y){d-=u;break}y=g}v.push(c={value:d,dice:l1?t:1)},n}(o)},function(e,t,n){"use strict";function r(e){var t=0,n=e.children,r=n&&n.length;if(r)for(;--r>=0;)t+=n[r].value;else t=1;e.value=t}n.d(t,"c",(function(){return i})),n.d(t,"b",(function(){return s})),n.d(t,"a",(function(){return c}));function i(e,t){var n,r,i,a,u,l=new c(e),f=+e.value&&(l.value=e.value),d=[l];for(null==t&&(t=o);n=d.pop();)if(f&&(n.value=+n.data.value),(i=t(n.data))&&(u=i.length))for(n.children=new Array(u),a=u-1;a>=0;--a)d.push(r=n.children[a]=new c(i[a])),r.parent=n,r.depth=n.depth+1;return l.eachBefore(s)}function o(e){return e.children}function a(e){e.data=e.data.data}function s(e){var t=0;do{e.height=t}while((e=e.parent)&&e.height<++t)}function c(e){this.data=e,this.depth=this.height=0,this.parent=null}c.prototype=i.prototype={constructor:c,count:function(){return this.eachAfter(r)},each:function(e){var t,n,r,i,o=this,a=[o];do{for(t=a.reverse(),a=[];o=t.pop();)if(e(o),n=o.children)for(r=0,i=n.length;r=0;--n)i.push(t[n]);return this},sum:function(e){return this.eachAfter((function(t){for(var n=+e(t.data)||0,r=t.children,i=r&&r.length;--i>=0;)n+=r[i].value;t.value=n}))},sort:function(e){return this.eachBefore((function(t){t.children&&t.children.sort(e)}))},path:function(e){for(var t=this,n=function(e,t){if(e===t)return e;var n=e.ancestors(),r=t.ancestors(),i=null;e=n.pop(),t=r.pop();for(;e===t;)i=e,e=n.pop(),t=r.pop();return i}(t,e),r=[t];t!==n;)t=t.parent,r.push(t);for(var i=r.length;e!==n;)r.splice(i,0,e),e=e.parent;return r},ancestors:function(){for(var e=this,t=[e];e=e.parent;)t.push(e);return t},descendants:function(){var e=[];return this.each((function(t){e.push(t)})),e},leaves:function(){var e=[];return this.eachBefore((function(t){t.children||e.push(t)})),e},links:function(){var e=this,t=[];return e.each((function(n){n!==e&&t.push({source:n.parent,target:n})})),t},copy:function(){return i(this).eachBefore(a)}}},function(e,t,n){"use strict";function r(e){return null==e?null:i(e)}function i(e){if("function"!==typeof e)throw new Error;return e}n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}))},function(e,t,n){"use strict";t.a=function(e,t){return[(t=+t)*Math.cos(e-=Math.PI/2),t*Math.sin(e)]}},function(e,t,n){"use strict";function r(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function i(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e&&(r(e.value)&&""!==e.value||t&&r(e.defaultValue)&&""!==e.defaultValue)}function o(e){return e.startAdornment}n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return o}))},function(e,t,n){e.exports=n(653)},function(e,t,n){"use strict";n.d(t,"b",(function(){return jr})),n.d(t,"c",(function(){return ta})),n.d(t,"e",(function(){return Ia})),n.d(t,"d",(function(){return Ps})),n.d(t,"f",(function(){return Fs})),n.d(t,"a",(function(){return Zs}));var r=n(1),i=n.n(r),o=n(142),a=n(0),s=n.n(a),c=n(139),u=n(110),l=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["animatedProps"]);return t.reduce((function(e,t){return n.hasOwnProperty(t)&&(e[t]=n[t]),e}),{})}var g=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n._motionEndHandler=function(){n.props.onEnd&&n.props.onEnd()},n._renderChildren=function(e){var t=e.i,r=n.props.children,i=n._interpolator,o=s.a.Children.only(r),a=i?i(t):i,c=a&&a.data||null;return c&&o.props._data&&(c=c.map((function(e,t){var n=o.props._data[t];return f({},e,{parent:n.parent,children:n.children})}))),s.a.cloneElement(o,f({},o.props,a,{data:c||o.props.data||null,_animation:Math.random()}))},n._updateInterpolator(e),n}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),l(t,[{key:"componentWillUpdate",value:function(e){this._updateInterpolator(this.props,e),e.onStart&&e.onStart()}},{key:"_updateInterpolator",value:function(e,t){this._interpolator=Object(c.a)(p(e),t?p(t):null)}},{key:"render",value:function(){var e=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:u.presets.noWobble;if("string"===typeof e)return u.presets[e]||u.presets.noWobble;var t=e.damping,n=e.stiffness;return f({damping:t||u.presets.noWobble.damping,stiffness:n||u.presets.noWobble.stiffness},e)}(this.props.animation),t={i:Object(u.spring)(1,e)},n=Math.random();return s.a.createElement(u.Motion,f({defaultStyle:{i:0},style:t,key:n},{onRest:this._motionEndHandler}),this._renderChildren)}}]),t}(a.PureComponent);g.propTypes=h,g.displayName="Animation";var y=g,m=d,b=n(12),v=n(46),x=Array.prototype,w=x.map,_=x.slice,k={name:"implicit"};function O(e){var t=Object(v.c)(),n=[],r=k;function i(i){var o=i+"",a=t.get(o);if(!a){if(r!==k)return r;t.set(o,a=n.push(i))}return e[(a-1)%e.length]}return e=null==e?[]:_.call(e),i.domain=function(e){if(!arguments.length)return n.slice();n=[],t=Object(v.c)();for(var r,o,a=-1,s=e.length;++a2?D:N,r=i=null,f}function f(t){return(r||(r=n(o,a,u?function(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,s)))(+t)}return f.invert=function(e){return(i||(i=n(a,o,P,u?function(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},f.domain=function(e){return arguments.length?(o=w.call(e,A),l()):o.slice()},f.range=function(e){return arguments.length?(a=_.call(e),l()):a.slice()},f.rangeRound=function(e){return a=_.call(e),s=T.a,l()},f.clamp=function(e){return arguments.length?(u=!!e,l()):u},f.interpolate=function(e){return arguments.length?(s=e,l()):s},l()}var L=n(140),B=n(278),F=n(172),z=n(279),U=n(277);function H(e){var t=e.domain;return e.ticks=function(e){var n=t();return Object(b.B)(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return function(e,t,n){var r,i=e[0],o=e[e.length-1],a=Object(b.A)(i,o,null==t?10:t);switch((n=Object(L.b)(null==n?",f":n)).type){case"s":var s=Math.max(Math.abs(i),Math.abs(o));return null!=n.precision||isNaN(r=Object(B.a)(a,s))||(n.precision=r),Object(F.c)(n,s);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=Object(z.a)(a,Math.max(Math.abs(i),Math.abs(o))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=Object(U.a)(a))||(n.precision=r-2*("%"===n.type))}return Object(F.b)(n)}(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),o=0,a=i.length-1,s=i[o],c=i[a];return c0?(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,r=Object(b.z)(s,c,n)):r<0&&(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,r=Object(b.z)(s,c,n)),r>0?(i[o]=Math.floor(s/r)*r,i[a]=Math.ceil(c/r)*r,t(i)):r<0&&(i[o]=Math.ceil(s*r)/r,i[a]=Math.floor(c*r)/r,t(i)),e},e}function W(){var e=I(P,C.a);return e.copy=function(){return R(e,W())},H(e)}var Y=function(e,t){var n,r=0,i=(e=e.slice()).length-1,o=e[r],a=e[i];return a0){for(;dc)break;g.push(f)}}else for(;d=1;--l)if(!((f=u*l)c)break;g.push(f)}}else g=Object(b.B)(d,h,Math.min(h-d,p)).map(o);return t?g.reverse():g},t.tickFormat=function(e,n){if(null==n&&(n=10===r?".0e":","),"function"!==typeof n&&(n=Object(F.b)(n)),e===1/0)return n;null==e&&(e=10);var a=Math.max(1,r*e/t.ticks().length);return function(e){var t=e/o(Math.round(i(e)));return t*rs-e.padding()*e.step())return e.domain()[e.domain().length-1];var c=Math.floor((t-a-e.padding()*e.step())/e.step());return e.domain()[c]})}(o)),o}function Ve(e,t,n,r){var i=e.reduce((function(e,r){var i=t(r),o=n(r);return Ze(i)&&e.push(i),Ze(o)&&e.push(o),e}),[]);return i.length?r!==Le&&r!==Be?Object(b.i)(i):Object(v.e)(i).values():[]}function qe(e,t,n,r,i){return n===Fe?{type:Fe,domain:[],range:[t],distance:0,attr:e,baseValue:void 0,isValue:!0,accessor:r,accessor0:i}:"undefined"===typeof t?null:{type:Be,range:[t],domain:[],distance:0,attr:e,baseValue:void 0,isValue:!0,accessor:r,accessor0:i}}function $e(e,t){var n=t.domain,r=t.type,i=t.accessor,o=t.accessor0,a=function(e,t){var n=new Set(e.map(t));return Array.from(n)}(e,i),s=function(e,t,n,r){return r===ze&&1===t.length?[n(e[0])].concat(De(t)):t}(e,a,o,r),c=function(e,t){var n=Ye(t),r=0;if(n)for(var i=void 0,o=n(e[0]),a=1/0,s=void 0,c=1;c1?(e[1]-e[0])/2:1===e.length?e[0]-.5:0}(s),u[n.length-1]+=function(e){return e.length>1?(e[e.length-1]-e[e.length-2])/2:1===e.length?e[0]-.5:0}(s),"log"===r&&n[0]<=0&&(u[0]=Math.min(n[1]/10,1));var l=function(e,t,n,r){if(e.length>1){var i=Math.max(n,1);return Math.abs(r(e[i])-r(e[i-1]))}return 1===e.length?Math.abs(r(t[1])-r(t[0])):0}(s,u,c,Ye(Pe({},t,{domain:u})));return{domain0:u[0],domainN:u[u.length-1],distance:l}}function Ge(e,t){var n=function(e,t){var n,r=e[t],i=e["_"+t+"Value"],o=e[t+"Range"],a=e[t+"Distance"],s=void 0===a?0:a,c=e[t+"BaseValue"],u=e[t+"Type"],l=void 0===u?Ie:u,f=e[t+"NoFallBack"],d=e["get"+We(t)],h=void 0===d?function(e){return e[t]}:d,p=e["get"+We(t)+"0"],g=void 0===p?function(e){return e[t+"0"]}:p,y=e[t+"Domain"];return f||"undefined"===typeof r?("undefined"!==typeof c&&(y=function(e,t){var n=[].concat(e);return n[0]>t&&(n[0]=t),n[n.length-1]1?e.distance=Math.abs(t(n[1])-t(n[0])):e.distance=Math.abs(r[1]-r[0]),e}(n):function(e,t){var n=e._allData,r=e._adjustWhat,i=void 0===r?[]:r,o=t.domain.length,a=t.domain,s=a[0],c=a[o-1],u=t.distance;return n.forEach((function(e,n){if(-1!==i.indexOf(n)&&e&&e.length){var r=$e(e,t),o=r.domain0,a=r.domainN,l=r.distance;s=Math.min(s,o),c=Math.max(c,a),u=Math.max(u,l)}})),t.domain=[s].concat(De(a.slice(1,-1)),[c]),t.distance=u,t}(e,n)}function Xe(e,t){return Ye(Ge(e,t))}function Ke(e,t){return t(e.data?e.data:e)}function Ze(e){return"undefined"!==typeof e}function Je(e,t){var n=Ge(e,t);if(n){var r=Ye(n);return function(e){return r(Ke(e,n.accessor))}}return null}function Qe(e,t){var n=Ge(e,t);if(n){var r=n.domain,i=n.baseValue,o=void 0===i?r[0]:i,a=Ye(n);return function(e){var t=Ke(e,n.accessor0);return a(Ze(t)?t:o)}}return null}function et(e,t){var n=Ge(e,t);return n?(n.isValue||void 0!==e["_"+t+"Value"]||Object(je.b)("[React-vis] Cannot use data defined "+t+" for this series type. Using fallback value instead."),e["_"+t+"Value"]||n.range[0]):null}function tt(e){var t;return Re(t={},"_"+e+"Value",i.a.any),Re(t,e+"Domain",i.a.array),Re(t,"get"+We(e),i.a.func),Re(t,"get"+We(e)+"0",i.a.func),Re(t,e+"Range",i.a.array),Re(t,e+"Type",i.a.oneOf(Object.keys(Ue))),Re(t,e+"Distance",i.a.number),Re(t,e+"BaseValue",i.a.any),t}function nt(e,t){var n={};return Object.keys(e).forEach((function(r){t.find((function(e){var t=0===r.indexOf(e),n=0===r.indexOf("_"+e),i=0===r.indexOf("get"+We(e));return t||n||i}))&&(n[r]=e[r])})),n}function rt(e,t,n){var r={};return n.forEach((function(n){e["get"+We(n)]||(r["get"+We(n)]=function(e){return e[n]}),e["get"+We(n)+"0"]||(r["get"+We(n)+"0"]=function(e){return e[n+"0"]}),e[n+"Domain"]||(r[n+"Domain"]=Ve(t,e["get"+We(n)]||r["get"+We(n)],e["get"+We(n)+"0"]||r["get"+We(n)+"0"],e[n+"Type"]),e[n+"Padding"]&&(r[n+"Domain"]=function(e,t){if(!e)return e;if(isNaN(parseFloat(e[0]))||isNaN(parseFloat(e[1])))return e;var n=Ne(e,2),r=n[0],i=n[1],o=.01*t*(i-r);return[r-o,i+o]}(r[n+"Domain"],e[n+"Padding"])))})),r}function it(e){function t(t){return void 0===t?e:t}function n(){return t}return t.domain=n,t.range=n,t.unknown=n,t.copy=n,t}function ot(e){return e?Object(Te.f)(e).l>.57?"#222":"#fff":null}function at(e,t){var n=He.reduce((function(t,n){var r=e[n+"Domain"],i=e[n+"Range"],o=e[n+"Type"];return r&&i&&o?Pe({},t,Re({},n,Ue[o]().domain(r).range(i))):t}),{});return t.map((function(e){return He.reduce((function(t,r){if(e.props&&void 0!==e.props[r]){var i=e.props[r],o=n[r],a=o?o(i):i;return Pe({},t,Re({},"_"+r+"Value",a))}return t}),{})}))}var st=["Padding"].map((function(e){return new RegExp(e+"$","i")}));function ct(e){return Object.keys(e).reduce((function(t,n){return st.every((function(e){return!n.match(e)}))||(t[n]=e[n]),t}),{})}var ut=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return!!e&&e.some((function(e){return e.radius&&e.angle}))}(e)?e.map((function(e){return _t({},e,{x:e.radius*Math.cos(e.angle),y:e.radius*Math.sin(e.angle)})})):e}(c);if(!t||!d||!d.length||n&&!f)return e.push(d),e;var h=t+"0",p="y"===t?"x":"y";return e.push(d.map((function(e,n){var i,o;r[l]||(r[l]={}),r[l][a]||(r[l][a]={});var s,c=r[l][a][e[p]];if(!c)return r[l][a][e[p]]=(kt(s={},h,e[h]),kt(s,t,e[t]),s),_t({},e);var u=_t({},e,(kt(i={},h,c[t]),kt(i,t,c[t]+e[t]-(e[h]||0)),i));return r[l][a][e[p]]=(kt(o={},h,u[h]),kt(o,t,u[t]),o),u}))),e}),[])}function Ct(e){var t=[],n=function(e){var t={};return e.filter(Ot).forEach((function(e){var n=e.type.displayName,r=e.props.cluster;t[n]||(t[n]={sameTypeTotal:0,sameTypeIndex:0,clusters:new Set}),t[n].clusters.add(r),t[n].sameTypeTotal++})),t}(e),r=0;return e.forEach((function(e){var i=void 0;if(Ot(e)){var o=n[e.type.displayName];i=_t({},o,{seriesIndex:r,_colorValue:yt[r%yt.length],_opacityValue:1}),o.sameTypeIndex++,r++,e.props.cluster&&(i.cluster=e.props.cluster,i.clusters=Array.from(o.clusters),i.sameTypeTotal=i.clusters.length,i.sameTypeIndex=i.clusters.indexOf(e.props.cluster))}t.push(i)})),t}function Tt(e){return e.reduce((function(e,t){return Math.max(t.radius,e)}),0)}var jt=["xRange","xDomain","x","yRange","yDomain","y","colorRange","colorDomain","color","opacityRange","opacityDomain","opacity","strokeRange","strokeDomain","stroke","fillRange","fillDomain","fill","width","height","marginLeft","marginTop","marginRight","marginBottom","data","angleDomain","angleRange","angle","radiusDomain","radiusRange","radius","innerRadiusDomain","innerRadiusRange","innerRadius"];function At(e){var t=e._stackBy,n=e.valuePosAttr,r=e.cluster,i=e.sameTypeTotal,o=void 0===i?1:i,a=e.sameTypeIndex,s=void 0===a?0:a;return t!==n||r||(o=1,s=0),{sameTypeTotal:o,sameTypeIndex:s}}var Mt=n(288),Pt=function(){function e(e,t){for(var n=0;n300?10:5:20}function un(e,t,n){return n||(e.ticks?e.ticks(t):e.domain())}var ln=Object.assign||function(e){for(var t=1;tf[1])?e:e.concat([s.a.createElement("circle",ln({cx:0,cy:0,r:r},{key:n,className:"rv-xy-plot__circular-grid-lines__line",style:d}))])}),[]))}}]),t}(a.PureComponent);gn.displayName="CircularGridLines",gn.propTypes={centerX:i.a.number,centerY:i.a.number,width:i.a.number,height:i.a.number,top:i.a.number,left:i.a.number,rRange:i.a.arrayOf(i.a.number),style:i.a.object,tickValues:i.a.arrayOf(i.a.number),tickTotal:i.a.number,animation:m,marginTop:i.a.number,marginBottom:i.a.number,marginLeft:i.a.number,marginRight:i.a.number,innerWidth:i.a.number,innerHeight:i.a.number},gn.defaultProps={centerX:0,centerY:0},gn.requiresSVG=!0;var yn=n(204),mn=n(379),bn=Object.assign||function(e){for(var t=1;ta/2?"left":"right":d);return s.a.createElement("div",{className:"rv-crosshair "+n,style:{left:h+"px",top:p+"px"}},s.a.createElement("div",{className:"rv-crosshair__line",style:kn({height:c+"px"},u.line)}),s.a.createElement("div",{className:g},t||s.a.createElement("div",{className:"rv-crosshair__inner__content",style:u.box},s.a.createElement("div",null,this._renderCrosshairTitle(),this._renderCrosshairItems()))))}}],[{key:"defaultProps",get:function(){return{titleFormat:Cn,itemsFormat:Tn,style:{line:{},title:{},box:{}}}}},{key:"propTypes",get:function(){return{className:i.a.string,values:i.a.arrayOf(i.a.oneOfType([i.a.number,i.a.string,i.a.object])),series:i.a.object,innerWidth:i.a.number,innerHeight:i.a.number,marginLeft:i.a.number,marginTop:i.a.number,orientation:i.a.oneOf(["left","right"]),itemsFormat:i.a.func,titleFormat:i.a.func,style:i.a.shape({line:i.a.object,title:i.a.object,box:i.a.object})}}}]),t}(a.PureComponent);An.displayName="Crosshair";var Mn=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:2,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:In;switch(e){case"diamond":return s.a.createElement("polygon",{style:n,points:"0 0 "+t/2+" "+t/2+" 0 "+t+" "+-t/2+" "+t/2+" 0 0"});case"star":var r=[].concat(Rn(new Array(5))).map((function(e,n){var r=n/5*Math.PI*2,i=r+Math.PI/10,o=r-Math.PI/10,a=t/2.61;return"\n "+Math.cos(o)*t+" "+Math.sin(o)*t+"\n "+Math.cos(i)*a+" "+Math.sin(i)*a+"\n "})).join(" ");return s.a.createElement("polygon",{points:r,x:"0",y:"0",height:t,width:t,style:n});case"square":return s.a.createElement("rect",{x:""+-t/2,y:""+-t/2,height:t,width:t,style:n});default:return s.a.createElement("circle",{cx:"0",cy:"0",r:t/2,style:n})}}var Bn=function(e){function t(){return Nn(this,t),Dn(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),Mn(t,[{key:"render",value:function(){var e=this,n=this.props,r=n.animation,i=n.className,o=n.customComponent,a=n.data,c=n.innerHeight,u=n.innerWidth,l=n.marginLeft,f=n.marginTop,d=n.style,h=n.size;if(!a||!u||!c)return null;if(r)return s.a.createElement(y,Pn({},this.props,{animatedProps:jt}),s.a.createElement(t,Pn({},this.props,{animation:!1})));var p=this._getAttributeFunctor("x"),g=this._getAttributeFunctor("y"),m=a.map((function(t,n){var r={x:p(t),y:g(t)},i=function(e){var t=e.customComponent,n=e.defaultType,r=e.positionInPixels,i=(e.positionFunctions,e.style),o=e.propsSize,a=t.size,s=Pn({},i,t.style||{}),c=t.customComponent;return c||"string"!==typeof n?c?"string"===typeof c?Ln(c||n,a,s):c(t,r,s):n(t,r,s):Ln(n,a||o,s)}({customComponent:t,positionInPixels:r,defaultType:o,positionFunctions:{x:p,y:g},style:d,propsSize:h});return s.a.createElement("g",{className:"rv-xy-plot__series--custom-svg",key:"rv-xy-plot__series--custom-svg-"+n,transform:"translate("+r.x+","+r.y+")",onMouseEnter:function(n){return e._valueMouseOverHandler(t,n)},onMouseLeave:function(n){return e._valueMouseOutHandler(t,n)}},i)}));return s.a.createElement("g",{className:"rv-xy-plot__series rv-xy-plot__series--custom-svg-wrapper "+i,transform:"translate("+l+","+f+")"},m)}}]),t}(gt);Bn.propTypes={animation:i.a.bool,className:i.a.string,customComponent:i.a.oneOfType([i.a.string,i.a.func]),data:i.a.arrayOf(i.a.shape({x:i.a.oneOfType([i.a.string,i.a.number]).isRequired,y:i.a.oneOfType([i.a.string,i.a.number]).isRequired})).isRequired,marginLeft:i.a.number,marginTop:i.a.number,style:i.a.object,size:i.a.number,onValueMouseOver:i.a.func,onValueMouseOut:i.a.func},Bn.defaultProps=Pn({},gt.defaultProps,{animation:!1,customComponent:"circle",style:{},size:2});var Fn=Object.assign||function(e){for(var t=1;te.y?Math.PI/2:3*Math.PI/2:Math.atan((t.y-e.y)/(t.x-e.x))}(r,i)+Math.PI/2;return l.map((function(e,t){var n=Fn({x1:0,y1:0,x2:a*Math.cos(f),y2:a*Math.sin(f)},c.ticks),r=Fn({x:a*Math.cos(f),y:a*Math.sin(f),textAnchor:"start"},c.text);return s.a.createElement("g",{key:t,transform:"translate("+e.x+", "+e.y+")",className:"rv-xy-plot__axis__tick"},s.a.createElement("line",Fn({},n,{className:"rv-xy-plot__axis__tick__line"})),s.a.createElement("text",Fn({},r,{className:"rv-xy-plot__axis__tick__text"}),o(e.text)))}))}var Un=Object.assign||function(e){for(var t=1;t1){var g=l-h,y=h+(lb*b+v*v&&(h=y+(1&d?1:-1)/2,d=m)}var x=h+"-"+d,w=i[x];w?w.push(u):(o.push(w=i[x]=[u]),w.x=(h+(1&d)/2)*t,w.y=d*n)}return o}function l(e){var t=0,n=0;return pr.map((function(r){var i=Math.sin(r)*e,o=-Math.cos(r)*e,a=i-t,s=o-n;return t=i,n=o,[a,s]}))}return u.hexagon=function(t){return"m"+l(null==t?e:+t).join("l")+"z"},u.centers=function(){for(var s=[],c=Math.round(i/n),u=Math.round(r/t),l=c*n;lu),h=a&&(tf);return r&&i?d||h:r?d:!i||h}},{key:"_convertAreaToCoordinates",value:function(e){var t=this.props,n=t.enableX,r=t.enableY,i=t.marginLeft,o=t.marginTop,a=Xe(this.props,"x"),s=Xe(this.props,"y");return n&&r?{bottom:s.invert(e.bottom),left:a.invert(e.left-i),right:a.invert(e.right-i),top:s.invert(e.top)}:r?{bottom:s.invert(e.bottom-o),top:s.invert(e.top-o)}:n?{left:a.invert(e.left-i),right:a.invert(e.right-i)}:{}}},{key:"startBrushing",value:function(e){var t=this,n=this.props,r=n.onBrushStart,i=n.onDragStart,o=n.drag,a=this.state.dragArea,s=Cr(e.nativeEvent),c=s.xLoc,u=s.yLoc,l=function(e,n){var r={bottom:u,left:c,right:c,top:u};t.setState({dragging:e,brushArea:a&&!n?a:r,brushing:!e,startLocX:c,startLocY:u})},f=this._clickedOutsideDrag(c,u);if(o&&!a||!o||f)return l(!1,f),void(r&&r(e));o&&a&&(l(!0,f),i&&i(e))}},{key:"stopBrushing",value:function(e){var t=this.state,n=t.brushing,r=t.dragging,i=t.brushArea;if(n||r){var o=this.props,a=o.onBrushEnd,s=o.onDragEnd,c=o.drag,u=Math.abs(i.right-i.left)<5,l=Math.abs(i.top-i.bottom)<5||u;this.setState({brushing:!1,dragging:!1,brushArea:c?i:{top:0,right:0,bottom:0,left:0},startLocX:0,startLocY:0,dragArea:c&&!l&&i}),n&&a&&a(l?null:this._convertAreaToCoordinates(i)),c&&s&&s(l?null:this._convertAreaToCoordinates(i))}}},{key:"onBrush",value:function(e){var t=this.props,n=t.onBrush,r=t.onDrag,i=t.drag,o=this.state,a=o.brushing,s=o.dragging,c=Cr(e.nativeEvent),u=c.xLoc,l=c.yLoc;if(a){var f=this._getDrawArea(u,l);this.setState({brushArea:f}),n&&n(this._convertAreaToCoordinates(f))}if(i&&s){var d=this._getDragArea(u,l);this.setState({brushArea:d}),r&&r(this._convertAreaToCoordinates(d))}}},{key:"render",value:function(){var e=this,t=this.props,n=t.color,r=t.className,i=t.highlightHeight,o=t.highlightWidth,a=t.highlightX,c=t.highlightY,u=t.innerWidth,l=t.innerHeight,f=t.marginLeft,d=t.marginRight,h=t.marginTop,p=t.marginBottom,g=t.opacity,y=this.state.brushArea,m=y.left,b=y.right,v=y.top,x=y.bottom,w=0;a&&(w=Xe(this.props,"x")(a));var _=0;c&&(_=Xe(this.props,"y")(c));var k=o||f+d+u,O=i||h+p+l;return s.a.createElement("g",{transform:"translate("+w+", "+_+")",className:r+" rv-highlight-container"},s.a.createElement("rect",{className:"rv-mouse-target",fill:"black",opacity:"0",x:"0",y:"0",width:Math.max(k,0),height:Math.max(O,0),onMouseDown:function(t){return e.startBrushing(t)},onMouseMove:function(t){return e.onBrush(t)},onMouseUp:function(t){return e.stopBrushing(t)},onMouseLeave:function(t){return e.stopBrushing(t)},onTouchEnd:function(t){t.preventDefault(),e.stopBrushing(t)},onTouchCancel:function(t){t.preventDefault(),e.stopBrushing(t)},onContextMenu:function(e){return e.preventDefault()},onContextMenuCapture:function(e){return e.preventDefault()}}),s.a.createElement("rect",{className:"rv-highlight",pointerEvents:"none",opacity:g,fill:n,x:m,y:v,width:Math.min(Math.max(0,b-m),k),height:Math.min(Math.max(0,x-v),O)}))}}]),t}(gt);Tr.displayName="HighlightOverlay",Tr.defaultProps={color:"rgb(77, 182, 172)",className:"",enableX:!0,enableY:!0,opacity:.3},Tr.propTypes=kr({},gt.propTypes,{enableX:i.a.bool,enableY:i.a.bool,highlightHeight:i.a.number,highlightWidth:i.a.number,highlightX:i.a.oneOfType([i.a.string,i.a.number]),highlightY:i.a.oneOfType([i.a.string,i.a.number]),onBrushStart:i.a.func,onDragStart:i.a.func,onBrush:i.a.func,onDrag:i.a.func,onBrushEnd:i.a.func,onDragEnd:i.a.func});var jr=Tr,Ar=Object.assign||function(e){for(var t=1;tr/2?Dr.LEFT:Dr.RIGHT),c===Dr.AUTO&&(u.vertical=t>i/2?Dr.TOP:Dr.BOTTOM),u}},{key:"_getAlignClassNames",value:function(e){var t=this.props.orientation;return(t?"rv-hint--orientation-"+t:"")+" rv-hint--horizontalAlign-"+e.horizontal+"\n rv-hint--verticalAlign-"+e.vertical}},{key:"_getAlignStyle",value:function(e,t,n){return Ar({},this._getXCSS(e.horizontal,t),this._getYCSS(e.vertical,n))}},{key:"_getCSSBottom",value:function(e){if(void 0===e||null===e)return{bottom:0};var t=this.props,n=t.innerHeight;return{bottom:t.marginBottom+n-e}}},{key:"_getCSSLeft",value:function(e){return void 0===e||null===e?{left:0}:{left:this.props.marginLeft+e}}},{key:"_getCSSRight",value:function(e){if(void 0===e||null===e)return{right:0};var t=this.props,n=t.innerWidth;return{right:t.marginRight+n-e}}},{key:"_getCSSTop",value:function(e){return void 0===e||null===e?{top:0}:{top:this.props.marginTop+e}}},{key:"_getPositionInfo",value:function(){var e=this.props,t=e.value,n=e.getAlignStyle,r=Je(this.props,"x")(t),i=Je(this.props,"y")(t),o=this._getAlign(r,i);return{position:n?n(o,r,i):this._getAlignStyle(o,r,i),positionClassName:this._getAlignClassNames(o)}}},{key:"_getXCSS",value:function(e,t){switch(e){case Dr.LEFT_EDGE:return this._getCSSLeft(null);case Dr.RIGHT_EDGE:return this._getCSSRight(null);case Dr.LEFT:return this._getCSSRight(t);default:return this._getCSSLeft(t)}}},{key:"_getYCSS",value:function(e,t){switch(e){case Dr.TOP_EDGE:return this._getCSSTop(null);case Dr.BOTTOM_EDGE:return this._getCSSBottom(null);case Dr.BOTTOM:return this._getCSSTop(t);default:return this._getCSSBottom(t)}}},{key:"_mapOrientationToAlign",value:function(e){switch(e){case Rr.BOTTOM_LEFT:return{horizontal:Dr.LEFT,vertical:Dr.BOTTOM};case Rr.BOTTOM_RIGHT:return{horizontal:Dr.RIGHT,vertical:Dr.BOTTOM};case Rr.TOP_LEFT:return{horizontal:Dr.LEFT,vertical:Dr.TOP};case Rr.TOP_RIGHT:return{horizontal:Dr.RIGHT,vertical:Dr.TOP}}}},{key:"render",value:function(){var e=this.props,t=e.value,n=e.format,r=e.children,i=e.style,o=e.className,a=this._getPositionInfo(),c=a.position,u=a.positionClassName;return s.a.createElement("div",{className:"rv-hint "+u+" "+o,style:Ar({},i,c,{position:"absolute"})},r||s.a.createElement("div",{className:"rv-hint__content",style:i.content},n(t).map((function(e,t){return s.a.createElement("div",{key:"rv-hint"+t,style:i.row},s.a.createElement("span",{className:"rv-hint__title",style:i.title},e.title),": ",s.a.createElement("span",{className:"rv-hint__value",style:i.value},e.value))}))))}}],[{key:"defaultProps",get:function(){return{format:Ir,align:{horizontal:Dr.AUTO,vertical:Dr.AUTO},style:{}}}},{key:"propTypes",get:function(){return{marginTop:i.a.number,marginLeft:i.a.number,innerWidth:i.a.number,innerHeight:i.a.number,scales:i.a.object,value:i.a.object,format:i.a.func,style:i.a.object,className:i.a.string,align:i.a.shape({horizontal:i.a.oneOf([Dr.AUTO,Dr.LEFT,Dr.RIGHT,Dr.LEFT_EDGE,Dr.RIGHT_EDGE]),vertical:i.a.oneOf([Dr.AUTO,Dr.BOTTOM,Dr.TOP,Dr.BOTTOM_EDGE,Dr.TOP_EDGE])}),getAlignStyle:i.a.func,orientation:i.a.oneOf([Rr.BOTTOM_LEFT,Rr.BOTTOM_RIGHT,Rr.TOP_LEFT,Rr.TOP_RIGHT])}}}]),t}(a.PureComponent);Lr.displayName="Hint",Lr.ORIENTATION=Rr,Lr.ALIGN=Dr;var Br=Object.assign||function(e){for(var t=1;t-1&&nw;if(!k&&!O)return null;var E=da({opacity:i?i(t):1,stroke:a&&a(t),strokeWidth:c||1},u),S=r/2,C={x1:m+y,y1:b,x2:v,y2:b,style:E},T={x1:m-y,y1:b,x2:x,y2:b,style:E},j={x1:v,y1:b-S,x2:v,y2:b+S,style:E},A={x1:x,y1:b-S,x2:x,y2:b+S,style:E},M={x1:m,y1:b-y,x2:m,y2:w,style:E},P={x1:m,y1:b+y,x2:m,y2:_,style:E},N={x1:m-S,y1:w,x2:m+S,y2:w,style:E},D={x1:m-S,y1:_,x2:m+S,y2:_,style:E};return s.a.createElement("g",{className:"mark-whiskers",key:n,onClick:function(e){return l(t,e)},onContextMenu:function(e){return h(t,e)},onMouseOver:function(e){return d(t,e)},onMouseOut:function(e){return f(t,e)}},k?s.a.createElement("g",{className:"x-whiskers"},s.a.createElement("line",C),s.a.createElement("line",T),s.a.createElement("line",j),s.a.createElement("line",A)):null,O?s.a.createElement("g",{className:"y-whiskers"},s.a.createElement("line",M),s.a.createElement("line",P),s.a.createElement("line",N),s.a.createElement("line",D)):null)}}(f)))}}]),t}(gt);ga.displayName="WhiskerSeries",ga.propTypes=da({},gt.propTypes,{strokeWidth:i.a.number}),ga.defaultProps=da({},gt.defaultProps,{crossBarWidth:6,size:0,strokeWidth:1});var ya=n(388),ma=n.n(ya),ba=Object.assign||function(e){for(var t=1;t30&&clearInterval(o),i+=1):clearInterval(o)}),1)}(n,g,y,m):Ca(n,g,y,m)}}},{key:"render",value:function(){var e=this,t=this.props,n=t.innerHeight,r=t.innerWidth,i=t.marginBottom,o=t.marginLeft,a=t.marginRight,c=t.marginTop,u=t.pixelRatio,l=n+c+i,f=r+o+a;return s.a.createElement("div",{style:{left:0,top:0},className:"rv-xy-canvas"},s.a.createElement("canvas",{className:"rv-xy-canvas-element",height:l*u,width:f*u,style:{height:l+"px",width:f+"px"},ref:function(t){return e.canvas=t}}),this.props.children)}}],[{key:"defaultProps",get:function(){return{pixelRatio:window&&window.devicePixelRatio||1}}}]),t}(a.Component);Ta.displayName="CanvasWrapper",Ta.propTypes={marginBottom:i.a.number.isRequired,marginLeft:i.a.number.isRequired,marginRight:i.a.number.isRequired,marginTop:i.a.number.isRequired,innerHeight:i.a.number.isRequired,innerWidth:i.a.number.isRequired,pixelRatio:i.a.number.isRequired};var ja=Ta,Aa=function(){function e(e,t){for(var n=0;n-1,w=x?"rv-xy-plot__axis--vertical":"rv-xy-plot__axis--horizontal",_=l,k=b;if(d){var O=Xe(r,i);x?_=O(0):k=f+O(0)}return s.a.createElement("g",{transform:"translate("+_+","+k+")",className:"rv-xy-plot__axis "+w+" "+o,style:g},!c&&s.a.createElement(Ya,{height:a,width:v,orientation:h,style:hs({},g,g.line)}),!u&&s.a.createElement(ns,hs({},r,{style:hs({},g,g.ticks)})),m?s.a.createElement(ds,{position:p,title:m,height:a,width:v,style:hs({},g,g.title),orientation:h}):null)}}]),t}(a.PureComponent);Os.displayName="Axis",Os.propTypes=_s,Os.defaultProps=ks,Os.requiresSVG=!0;var Es=Os,Ss=Object.assign||function(e){for(var t=1;ts.max)&&(l=!1),{x:o,y:a}})),d={animation:t,className:l?"rv-parallel-coordinates-chart-line":"rv-parallel-coordinates-chart-line rv-parallel-coordinates-chart-line-unselected",key:o+"-polygon",data:f,color:e.color||r[o%r.length],style:rc({},a.lines,e.style||{})};return l||(d.style=rc({},d.style,a.deselectedLineStyle)),c?s.a.createElement(uo,d):s.a.createElement(Ki,d)}))}({animation:r,brushFilters:t,colorRange:c,domains:l,data:u,showMarks:y,style:m}),_=s.a.createElement(Hi,{animation:!0,key:o,className:"rv-parallel-coordinates-chart-label",data:cc({domains:l,style:m.labels})}),k=va(this.props,_a),O=k.marginLeft,E=k.marginRight;return s.a.createElement(Ia,{height:f,width:v,margin:h,dontCheckIfEmpty:!0,className:o+" "+ac,onMouseLeave:p,onMouseEnter:g,xType:"ordinal",yDomain:[0,1]},a,x.concat(w).concat(_),i&&l.map((function(n){var r=function(r){var i,o,a;e.setState({brushFilters:rc({},t,(i={},o=n.name,a=r?{min:r.bottom,max:r.top}:null,o in i?Object.defineProperty(i,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):i[o]=a,i))})};return s.a.createElement(jr,{key:n.name,drag:!0,highlightX:n.name,onBrushEnd:r,onDragEnd:r,highlightWidth:(v-O-E)/l.length,enableX:!1})})))}}]),t}(a.Component);uc.displayName="ParallelCoordinates",uc.propTypes={animation:m,brushing:i.a.bool,className:i.a.string,colorType:i.a.string,colorRange:i.a.arrayOf(i.a.string),data:i.a.arrayOf(i.a.object).isRequired,domains:i.a.arrayOf(i.a.shape({name:i.a.string.isRequired,domain:i.a.arrayOf(i.a.number).isRequired,tickFormat:i.a.func})).isRequired,height:i.a.number.isRequired,margin:wa,style:i.a.shape({axes:i.a.object,labels:i.a.object,lines:i.a.object}),showMarks:i.a.bool,tickFormat:i.a.func,width:i.a.number.isRequired},uc.defaultProps={className:"",colorType:"category",colorRange:yt,style:{axes:{line:{},ticks:{},text:{}},labels:{fontSize:10,textAnchor:"middle"},lines:{strokeWidth:1,strokeOpacity:1},deselectedLineStyle:{strokeOpacity:.1}},tickFormat:sc};var lc=Object.assign||function(e){for(var t=1;t0?Math.abs(e-.5)<=t&&(e=.5):e<0&&Math.abs(e+.5)<=t&&(e=-.5),e}function pc(e){var t=e.domains,n=e.startingAngle,r=e.style;return t.map((function(e,i){var o=e.name,a=i/t.length*Math.PI*2+n;return{x:1.2*Math.cos(a),y:1.2*Math.sin(a),label:o,style:r}}))}function gc(e){var t=e.animation,n=e.className,r=e.children,i=e.colorRange,o=e.data,a=e.domains,c=e.height,u=e.hideInnerMostValues,l=e.margin,f=e.onMouseLeave,d=e.onMouseEnter,h=e.startingAngle,p=e.style,g=e.tickFormat,y=e.width,m=e.renderAxesOverPolygons,b=e.onValueMouseOver,v=e.onValueMouseOut,x=e.onSeriesMouseOver,w=e.onSeriesMouseOut,_=function(e){var t=e.animation,n=e.domains,r=e.startingAngle,i=e.style,o=e.tickFormat,a=e.hideInnerMostValues;return n.map((function(e,c){var u=c/n.length*Math.PI*2+r,l=e.domain;return s.a.createElement(Gn,{animation:t,key:c+"-axis",axisStart:{x:0,y:0},axisEnd:{x:hc(Math.cos(u)),y:hc(Math.sin(u))},axisDomain:l,numberOfTicks:5,tickValue:function(t){return a&&t===l[0]?"":e.tickFormat?e.tickFormat(t):o(t)},style:i.axes})}))}({domains:a,animation:t,hideInnerMostValues:u,startingAngle:h,style:p,tickFormat:g}),k=function(e){var t=e.animation,n=e.colorRange,r=e.domains,i=e.data,o=e.style,a=e.startingAngle,c=e.onSeriesMouseOver,u=e.onSeriesMouseOut,l=r.reduce((function(e,t){var n=t.domain;return e[t.name]=W().domain(n).range([0,1]),e}),{});return i.map((function(e,i){var f=r.map((function(t,n){var i=t.name,o=t.getValue,s=o?o(e):e[i],c=n/r.length*Math.PI*2+a,u=Math.max(l[i](s),0);return{x:u*Math.cos(c),y:u*Math.sin(c),name:e.name}}));return s.a.createElement(Do,{animation:t,className:"rv-radar-chart-polygon",key:i+"-polygon",data:f,style:lc({stroke:e.color||e.stroke||n[i%n.length],fill:e.color||e.fill||n[i%n.length]},o.polygons),onSeriesMouseOver:c,onSeriesMouseOut:u})}))}({animation:t,colorRange:i,domains:a,data:o,startingAngle:h,style:p,onSeriesMouseOver:x,onSeriesMouseOut:w}),O=function(e){var t=e.animation,n=e.domains,r=e.data,i=e.startingAngle,o=e.style,a=e.onValueMouseOver,c=e.onValueMouseOut;if(a){var u=n.reduce((function(e,t){var n=t.domain;return e[t.name]=W().domain(n).range([0,1]),e}),{});return r.map((function(e,r){var l=n.map((function(t,r){var o=t.name,a=t.getValue,s=a?a(e):e[o],c=r/n.length*Math.PI*2+i,l=Math.max(u[o](s),0);return{x:l*Math.cos(c),y:l*Math.sin(c),domain:o,value:s,dataName:e.name}}));return s.a.createElement(no,{animation:t,className:"rv-radar-chart-polygonPoint",key:r+"-polygonPoint",data:l,size:10,style:lc({},o.polygons,{fill:"transparent",stroke:"transparent"}),onValueMouseOver:a,onValueMouseOut:c})}))}}({animation:t,colorRange:i,domains:a,data:o,startingAngle:h,style:p,onValueMouseOver:b,onValueMouseOut:v}),E=s.a.createElement(Hi,{animation:t,key:n,className:"rv-radar-chart-label",data:pc({domains:a,style:p.labels,startingAngle:h})});return s.a.createElement(Ia,{height:c,width:y,margin:l,dontCheckIfEmpty:!0,className:n+" "+fc,onMouseLeave:f,onMouseEnter:d,xDomain:[-1,1],yDomain:[-1,1]},r,!m&&_.concat(k).concat(E).concat(O),m&&k.concat(E).concat(_).concat(O))}gc.displayName="RadarChart",gc.propTypes={animation:m,className:i.a.string,colorType:i.a.string,colorRange:i.a.arrayOf(i.a.string),data:i.a.arrayOf(i.a.object).isRequired,domains:i.a.arrayOf(i.a.shape({name:i.a.string.isRequired,domain:i.a.arrayOf(i.a.number).isRequired,tickFormat:i.a.func})).isRequired,height:i.a.number.isRequired,hideInnerMostValues:i.a.bool,margin:wa,startingAngle:i.a.number,style:i.a.shape({axes:i.a.object,labels:i.a.object,polygons:i.a.object}),tickFormat:i.a.func,width:i.a.number.isRequired,renderAxesOverPolygons:i.a.bool,onValueMouseOver:i.a.func,onValueMouseOut:i.a.func,onSeriesMouseOver:i.a.func,onSeriesMouseOut:i.a.func},gc.defaultProps={className:"",colorType:"category",colorRange:yt,hideInnerMostValues:!0,startingAngle:Math.PI/2,style:{axes:{line:{},ticks:{},text:{}},labels:{fontSize:10,textAnchor:"middle"},polygons:{strokeWidth:.5,strokeOpacity:1,fillOpacity:.1}},tickFormat:dc,renderAxesOverPolygons:!1};var yc=n(380),mc=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:1.1,r=t.getLabel,i=t.getSubLabel;return e.reduce((function(e,t){var o=t.angle,a=t.angle0,s=t.radius,c=(o+a)/2*-1+Math.PI/2,u=[];return r(t)&&u.push({angle:c,radius:s*n,label:r(t)}),i(t)&&u.push({angle:c,radius:s*n,label:i(t),style:{fontSize:10},yOffset:12}),e.concat(u)}),[])}(k,{getLabel:c,getSubLabel:u},p);return s.a.createElement(Ia,{height:l,width:_,margin:mc({},y,C),className:n+" rv-radial-chart",onMouseLeave:m,onMouseEnter:b,xDomain:[-O,O],yDomain:[-O,O]},s.a.createElement(Ft,mc({},E,{getAngle:function(e){return e.angle}})),x&&!h&&s.a.createElement(Hi,{data:T,style:g}),r,x&&h&&s.a.createElement(Hi,{data:T,style:g}))}bc.displayName="RadialChart",bc.propTypes={animation:m,className:i.a.string,colorType:i.a.string,data:i.a.arrayOf(i.a.shape({angle:i.a.number,className:i.a.string,label:i.a.string,radius:i.a.number,style:i.a.object})).isRequired,getAngle:i.a.func,getAngle0:i.a.func,padAngle:i.a.oneOfType([i.a.func,i.a.number]),getRadius:i.a.func,getRadius0:i.a.func,getLabel:i.a.func,height:i.a.number.isRequired,labelsAboveChildren:i.a.bool,labelsStyle:i.a.object,margin:wa,onValueClick:i.a.func,onValueMouseOver:i.a.func,onValueMouseOut:i.a.func,showLabels:i.a.bool,style:i.a.object,subLabel:i.a.func,width:i.a.number.isRequired},bc.defaultProps={className:"",colorType:"category",colorRange:yt,padAngle:0,getAngle:function(e){return e.angle},getAngle0:function(e){return e.angle0},getRadius:function(e){return e.radius},getRadius0:function(e){return e.radius0},getLabel:function(e){return e.label},getSubLabel:function(e){return e.subLabel}};function vc(e){return e.target.depth}function xc(e,t){return e.sourceLinks.length?e.depth:t-1}function wc(e){return function(){return e}}function _c(e,t){return Oc(e.source,t.source)||e.index-t.index}function kc(e,t){return Oc(e.target,t.target)||e.index-t.index}function Oc(e,t){return e.y0-t.y0}function Ec(e){return e.value}function Sc(e){return(e.y0+e.y1)/2}function Cc(e){return Sc(e.source)*e.value}function Tc(e){return Sc(e.target)*e.value}function jc(e){return e.index}function Ac(e){return e.nodes}function Mc(e){return e.links}function Pc(e,t){var n=e.get(t);if(!n)throw new Error("missing: "+t);return n}var Nc=n(173);function Dc(e){return[e.source.x1,e.y0]}function Rc(e){return[e.target.x0,e.y1]}var Ic=Object.assign||function(e){for(var t=1;t0;--a)c(i*=.99),u(),s(i),u();function s(e){n.forEach((function(t){t.forEach((function(t){if(t.targetLinks.length){var n=(Object(b.v)(t.targetLinks,Cc)/Object(b.v)(t.targetLinks,Ec)-Sc(t))*e;t.y0+=n,t.y1+=n}}))}))}function c(e){n.slice().reverse().forEach((function(t){t.forEach((function(t){if(t.sourceLinks.length){var n=(Object(b.v)(t.sourceLinks,Tc)/Object(b.v)(t.sourceLinks,Ec)-Sc(t))*e;t.y0+=n,t.y1+=n}}))}))}function u(){n.forEach((function(e){var n,i,a,s=t,c=e.length;for(e.sort(Oc),a=0;a0&&(n.y0+=i,n.y1+=i),s=n.y1+o;if((i=s-o-r)>0)for(s=n.y0-=i,n.y1-=i,a=c-2;a>=0;--a)(i=(n=e[a]).y1+o-s)>0&&(n.y0-=i,n.y1-=i),s=n.y0}))}}function y(e){e.nodes.forEach((function(e){e.sourceLinks.sort(kc),e.targetLinks.sort(_c)})),e.nodes.forEach((function(e){var t=e.y0,n=t;e.sourceLinks.forEach((function(e){e.y0=t+e.width/2,t+=e.width})),e.targetLinks.forEach((function(e){e.y1=n+e.width/2,n+=e.width}))}))}return f.update=function(e){return y(e),e},f.nodeId=function(e){return arguments.length?(a="function"===typeof e?e:wc(e),f):a},f.nodeAlign=function(e){return arguments.length?(s="function"===typeof e?e:wc(e),f):s},f.nodeWidth=function(e){return arguments.length?(i=+e,f):i},f.nodePadding=function(e){return arguments.length?(o=+e,f):o},f.nodes=function(e){return arguments.length?(c="function"===typeof e?e:wc(e),f):c},f.links=function(e){return arguments.length?(u="function"===typeof e?e:wc(e),f):u},f.size=function(i){return arguments.length?(e=t=0,n=+i[0],r=+i[1],f):[n-e,r-t]},f.extent=function(i){return arguments.length?(e=+i[0][0],n=+i[1][0],t=+i[0][1],r=+i[1][1],f):[[e,t],[n,r]]},f.iterations=function(e){return arguments.length?(l=+e,f):l},f}().extent([[A,M],[S-P,a-N-M]]).nodeWidth(y).nodePadding(p).nodes(C).links(T).nodeAlign(Wc[t]).iterations(l);D(C);var R=D.nodeWidth(),I=Object(Nc.a)().source(Dc).target(Rc);return s.a.createElement(Ia,zc({},e,{yType:"literal",className:"rv-sankey "+i}),T.map((function(e,t){return s.a.createElement(Fc,{style:E.links,data:I(e),opacity:e.opacity||d,color:e.color,onLinkClick:_,onLinkMouseOver:k,onLinkMouseOut:O,strokeWidth:Math.max(e.width,1),node:e,nWidth:R,key:"link-"+t})})),s.a.createElement(ta,{animation:n,className:i+" rv-sankey__node",data:C.map((function(e){return zc({},e,{y:e.y1-M,y0:e.y0-M,x:e.x1,x0:e.x0,color:e.color||yt[0],sourceLinks:null,targetLinks:null})})),style:E.rects,onValueClick:m,onValueMouseOver:x,onValueMouseOut:w,colorType:"literal"}),!c&&s.a.createElement(Hi,{animation:n,className:i,rotation:u,labelAnchorY:"text-before-edge",data:C.map((function(e,t){return zc({x:e.x0+(e.x090?"end":"start"},e.labelStyle),rotation:a?s>90?s+180:90===s?90:s:null})}))}(p,{getAngle:t,getAngle0:n,getLabel:l,getRadius0:function(e){return e.radius0}});return s.a.createElement(Ia,{height:c,hasTreeStructure:!0,width:f,className:"rv-sunburst "+i,margin:y,xDomain:[-g,g],yDomain:[-g,g]},s.a.createElement(Ft,Gc({colorType:h},e,{animation:r,radiusDomain:[0,g],data:r?p.map((function(e,t){return Gc({},e,{parent:null,children:null,index:t})})):p,_data:r?p:null,arcClassName:"rv-sunburst__series--radial__arc"},Xc.reduce((function(t,n){var i,o=e[n];return t[n]=r?(i=o,function(e,t){return i?i(p[e.index],t):Kc}):o,t}),{}))),m.length>0&&s.a.createElement(Hi,{data:m,getLabel:l}),o)}Zc.displayName="Sunburst",Zc.propTypes={animation:m,getAngle:i.a.func,getAngle0:i.a.func,className:i.a.string,colorType:i.a.string,data:i.a.object.isRequired,height:i.a.number.isRequired,hideRootNode:i.a.bool,getLabel:i.a.func,onValueClick:i.a.func,onValueMouseOver:i.a.func,onValueMouseOut:i.a.func,getSize:i.a.func,width:i.a.number.isRequired,padAngle:i.a.oneOfType([i.a.func,i.a.number])},Zc.defaultProps={getAngle:function(e){return e.angle},getAngle0:function(e){return e.angle0},className:"",colorType:"literal",getColor:function(e){return e.color},hideRootNode:!1,getLabel:function(e){return e.label},getSize:function(e){return e.size},padAngle:0};var Jc=n(121),Qc=n(285),eu=n(98),tu=n(79),nu=n(284),ru=n(283),iu=n(280),ou=n(282),au=Object.assign||function(e){for(var t=1;t-1&&Au.splice(t,1)}(e),0===Au.length&&(Cu.a.clearTimeout(Mu),Cu.a.removeEventListener("resize",Pu))}}function Ru(e,t,n){var r=function(r){function i(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i);var t=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,e));return t._onResize=function(){var e=Object(je.a)(t.container),n=e.offsetHeight,r=e.offsetWidth,i=t.state.height===n?{}:{height:n},o=t.state.width===r?{}:{width:r};t.setState(Tu({},i,o))},t.state={height:0,width:0},t}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(i,r),ju(i,null,[{key:"propTypes",get:function(){var t=e.propTypes;t.height,t.width;return function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(t,["height","width"])}}]),ju(i,[{key:"componentDidMount",value:function(){this._onResize(),this.cancelSubscription=Du(this._onResize)}},{key:"componentWillReceiveProps",value:function(){this._onResize()}},{key:"componentWillUnmount",value:function(){this.cancelSubscription()}},{key:"render",value:function(){var r=this,i=this.state,o=i.height,a=i.width,c=Tu({},this.props,{animation:0===o&&0===a?null:this.props.animation}),u=Tu({},n?{height:o}:{},t?{width:a}:{});return s.a.createElement("div",{ref:function(e){return r.container=e},style:{width:"100%",height:"100%"}},s.a.createElement(e,Tu({},u,c)))}}]),i}(s.a.Component);return r.displayName="Flexible"+function(e){return e.displayName||e.name||"Component"}(e),r}Ru(Ia,!0,!1),function(e){Ru(e,!1,!0)}(Ia),function(e){Ru(e,!0,!0)}(Ia)},function(e,t,n){"use strict";e.exports=n(429)},function(e,t,n){"use strict";n.r(t);var r=n(147);n.d(t,"default",(function(){return r.a}))},function(e,t){e.exports=function(e,t){return e===t||e!==e&&t!==t}},function(e,t,n){var r=n(116),i=n(65);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){var r=n(72).Symbol;e.exports=r},function(e,t,n){(function(e){var r=n(72),i=n(468),o=t&&!t.nodeType&&t,a=o&&"object"==typeof e&&e&&!e.nodeType&&e,s=a&&a.exports===o?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;e.exports=c}).call(this,n(157)(e))},function(e,t,n){var r=n(477),i=n(235),o=n(478),a=n(303),s=n(479),c=n(116),u=n(292),l="[object Map]",f="[object Promise]",d="[object Set]",h="[object WeakMap]",p="[object DataView]",g=u(r),y=u(i),m=u(o),b=u(a),v=u(s),x=c;(r&&x(new r(new ArrayBuffer(1)))!=p||i&&x(new i)!=l||o&&x(o.resolve())!=f||a&&x(new a)!=d||s&&x(new s)!=h)&&(x=function(e){var t=c(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case g:return p;case y:return l;case m:return f;case b:return d;case v:return h}return t}),e.exports=x},function(e,t,n){var r=n(116),i=n(76);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},function(e,t,n){var r;try{r={defaults:n(335),each:n(245),isFunction:n(131),isPlainObject:n(339),pick:n(342),has:n(250),range:n(343),uniqueId:n(344)}}catch(i){}r||(r=window._),e.exports=r},function(e,t,n){"use strict";n.d(t,"d",(function(){return r.a})),n.d(t,"c",(function(){return r.b})),n.d(t,"f",(function(){return r.c})),n.d(t,"g",(function(){return r.d})),n.d(t,"h",(function(){return r.e})),n.d(t,"e",(function(){return i.a})),n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return s}));var r=n(77),i=n(202),o="%Y-%m-%dT%H:%M:%S.%LZ";var a=Date.prototype.toISOString?function(e){return e.toISOString()}:Object(r.d)(o);var s=+new Date("2000-01-01T00:00:00.000Z")?function(e){var t=new Date(e);return isNaN(t)?null:t}:Object(r.e)(o)},function(e,t,n){"use strict";function r(e,t,n,r,i){var o=e*e,a=o*e;return((1-3*e+3*o-a)*t+(4-6*o+3*a)*n+(1+3*e+3*o-3*a)*r+a*i)/6}n.d(t,"a",(function(){return r})),t.b=function(e){var t=e.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[i],a=e[i+1],s=i>0?e[i-1]:2*o-a,c=i=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function i(e){if(!(t=r.exec(e)))throw new Error("invalid format: "+e);var t;return new o({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function o(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}i.prototype=o.prototype,o.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type}},function(e,t,n){"use strict";var r=n(150),i=n(21),o=n(99),a=n(92);t.a=function(){var e=a.a,t=a.b,n=Object(i.a)(!0),s=null,c=o.a,u=null;function l(i){var o,a,l,f=i.length,d=!1;for(null==s&&(u=c(l=Object(r.a)())),o=0;o<=f;++o)!(o0)){if(o/=d,d<0){if(o0){if(o>f)return;o>l&&(l=o)}if(o=r-c,d||!(o<0)){if(o/=d,d<0){if(o>f)return;o>l&&(l=o)}else if(d>0){if(o0)){if(o/=h,h<0){if(o0){if(o>f)return;o>l&&(l=o)}if(o=i-u,h||!(o<0)){if(o/=h,h<0){if(o>f)return;o>l&&(l=o)}else if(h>0){if(o0||f<1)||(l>0&&(e[0]=[c+l*d,u+l*h]),f<1&&(e[1]=[c+f*d,u+f*h]),!0)}}}}}function y(e,t,n,r,i){var o=e[1];if(o)return!0;var a,s,c=e[0],u=e.left,l=e.right,f=u[0],d=u[1],h=l[0],p=l[1],g=(f+h)/2,y=(d+p)/2;if(p===d){if(g=r)return;if(f>h){if(c){if(c[1]>=i)return}else c=[g,n];o=[g,i]}else{if(c){if(c[1]1)if(f>h){if(c){if(c[1]>=i)return}else c=[(n-s)/a,n];o=[(i-s)/a,i]}else{if(c){if(c[1]=r)return}else c=[t,a*t+s];o=[r,a*r+s]}else{if(c){if(c[0]=-B)){var h=c*c+u*u,p=l*l+f*f,g=(f*h-u*p)/d,y=(c*p-l*h)/d,m=w.pop()||new _;m.arc=e,m.site=i,m.x=g+a,m.y=(m.cy=y+s)+Math.sqrt(g*g+y*y),e.circle=m;for(var b=null,v=R._;v;)if(m.yL)s=s.L;else{if(!((i=o-P(s,a))>L)){r>-L?(t=s.P,n=s):i>-L?(t=s,n=s.N):t=n=s;break}if(!s.R){t=s;break}s=s.R}!function(e){D[e.index]={site:e,halfedges:[]}}(e);var c=C(e);if(N.insert(t,c),t||n){if(t===n)return O(t),n=C(t.site),N.insert(c,n),c.edge=n.edge=d(t.site,c.site),k(t),void k(n);if(n){O(t),O(n);var u=t.site,l=u[0],f=u[1],h=e[0]-l,g=e[1]-f,y=n.site,m=y[0]-l,b=y[1]-f,v=2*(h*b-g*m),x=h*h+g*g,w=m*m+b*b,_=[(b*x-g*w)/v+l,(h*w-m*x)/v+f];p(n.edge,u,y,_),c.edge=d(u,e,null,_),n.edge=d(e,y,null,_),k(t),k(n)}else c.edge=d(t.site,c.site)}}function M(e,t){var n=e.site,r=n[0],i=n[1],o=i-t;if(!o)return r;var a=e.P;if(!a)return-1/0;var s=(n=a.site)[0],c=n[1],u=c-t;if(!u)return s;var l=s-r,f=1/o-1/u,d=l/u;return f?(-d+Math.sqrt(d*d-2*f*(l*l/(-2*u)-c+u/2+i-o/2)))/f+r:(r+s)/2}function P(e,t){var n=e.N;if(n)return M(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var N,D,R,I,L=1e-6,B=1e-12;function F(e,t){return t[1]-e[1]||t[0]-e[0]}function z(e,t){var n,r,i,o=e.sort(F).pop();for(I=[],D=new Array(e.length),N=new f,R=new f;;)if(i=x,o&&(!i||o[1]L||Math.abs(i[0][1]-i[1][1])>L)||delete I[o]}(a,s,c,u),function(e,t,n,r){var i,o,a,s,c,u,l,f,d,p,g,y,m=D.length,x=!0;for(i=0;iL||Math.abs(y-d)>L)&&(c.splice(s,0,I.push(h(a,p,Math.abs(g-e)L?[e,Math.abs(f-e)L?[Math.abs(d-r)L?[n,Math.abs(f-n)L?[Math.abs(d-t)=s)return null;var c=e-i.site[0],u=t-i.site[1],l=c*c+u*u;do{i=o.cells[r=a],a=null,i.halfedges.forEach((function(n){var r=o.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=e-s[0],u=t-s[1],f=c*c+u*u;fo)if(Math.abs(d*u-l*f)>o&&a){var p=n-s,g=i-c,y=u*u+l*l,m=p*p+g*g,b=Math.sqrt(y),v=Math.sqrt(h),x=a*Math.tan((r-Math.acos((y+h-m)/(2*b*v)))/2),w=x/v,_=x/b;Math.abs(w-1)>o&&(this._+="L"+(e+w*f)+","+(t+w*d)),this._+="A"+a+","+a+",0,0,"+ +(d*p>f*g)+","+(this._x1=e+_*u)+","+(this._y1=t+_*l)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function(e,t,n,s,c,u){e=+e,t=+t,u=!!u;var l=(n=+n)*Math.cos(s),f=n*Math.sin(s),d=e+l,h=t+f,p=1^u,g=u?s-c:c-s;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+d+","+h:(Math.abs(this._x1-d)>o||Math.abs(this._y1-h)>o)&&(this._+="L"+d+","+h),n&&(g<0&&(g=g%i+i),g>a?this._+="A"+n+","+n+",0,1,"+p+","+(e-l)+","+(t-f)+"A"+n+","+n+",0,1,"+p+","+(this._x1=d)+","+(this._y1=h):g>o&&(this._+="A"+n+","+n+",0,"+ +(g>=r)+","+p+","+(this._x1=e+n*Math.cos(c))+","+(this._y1=t+n*Math.sin(c))))},rect:function(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}},t.a=c},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}));var r=Math.PI/180,i=180/Math.PI},function(e,t,n){"use strict";var r=n(27),i=1/0,o=i,a=-i,s=a,c={point:function(e,t){ea&&(a=e);ts&&(s=t)},lineStart:r.a,lineEnd:r.a,polygonStart:r.a,polygonEnd:r.a,result:function(){var e=[[i,o],[a,s]];return a=s=-(o=i=1/0),e}};t.a=c},function(e,t,n){(function(t){var n;n="undefined"!==typeof window?window:"undefined"!==typeof t?t:"undefined"!==typeof self?self:{},e.exports=n}).call(this,n(113))},,,function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"===typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"===typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function d(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&h())}function h(){if(!l){var e=s(d);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;n.008856451679035631?Math.pow(e,1/3):e/l+c}function y(e){return e>u?e*e*e:l*(e-c)}function m(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function b(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function v(e){if(e instanceof _)return new _(e.h,e.c,e.l,e.opacity);if(e instanceof p||(e=f(e)),0===e.a&&0===e.b)return new _(NaN,00?e>1?Object(r.a)((function(t){t.setTime(Math.floor(t/e)*e)}),(function(t,n){t.setTime(+t+n*e)}),(function(t,n){return(n-t)/e})):i:null},t.a=i;var o=i.range},function(e,t,n){var r=n(179),i=n(180);e.exports=function(e,t,n,o){var a=!n;n||(n={});for(var s=-1,c=t.length;++s2?arguments[2]:{},o=r(t);i&&(o=a.call(o,Object.getOwnPropertySymbols(t)));for(var s=0;se.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1&&e%1==0&&e0)throw new Error("cycle");return o}return n.id=function(t){return arguments.length?(e=Object(d.b)(t),n):e},n.parentId=function(e){return arguments.length?(t=Object(d.b)(e),n):t},n};function b(e,t){return e.parent===t.parent?1:2}function v(e){var t=e.children;return t?t[0]:e.t}function x(e){var t=e.children;return t?t[t.length-1]:e.t}function w(e,t,n){var r=n/(t.i-e.i);t.c-=r,t.s+=n,e.c+=r,t.z+=n,t.m+=n}function _(e,t,n){return e.a.parent===t.parent?e.a:n}function k(e,t){this._=e,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=t}k.prototype=Object.create(s.a.prototype);var O=function(){var e=b,t=1,n=1,r=null;function i(i){var c=function(e){for(var t,n,r,i,o,a=new k(e,0),s=[a];t=s.pop();)if(r=t._.children)for(t.children=new Array(o=r.length),i=o-1;i>=0;--i)s.push(n=t.children[i]=new k(r[i],i)),n.parent=t;return(a.parent=new k(null,0)).children=[a],a}(i);if(c.eachAfter(o),c.parent.m=-c.z,c.eachBefore(a),r)i.eachBefore(s);else{var u=i,l=i,f=i;i.eachBefore((function(e){e.xl.x&&(l=e),e.depth>f.depth&&(f=e)}));var d=u===l?1:e(u,l)/2,h=d-u.x,p=t/(l.x+d+h),g=n/(f.depth||1);i.eachBefore((function(e){e.x=(e.x+h)*p,e.y=e.depth*g}))}return i}function o(t){var n=t.children,r=t.parent.children,i=t.i?r[t.i-1]:null;if(n){!function(e){for(var t,n=0,r=0,i=e.children,o=i.length;--o>=0;)(t=i[o]).z+=n,t.m+=n,n+=t.s+(r+=t.c)}(t);var o=(n[0].z+n[n.length-1].z)/2;i?(t.z=i.z+e(t._,i._),t.m=t.z-o):t.z=o}else i&&(t.z=i.z+e(t._,i._));t.parent.A=function(t,n,r){if(n){for(var i,o=t,a=t,s=n,c=o.parent.children[0],u=o.m,l=a.m,f=s.m,d=c.m;s=x(s),o=v(o),s&&o;)c=v(c),(a=x(a)).a=t,(i=s.z+f-o.z-u+e(s._,o._))>0&&(w(_(s,t,r),t,i),u+=i,l+=i),f+=s.m,u+=o.m,d+=c.m,l+=a.m;s&&!x(a)&&(a.t=s,a.m+=f-l),o&&!v(c)&&(c.t=o,c.m+=u-d,r=t)}return r}(t,i,t.parent.A||r[0])}function a(e){e._.x=e.z+e.parent.m,e.m+=e.parent.m}function s(e){e.x*=t,e.y=e.depth*n}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(e){return arguments.length?(r=!1,t=+e[0],n=+e[1],i):r?null:[t,n]},i.nodeSize=function(e){return arguments.length?(r=!0,t=+e[0],n=+e[1],i):r?[t,n]:null},i},E=n(282),S=n(283),C=n(79),T=n(98),j=n(284),A=n(121),M=n(285)},function(e,t,n){"use strict";var r=n(138);t.a=function(e){var t=e.length;return function(n){var i=Math.floor(((n%=1)<0?++n:n)*t),o=e[(i+t-1)%t],a=e[i%t],s=e[(i+1)%t],c=e[(i+2)%t];return Object(r.a)((n-i/t)*t,o,a,s,c)}}},function(e,t,n){"use strict";var r=n(55),i=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,o=new RegExp(i.source,"g");t.a=function(e,t){var n,a,s,c=i.lastIndex=o.lastIndex=0,u=-1,l=[],f=[];for(e+="",t+="";(n=i.exec(e))&&(a=o.exec(t));)(s=a.index)>c&&(s=t.slice(c,s),l[u]?l[u]+=s:l[++u]=s),(n=n[0])===(a=a[0])?l[u]?l[u]+=a:l[++u]=a:(l[++u]=null,f.push({i:u,x:Object(r.a)(n,a)})),c=o.lastIndex;return c(a*=a)?(r=(u+a-i)/(2*u),o=Math.sqrt(Math.max(0,a/u-r*r)),n.x=e.x-r*s-o*c,n.y=e.y-r*c+o*s):(r=(u+i-a)/(2*u),o=Math.sqrt(Math.max(0,i/u-r*r)),n.x=t.x+r*s-o*c,n.y=t.y+r*c+o*s)):(n.x=t.x+n.r,n.y=t.y)}function o(e,t){var n=e.r+t.r-1e-6,r=t.x-e.x,i=t.y-e.y;return n>0&&n*n>r*r+i*i}function a(e){var t=e._,n=e.next._,r=t.r+n.r,i=(t.x*n.r+n.x*t.r)/r,o=(t.y*n.r+n.y*t.r)/r;return i*i+o*o}function s(e){this._=e,this.next=null,this.previous=null}function c(e){if(!(u=e.length))return 0;var t,n,c,u,l,f,d,h,p,g,y;if((t=e[0]).x=0,t.y=0,!(u>1))return t.r;if(n=e[1],t.x=-n.r,n.x=t.r,n.y=0,!(u>2))return t.r+n.r;i(n,t,c=e[2]),t=new s(t),n=new s(n),c=new s(c),t.next=c.previous=n,n.next=t.previous=c,c.next=n.previous=t;e:for(d=3;d=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Te,s:je,S:X,u:K,U:Z,V:Q,w:ee,W:te,x:null,X:null,y:ne,Y:ie,Z:ae,"%":Ce},Le={a:function(e){return p[e.getUTCDay()]},A:function(e){return d[e.getUTCDay()]},b:function(e){return y[e.getUTCMonth()]},B:function(e){return g[e.getUTCMonth()]},c:null,d:se,e:se,f:de,g:ke,G:Ee,H:ce,I:ue,j:le,L:fe,m:he,M:pe,p:function(e){return c[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Te,s:je,S:ge,u:ye,U:me,V:ve,w:xe,W:we,x:null,X:null,y:_e,Y:Oe,Z:Se,"%":Ce},Be={a:function(e,t,n){var r=Ae.exec(t.slice(n));return r?(e.w=Me[r[0].toLowerCase()],n+r[0].length):-1},A:function(e,t,n){var r=J.exec(t.slice(n));return r?(e.w=be[r[0].toLowerCase()],n+r[0].length):-1},b:function(e,t,n){var r=De.exec(t.slice(n));return r?(e.m=Re[r[0].toLowerCase()],n+r[0].length):-1},B:function(e,t,n){var r=Pe.exec(t.slice(n));return r?(e.m=Ne[r[0].toLowerCase()],n+r[0].length):-1},c:function(e,n,r){return Ue(e,t,n,r)},d:M,e:M,f:L,g:C,G:S,H:N,I:N,j:P,L:I,m:A,M:D,p:function(e,t,n){var r=m.exec(t.slice(n));return r?(e.p=b[r[0].toLowerCase()],n+r[0].length):-1},q:j,Q:F,s:z,S:R,u:_,U:k,V:O,w:w,W:E,x:function(e,t,r){return Ue(e,n,t,r)},X:function(e,t,n){return Ue(e,s,t,n)},y:C,Y:S,Z:T,"%":B};function Fe(e,t){return function(n){var r,i,o,a=[],s=-1,c=0,u=e.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in d||(d.w=1),"Z"in d?(c=(s=l(f(d.y,0,1))).getUTCDay(),s=c>4||0===c?r.c.ceil(s):Object(r.c)(s),s=i.a.offset(s,7*(d.V-1)),d.y=s.getUTCFullYear(),d.m=s.getUTCMonth(),d.d=s.getUTCDate()+(d.w+6)%7):(c=(s=u(f(d.y,0,1))).getDay(),s=c>4||0===c?o.c.ceil(s):Object(o.c)(s),s=a.b.offset(s,7*(d.V-1)),d.y=s.getFullYear(),d.m=s.getMonth(),d.d=s.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),c="Z"in d?l(f(d.y,0,1)).getUTCDay():u(f(d.y,0,1)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(c+5)%7:d.w+7*d.U-(c+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,l(d)):u(d)}}function Ue(e,t,n,r){for(var i,o,a=0,s=t.length,c=n.length;a=c)return-1;if(37===(i=t.charCodeAt(a++))){if(i=t.charAt(a++),!(o=Be[i in h?t.charAt(a++):i])||(r=o(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return Ie.x=Fe(n,Ie),Ie.X=Fe(s,Ie),Ie.c=Fe(t,Ie),Le.x=Fe(n,Le),Le.X=Fe(s,Le),Le.c=Fe(t,Le),{format:function(e){var t=Fe(e+="",Ie);return t.toString=function(){return e},t},parse:function(e){var t=ze(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=Fe(e+="",Le);return t.toString=function(){return e},t},utcParse:function(e){var t=ze(e+="",!0);return t.toString=function(){return e},t}}}var h={"-":"",_:" ",0:"0"},p=/^\s*\d+/,g=/^%/,y=/[\\^$*+?|[\]().{}]/g;function m(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",o=i.length;return r+(o68?1900:2e3),n+r[0].length):-1}function T(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function j(e,t,n){var r=p.exec(t.slice(n,n+1));return r?(e.q=3*r[0]-3,n+r[0].length):-1}function A(e,t,n){var r=p.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function M(e,t,n){var r=p.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function P(e,t,n){var r=p.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function N(e,t,n){var r=p.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function D(e,t,n){var r=p.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function R(e,t,n){var r=p.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function I(e,t,n){var r=p.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function L(e,t,n){var r=p.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function B(e,t,n){var r=g.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function F(e,t,n){var r=p.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function z(e,t,n){var r=p.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function U(e,t){return m(e.getDate(),t,2)}function H(e,t){return m(e.getHours(),t,2)}function W(e,t){return m(e.getHours()%12||12,t,2)}function Y(e,t){return m(1+a.b.count(Object(s.a)(e),e),t,3)}function V(e,t){return m(e.getMilliseconds(),t,3)}function q(e,t){return V(e,t)+"000"}function $(e,t){return m(e.getMonth()+1,t,2)}function G(e,t){return m(e.getMinutes(),t,2)}function X(e,t){return m(e.getSeconds(),t,2)}function K(e){var t=e.getDay();return 0===t?7:t}function Z(e,t){return m(o.g.count(Object(s.a)(e)-1,e),t,2)}function J(e){var t=e.getDay();return t>=4||0===t?Object(o.i)(e):o.i.ceil(e)}function Q(e,t){return e=J(e),m(o.i.count(Object(s.a)(e),e)+(4===Object(s.a)(e).getDay()),t,2)}function ee(e){return e.getDay()}function te(e,t){return m(o.c.count(Object(s.a)(e)-1,e),t,2)}function ne(e,t){return m(e.getFullYear()%100,t,2)}function re(e,t){return m((e=J(e)).getFullYear()%100,t,2)}function ie(e,t){return m(e.getFullYear()%1e4,t,4)}function oe(e,t){var n=e.getDay();return m((e=n>=4||0===n?Object(o.i)(e):o.i.ceil(e)).getFullYear()%1e4,t,4)}function ae(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+m(t/60|0,"0",2)+m(t%60,"0",2)}function se(e,t){return m(e.getUTCDate(),t,2)}function ce(e,t){return m(e.getUTCHours(),t,2)}function ue(e,t){return m(e.getUTCHours()%12||12,t,2)}function le(e,t){return m(1+i.a.count(Object(c.a)(e),e),t,3)}function fe(e,t){return m(e.getUTCMilliseconds(),t,3)}function de(e,t){return fe(e,t)+"000"}function he(e,t){return m(e.getUTCMonth()+1,t,2)}function pe(e,t){return m(e.getUTCMinutes(),t,2)}function ge(e,t){return m(e.getUTCSeconds(),t,2)}function ye(e){var t=e.getUTCDay();return 0===t?7:t}function me(e,t){return m(r.g.count(Object(c.a)(e)-1,e),t,2)}function be(e){var t=e.getUTCDay();return t>=4||0===t?Object(r.i)(e):r.i.ceil(e)}function ve(e,t){return e=be(e),m(r.i.count(Object(c.a)(e),e)+(4===Object(c.a)(e).getUTCDay()),t,2)}function xe(e){return e.getUTCDay()}function we(e,t){return m(r.c.count(Object(c.a)(e)-1,e),t,2)}function _e(e,t){return m(e.getUTCFullYear()%100,t,2)}function ke(e,t){return m((e=be(e)).getUTCFullYear()%100,t,2)}function Oe(e,t){return m(e.getUTCFullYear()%1e4,t,4)}function Ee(e,t){var n=e.getUTCDay();return m((e=n>=4||0===n?Object(r.i)(e):r.i.ceil(e)).getUTCFullYear()%1e4,t,4)}function Se(){return"+0000"}function Ce(){return"%"}function Te(e){return+e}function je(e){return Math.floor(+e/1e3)}},function(e,t,n){"use strict";var r=n(150),i=n(21),o=n(99),a=n(141),s=n(92);t.a=function(){var e=s.a,t=null,n=Object(i.a)(0),c=s.b,u=Object(i.a)(!0),l=null,f=o.a,d=null;function h(i){var o,a,s,h,p,g=i.length,y=!1,m=new Array(g),b=new Array(g);for(null==l&&(d=f(p=Object(r.a)())),o=0;o<=g;++o){if(!(o=a;--s)d.point(m[s],b[s]);d.lineEnd(),d.areaEnd()}y&&(m[o]=+e(h,o,i),b[o]=+n(h,o,i),d.point(t?+t(h,o,i):m[o],c?+c(h,o,i):b[o]))}if(p)return d=null,p+""||null}function p(){return Object(a.a)().defined(u).curve(f).context(l)}return h.x=function(n){return arguments.length?(e="function"===typeof n?n:Object(i.a)(+n),t=null,h):e},h.x0=function(t){return arguments.length?(e="function"===typeof t?t:Object(i.a)(+t),h):e},h.x1=function(e){return arguments.length?(t=null==e?null:"function"===typeof e?e:Object(i.a)(+e),h):t},h.y=function(e){return arguments.length?(n="function"===typeof e?e:Object(i.a)(+e),c=null,h):n},h.y0=function(e){return arguments.length?(n="function"===typeof e?e:Object(i.a)(+e),h):n},h.y1=function(e){return arguments.length?(c=null==e?null:"function"===typeof e?e:Object(i.a)(+e),h):c},h.lineX0=h.lineY0=function(){return p().x(e).y(n)},h.lineY1=function(){return p().x(e).y(c)},h.lineX1=function(){return p().x(t).y(n)},h.defined=function(e){return arguments.length?(u="function"===typeof e?e:Object(i.a)(!!e),h):u},h.curve=function(e){return arguments.length?(f=e,null!=l&&(d=f(l)),h):f},h.context=function(e){return arguments.length?(null==e?l=d=null:d=f(l=e),h):l},h}},function(e,t,n){"use strict";n.d(t,"b",(function(){return d})),n.d(t,"a",(function(){return b}));var r=n(12),i=Array.prototype.slice,o=function(e,t){return e-t},a=function(e){return function(){return e}},s=function(e,t){for(var n,r=-1,i=t.length;++rr!==p>r&&n<(h-l)*(r-f)/(p-f)+l&&(i=-i)}return i}function u(e,t,n){var r,i,o,a;return function(e,t,n){return(t[0]-e[0])*(n[1]-e[1])===(n[0]-e[0])*(t[1]-e[1])}(e,t,n)&&(i=e[r=+(e[0]===t[0])],o=n[r],a=t[r],i<=o&&o<=a||a<=o&&o<=i)}var l=function(){},f=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],d=function(){var e=1,t=1,n=r.y,c=p;function u(e){var t=n(e);if(Array.isArray(t))t=t.slice().sort(o);else{var i=Object(r.i)(e),a=i[0],s=i[1];t=Object(r.A)(a,s,t),t=Object(r.s)(Math.floor(a/t)*t,Math.floor(s/t)*t,t)}return t.map((function(t){return d(e,t)}))}function d(n,r){var i=[],o=[];return function(n,r,i){var o,a,s,c,u,l,d=new Array,p=new Array;o=a=-1,c=n[0]>=r,f[c<<1].forEach(g);for(;++o=r,f[s|c<<1].forEach(g);f[c<<0].forEach(g);for(;++a=r,u=n[a*e]>=r,f[c<<1|u<<2].forEach(g);++o=r,l=u,u=n[a*e+o+1]>=r,f[s|c<<1|u<<2|l<<3].forEach(g);f[c|u<<3].forEach(g)}o=-1,u=n[a*e]>=r,f[u<<2].forEach(g);for(;++o=r,f[u<<2|l<<3].forEach(g);function g(e){var t,n,r=[e[0][0]+o,e[0][1]+a],s=[e[1][0]+o,e[1][1]+a],c=h(r),u=h(s);(t=p[c])?(n=d[u])?(delete p[t.end],delete d[n.start],t===n?(t.ring.push(s),i(t.ring)):d[t.start]=p[n.end]={start:t.start,end:n.end,ring:t.ring.concat(n.ring)}):(delete p[t.end],t.ring.push(s),p[t.end=u]=t):(t=d[u])?(n=p[c])?(delete d[t.start],delete p[n.end],t===n?(t.ring.push(s),i(t.ring)):d[n.start]=p[t.end]={start:n.start,end:t.end,ring:n.ring.concat(t.ring)}):(delete d[t.start],t.ring.unshift(r),d[t.start=c]=t):d[c]=p[u]={start:c,end:u,ring:[r,s]}}f[u<<3].forEach(g)}(n,r,(function(e){c(e,n,r),function(e){for(var t=0,n=e.length,r=e[n-1][1]*e[0][0]-e[n-1][0]*e[0][1];++t0?i.push([e]):o.push(e)})),o.forEach((function(e){for(var t,n=0,r=i.length;n0&&a0&&s0)||!(i>0))throw new Error("invalid size");return e=r,t=i,u},u.thresholds=function(e){return arguments.length?(n="function"===typeof e?e:Array.isArray(e)?a(i.call(e)):a(e),u):n},u.smooth=function(e){return arguments.length?(c=e?p:l,u):c===p},u};function h(e,t,n){for(var r=e.width,i=e.height,o=1+(n<<1),a=0;a=n&&(s>=o&&(c-=e.data[s-o+a*r]),t.data[s-n+a*r]=c/Math.min(s+1,r-1+o-s,o))}function p(e,t,n){for(var r=e.width,i=e.height,o=1+(n<<1),a=0;a=n&&(s>=o&&(c-=e.data[a+(s-o)*r]),t.data[a+(s-n)*r]=c/Math.min(s+1,i-1+o-s,o))}function g(e){return e[0]}function y(e){return e[1]}function m(){return 1}var b=function(){var e=g,t=y,n=m,o=960,s=500,c=20,u=2,l=3*c,f=o+2*l>>u,b=s+2*l>>u,v=a(20);function x(i){var o=new Float32Array(f*b),a=new Float32Array(f*b);i.forEach((function(r,i,a){var s=+e(r,i,a)+l>>u,c=+t(r,i,a)+l>>u,d=+n(r,i,a);s>=0&&s=0&&c>u),p({width:f,height:b,data:a},{width:f,height:b,data:o},c>>u),h({width:f,height:b,data:o},{width:f,height:b,data:a},c>>u),p({width:f,height:b,data:a},{width:f,height:b,data:o},c>>u),h({width:f,height:b,data:o},{width:f,height:b,data:a},c>>u),p({width:f,height:b,data:a},{width:f,height:b,data:o},c>>u);var s=v(o);if(!Array.isArray(s)){var g=Object(r.k)(o);s=Object(r.A)(0,g,s),(s=Object(r.s)(0,Math.floor(g/s)*s,s)).shift()}return d().thresholds(s).size([f,b])(o).map(w)}function w(e){return e.value*=Math.pow(2,-2*u),e.coordinates.forEach(_),e}function _(e){e.forEach(k)}function k(e){e.forEach(O)}function O(e){e[0]=e[0]*Math.pow(2,u)-l,e[1]=e[1]*Math.pow(2,u)-l}function E(){return f=o+2*(l=3*c)>>u,b=s+2*l>>u,x}return x.x=function(t){return arguments.length?(e="function"===typeof t?t:a(+t),x):e},x.y=function(e){return arguments.length?(t="function"===typeof e?e:a(+e),x):t},x.weight=function(e){return arguments.length?(n="function"===typeof e?e:a(+e),x):n},x.size=function(e){if(!arguments.length)return[o,s];var t=Math.ceil(e[0]),n=Math.ceil(e[1]);if(!(t>=0)&&!(t>=0))throw new Error("invalid size");return o=t,s=n,E()},x.cellSize=function(e){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return u=Math.floor(Math.log(e)/Math.LN2),E()},x.thresholds=function(e){return arguments.length?(v="function"===typeof e?e:Array.isArray(e)?a(i.call(e)):a(e),x):v},x.bandwidth=function(e){if(!arguments.length)return Math.sqrt(c*(c+1));if(!((e=+e)>=0))throw new Error("invalid bandwidth");return c=Math.round((Math.sqrt(4*e*e+1)-1)/2),E()},x}},function(e,t,n){"use strict";var r,i=n(84),o=n(140),a=n(91),s=function(e,t){var n=Object(a.b)(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},c={"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:a.a,e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return s(100*e,t)},r:s,s:function(e,t){var n=Object(a.b)(e,t);if(!n)return e+"";var i=n[0],o=n[1],s=o-(r=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,c=i.length;return s===c?i:s>c?i+new Array(s-c+1).join("0"):s>0?i.slice(0,s)+"."+i.slice(s):"0."+new Array(1-s).join("0")+Object(a.b)(e,Math.max(0,t+s-1))[0]},X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}},u=function(e){return e},l=Array.prototype.map,f=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];t.a=function(e){var t,n,a=void 0===e.grouping||void 0===e.thousands?u:(t=l.call(e.grouping,Number),n=e.thousands+"",function(e,r){for(var i=e.length,o=[],a=0,s=t[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),o.push(e.substring(i-=s,i+s)),!((c+=s+1)>r));)s=t[a=(a+1)%t.length];return o.reverse().join(n)}),s=void 0===e.currency?"":e.currency[0]+"",d=void 0===e.currency?"":e.currency[1]+"",h=void 0===e.decimal?".":e.decimal+"",p=void 0===e.numerals?u:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(l.call(e.numerals,String)),g=void 0===e.percent?"%":e.percent+"",y=void 0===e.minus?"-":e.minus+"",m=void 0===e.nan?"NaN":e.nan+"";function b(e){var t=(e=Object(o.b)(e)).fill,n=e.align,i=e.sign,u=e.symbol,l=e.zero,b=e.width,v=e.comma,x=e.precision,w=e.trim,_=e.type;"n"===_?(v=!0,_="g"):c[_]||(void 0===x&&(x=12),w=!0,_="g"),(l||"0"===t&&"="===n)&&(l=!0,t="0",n="=");var k="$"===u?s:"#"===u&&/[boxX]/.test(_)?"0"+_.toLowerCase():"",O="$"===u?d:/[%p]/.test(_)?g:"",E=c[_],S=/[defgprs%]/.test(_);function C(e){var o,s,c,u=k,d=O;if("c"===_)d=E(e)+d,e="";else{var g=(e=+e)<0||1/e<0;if(e=isNaN(e)?m:E(Math.abs(e),x),w&&(e=function(e){e:for(var t,n=e.length,r=1,i=-1;r0&&(i=0)}return i>0?e.slice(0,i)+e.slice(t+1):e}(e)),g&&0===+e&&"+"!==i&&(g=!1),u=(g?"("===i?i:y:"-"===i||"("===i?"":i)+u,d=("s"===_?f[8+r/3]:"")+d+(g&&"("===i?")":""),S)for(o=-1,s=e.length;++o(c=e.charCodeAt(o))||c>57){d=(46===c?h+e.slice(o+1):e.slice(o))+d,e=e.slice(0,o);break}}v&&!l&&(e=a(e,1/0));var C=u.length+e.length+d.length,T=C>1)+u+e+d+T.slice(C);break;default:e=T+u+e+d}return p(e)}return x=void 0===x?6:/[gprs]/.test(_)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x)),C.toString=function(){return e+""},C}return{format:b,formatPrefix:function(e,t){var n=b(((e=Object(o.b)(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Object(i.a)(t)/3))),a=Math.pow(10,-r),s=f[8+r/3];return function(e){return n(a*e)+s}}}}},function(e,t,n){"use strict";var r=Array.prototype.slice;t.a=function(e){for(var t,n,o=0,s=(e=function(e){for(var t,n,r=e.length;r;)n=Math.random()*r--|0,t=e[r],e[r]=e[n],e[n]=t;return e}(r.call(e))).length,u=[];o0&&n*n>r*r+i*i}function s(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=t.pulsate,i=void 0!==r&&r,o=t.center,s=void 0===o?a||t.pulsate:o,c=t.fakeElement,u=void 0!==c&&c;if("mousedown"===e.type&&m.current)m.current=!1;else{"touchstart"===e.type&&(m.current=!0);var l,f,d,h=u?null:x.current,p=h?h.getBoundingClientRect():{width:0,height:0,left:0,top:0};if(s||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)l=Math.round(p.width/2),f=Math.round(p.height/2);else{var g=e.touches?e.touches[0]:e,y=g.clientX,_=g.clientY;l=Math.round(y-p.left),f=Math.round(_-p.top)}if(s)(d=Math.sqrt((2*Math.pow(p.width,2)+Math.pow(p.height,2))/3))%2===0&&(d+=1);else{var k=2*Math.max(Math.abs((h?h.clientWidth:0)-l),l)+2,O=2*Math.max(Math.abs((h?h.clientHeight:0)-f),f)+2;d=Math.sqrt(Math.pow(k,2)+Math.pow(O,2))}e.touches?null===v.current&&(v.current=function(){w({pulsate:i,rippleX:l,rippleY:f,rippleSize:d,cb:n})},b.current=setTimeout((function(){v.current&&(v.current(),v.current=null)}),80)):w({pulsate:i,rippleX:l,rippleY:f,rippleSize:d,cb:n})}}),[a,w]),O=o.useCallback((function(){_({},{pulsate:!0})}),[_]),S=o.useCallback((function(e,t){if(clearTimeout(b.current),"touchend"===e.type&&v.current)return e.persist(),v.current(),v.current=null,void(b.current=setTimeout((function(){S(e,t)})));v.current=null,p((function(e){return e.length>0?e.slice(1):e})),y.current=t}),[]);return o.useImperativeHandle(t,(function(){return{pulsate:O,start:_,stop:S}}),[O,_,S]),o.createElement("span",Object(r.a)({className:Object(c.a)(s.root,u),ref:x},l),o.createElement(k,{component:null,exit:!0},d))})),C=Object(f.a)((function(e){return{root:{overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"},ripple:{opacity:0,position:"absolute"},rippleVisible:{opacity:.3,transform:"scale(1)",animation:"$enter ".concat(550,"ms ").concat(e.transitions.easing.easeInOut)},ripplePulsate:{animationDuration:"".concat(e.transitions.duration.shorter,"ms")},child:{opacity:1,display:"block",width:"100%",height:"100%",borderRadius:"50%",backgroundColor:"currentColor"},childLeaving:{opacity:0,animation:"$exit ".concat(550,"ms ").concat(e.transitions.easing.easeInOut)},childPulsate:{position:"absolute",left:0,top:0,animation:"$pulsate 2500ms ".concat(e.transitions.easing.easeInOut," 200ms infinite")},"@keyframes enter":{"0%":{transform:"scale(0)",opacity:.1},"100%":{transform:"scale(1)",opacity:.3}},"@keyframes exit":{"0%":{opacity:1},"100%":{opacity:0}},"@keyframes pulsate":{"0%":{transform:"scale(1)"},"50%":{transform:"scale(0.92)"},"100%":{transform:"scale(1)"}}}}),{flip:!1,name:"MuiTouchRipple"})(o.memo(S)),T=o.forwardRef((function(e,t){var n=e.action,a=e.buttonRef,f=e.centerRipple,h=void 0!==f&&f,p=e.children,g=e.classes,y=e.className,m=e.component,b=void 0===m?"button":m,v=e.disabled,x=void 0!==v&&v,w=e.disableRipple,_=void 0!==w&&w,k=e.disableTouchRipple,O=void 0!==k&&k,E=e.focusRipple,S=void 0!==E&&E,T=e.focusVisibleClassName,j=e.onBlur,A=e.onClick,M=e.onFocus,P=e.onFocusVisible,N=e.onKeyDown,D=e.onKeyUp,R=e.onMouseDown,I=e.onMouseLeave,L=e.onMouseUp,B=e.onTouchEnd,F=e.onTouchMove,z=e.onTouchStart,U=e.onDragLeave,H=e.tabIndex,W=void 0===H?0:H,Y=e.TouchRippleProps,V=e.type,q=void 0===V?"button":V,$=Object(i.a)(e,["action","buttonRef","centerRipple","children","classes","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","onBlur","onClick","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","onDragLeave","tabIndex","TouchRippleProps","type"]),G=o.useRef(null);var X=o.useRef(null),K=o.useState(!1),Z=K[0],J=K[1];x&&Z&&J(!1);var Q=Object(d.a)(),ee=Q.isFocusVisible,te=Q.onBlurVisible,ne=Q.ref;function re(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:O;return Object(l.a)((function(r){return t&&t(r),!n&&X.current&&X.current[e](r),!0}))}o.useImperativeHandle(n,(function(){return{focusVisible:function(){J(!0),G.current.focus()}}}),[]),o.useEffect((function(){Z&&S&&!_&&X.current.pulsate()}),[_,S,Z]);var ie=re("start",R),oe=re("stop",U),ae=re("stop",L),se=re("stop",(function(e){Z&&e.preventDefault(),I&&I(e)})),ce=re("start",z),ue=re("stop",B),le=re("stop",F),fe=re("stop",(function(e){Z&&(te(e),J(!1)),j&&j(e)}),!1),de=Object(l.a)((function(e){G.current||(G.current=e.currentTarget),ee(e)&&(J(!0),P&&P(e)),M&&M(e)})),he=function(){var e=s.findDOMNode(G.current);return b&&"button"!==b&&!("A"===e.tagName&&e.href)},pe=o.useRef(!1),ge=Object(l.a)((function(e){S&&!pe.current&&Z&&X.current&&" "===e.key&&(pe.current=!0,e.persist(),X.current.stop(e,(function(){X.current.start(e)}))),e.target===e.currentTarget&&he()&&" "===e.key&&e.preventDefault(),N&&N(e),e.target===e.currentTarget&&he()&&"Enter"===e.key&&!x&&(e.preventDefault(),A&&A(e))})),ye=Object(l.a)((function(e){S&&" "===e.key&&X.current&&Z&&!e.defaultPrevented&&(pe.current=!1,e.persist(),X.current.stop(e,(function(){X.current.pulsate(e)}))),D&&D(e),A&&e.target===e.currentTarget&&he()&&" "===e.key&&!e.defaultPrevented&&A(e)})),me=b;"button"===me&&$.href&&(me="a");var be={};"button"===me?(be.type=q,be.disabled=x):("a"===me&&$.href||(be.role="button"),be["aria-disabled"]=x);var ve=Object(u.a)(a,t),xe=Object(u.a)(ne,G),we=Object(u.a)(ve,xe),_e=o.useState(!1),ke=_e[0],Oe=_e[1];o.useEffect((function(){Oe(!0)}),[]);var Ee=ke&&!_&&!x;return o.createElement(me,Object(r.a)({className:Object(c.a)(g.root,y,Z&&[g.focusVisible,T],x&&g.disabled),onBlur:fe,onClick:A,onFocus:de,onKeyDown:ge,onKeyUp:ye,onMouseDown:ie,onMouseLeave:se,onMouseUp:ae,onDragLeave:oe,onTouchEnd:ue,onTouchMove:le,onTouchStart:ce,ref:we,tabIndex:x?-1:W},be,$),p,Ee?o.createElement(C,Object(r.a)({ref:X,center:h},Y)):null)}));t.a=Object(f.a)({root:{display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle","-moz-appearance":"none","-webkit-appearance":"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},"&$disabled":{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}},disabled:{},focusVisible:{}},{name:"MuiButtonBase"})(T)},,function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(219),i=n(29);function o(e){return function t(n){function o(t,o){var a=e((t=Object(r.a)(t)).h,(o=Object(r.a)(o)).h),s=Object(i.a)(t.s,o.s),c=Object(i.a)(t.l,o.l),u=Object(i.a)(t.opacity,o.opacity);return function(e){return t.h=a(e),t.s=s(e),t.l=c(Math.pow(e,n)),t.opacity=u(e),t+""}}return n=+n,o.gamma=t,o}(1)}t.b=o(i.c);var a=o(i.a)},function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));var r=n(26),i=Object(r.a)((function(e){e.setDate(1),e.setHours(0,0,0,0)}),(function(e,t){e.setMonth(e.getMonth()+t)}),(function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())}),(function(e){return e.getMonth()}));t.a=i;var o=i.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return a}));var r=n(26),i=n(28),o=Object(r.a)((function(e){e.setTime(e-e.getMilliseconds()-e.getSeconds()*i.d-e.getMinutes()*i.c)}),(function(e,t){e.setTime(+e+t*i.b)}),(function(e,t){return(t-e)/i.b}),(function(e){return e.getHours()}));t.a=o;var a=o.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return a}));var r=n(26),i=n(28),o=Object(r.a)((function(e){e.setTime(e-e.getMilliseconds()-e.getSeconds()*i.d)}),(function(e,t){e.setTime(+e+t*i.c)}),(function(e,t){return(t-e)/i.c}),(function(e){return e.getMinutes()}));t.a=o;var a=o.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));var r=n(26),i=Object(r.a)((function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCMonth(e.getUTCMonth()+t)}),(function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())}),(function(e){return e.getUTCMonth()}));t.a=i;var o=i.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return a}));var r=n(26),i=n(28),o=Object(r.a)((function(e){e.setUTCMinutes(0,0,0)}),(function(e,t){e.setTime(+e+t*i.b)}),(function(e,t){return(t-e)/i.b}),(function(e){return e.getUTCHours()}));t.a=o;var a=o.range},function(e,t,n){"use strict";n.d(t,"b",(function(){return a}));var r=n(26),i=n(28),o=Object(r.a)((function(e){e.setUTCSeconds(0,0)}),(function(e,t){e.setTime(+e+t*i.c)}),(function(e,t){return(t-e)/i.c}),(function(e){return e.getUTCMinutes()}));t.a=o;var a=o.range},function(e,t,n){var r=n(435);e.exports={Graph:r.Graph,json:n(537),alg:n(538),version:r.version}},function(e,t,n){"use strict";var r=n(64);e.exports=o;var i="\0";function o(e){this._isDirected=!r.has(e,"directed")||e.directed,this._isMultigraph=!!r.has(e,"multigraph")&&e.multigraph,this._isCompound=!!r.has(e,"compound")&&e.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(e,t){e[t]?e[t]++:e[t]=1}function s(e,t){--e[t]||delete e[t]}function c(e,t,n,i){var o=""+t,a=""+n;if(!e&&o>a){var s=o;o=a,a=s}return o+"\x01"+a+"\x01"+(r.isUndefined(i)?"\0":i)}function u(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var a=i;i=o,o=a}var s={v:i,w:o};return r&&(s.name=r),s}function l(e,t){return c(e,t.v,t.w,t.name)}o.prototype._nodeCount=0,o.prototype._edgeCount=0,o.prototype.isDirected=function(){return this._isDirected},o.prototype.isMultigraph=function(){return this._isMultigraph},o.prototype.isCompound=function(){return this._isCompound},o.prototype.setGraph=function(e){return this._label=e,this},o.prototype.graph=function(){return this._label},o.prototype.setDefaultNodeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultNodeLabelFn=e,this},o.prototype.nodeCount=function(){return this._nodeCount},o.prototype.nodes=function(){return r.keys(this._nodes)},o.prototype.sources=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._in[t])}))},o.prototype.sinks=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._out[t])}))},o.prototype.setNodes=function(e,t){var n=arguments,i=this;return r.each(e,(function(e){n.length>1?i.setNode(e,t):i.setNode(e)})),this},o.prototype.setNode=function(e,t){return r.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=i,this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},o.prototype.node=function(e){return this._nodes[e]},o.prototype.hasNode=function(e){return r.has(this._nodes,e)},o.prototype.removeNode=function(e){var t=this;if(r.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],r.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),r.each(r.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],r.each(r.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},o.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(t))t=i;else{for(var n=t+="";!r.isUndefined(n);n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},o.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},o.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==i)return t}},o.prototype.children=function(e){if(r.isUndefined(e)&&(e=i),this._isCompound){var t=this._children[e];if(t)return r.keys(t)}else{if(e===i)return this.nodes();if(this.hasNode(e))return[]}},o.prototype.predecessors=function(e){var t=this._preds[e];if(t)return r.keys(t)},o.prototype.successors=function(e){var t=this._sucs[e];if(t)return r.keys(t)},o.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return r.union(t,this.successors(e))},o.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},o.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),r.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var i={};function o(e){var r=n.parent(e);return void 0===r||t.hasNode(r)?(i[e]=r,r):r in i?i[r]:o(r)}return this._isCompound&&r.each(t.nodes(),(function(e){t.setParent(e,o(e))})),t},o.prototype.setDefaultEdgeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultEdgeLabelFn=e,this},o.prototype.edgeCount=function(){return this._edgeCount},o.prototype.edges=function(){return r.values(this._edgeObjs)},o.prototype.setPath=function(e,t){var n=this,i=arguments;return r.reduce(e,(function(e,r){return i.length>1?n.setEdge(e,r,t):n.setEdge(e,r),r})),this},o.prototype.setEdge=function(){var e,t,n,i,o=!1,s=arguments[0];"object"===typeof s&&null!==s&&"v"in s?(e=s.v,t=s.w,n=s.name,2===arguments.length&&(i=arguments[1],o=!0)):(e=s,t=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),e=""+e,t=""+t,r.isUndefined(n)||(n=""+n);var l=c(this._isDirected,e,t,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(e,t,n);var f=u(this._isDirected,e,t,n);return e=f.v,t=f.w,Object.freeze(f),this._edgeObjs[l]=f,a(this._preds[t],e),a(this._sucs[e],t),this._in[t][l]=f,this._out[e][l]=f,this._edgeCount++,this},o.prototype.edge=function(e,t,n){var r=1===arguments.length?l(this._isDirected,arguments[0]):c(this._isDirected,e,t,n);return this._edgeLabels[r]},o.prototype.hasEdge=function(e,t,n){var i=1===arguments.length?l(this._isDirected,arguments[0]):c(this._isDirected,e,t,n);return r.has(this._edgeLabels,i)},o.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?l(this._isDirected,arguments[0]):c(this._isDirected,e,t,n),i=this._edgeObjs[r];return i&&(e=i.v,t=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],s(this._preds[t],e),s(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},o.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var i=r.values(n);return t?r.filter(i,(function(e){return e.v===t})):i}},o.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var i=r.values(n);return t?r.filter(i,(function(e){return e.w===t})):i}},o.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},function(e,t,n){var r=n(115)(n(72),"Map");e.exports=r},function(e,t,n){var r=n(453),i=n(460),o=n(462),a=n(463),s=n(464);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){(function(e){var r=n(291),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i&&r.process,s=function(){try{var e=o&&o.require&&o.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(t){}}();e.exports=s}).call(this,n(157)(e))},function(e,t,n){var r=n(183),i=n(470),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))o.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t,n){var r=n(298),i=n(299),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(e){return null==e?[]:(e=Object(e),r(a(e),(function(t){return o.call(e,t)})))}:i;e.exports=s},function(e,t){e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n0&&o(l)?n>1?e(l,n-1,o,a,s):r(s,l):a||(s[s.length]=l)}return s}},function(e,t,n){var r=n(135);e.exports=function(e,t,n){for(var i=-1,o=e.length;++i=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){c.headers[e]=r.merge(a)})),e.exports=c}).call(this,n(156))},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=0);return t},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t,n,i,o,a,s){var c=n+(-o*(t-i)+-a*n)*e,u=t+c*e;if(Math.abs(c)=0?1:-1,i=r*n,c=Object(u.g)(t),l=Object(u.t)(t),f=s*l,h=a*c+f*Object(u.g)(i),p=f*r*Object(u.t)(i);d.add(Object(u.e)(p,h)),o=e,a=c,s=l}var v=function(e){return h.reset(),Object(f.a)(e,p),2*h};function x(e){return[Object(u.e)(e[1],e[0]),Object(u.c)(e[2])]}function w(e){var t=e[0],n=e[1],r=Object(u.g)(n);return[r*Object(u.g)(t),r*Object(u.t)(t),Object(u.t)(n)]}function _(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function k(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function O(e,t){e[0]+=t[0],e[1]+=t[1],e[2]+=t[2]}function E(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function S(e){var t=Object(u.u)(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);e[0]/=t,e[1]/=t,e[2]/=t}var C,T,j,A,M,P,N,D,R,I,L=Object(c.a)(),B={point:F,lineStart:U,lineEnd:H,polygonStart:function(){B.point=W,B.lineStart=Y,B.lineEnd=V,L.reset(),p.polygonStart()},polygonEnd:function(){p.polygonEnd(),B.point=F,B.lineStart=U,B.lineEnd=H,d<0?(C=-(j=180),T=-(A=90)):L>u.i?A=90:L<-u.i&&(T=-90),I[0]=C,I[1]=j},sphere:function(){C=-(j=180),T=-(A=90)}};function F(e,t){R.push(I=[C=e,j=e]),tA&&(A=t)}function z(e,t){var n=w([e*u.r,t*u.r]);if(D){var r=k(D,n),i=k([r[1],-r[0],0],r);S(i),i=x(i);var o,a=e-M,s=a>0?1:-1,c=i[0]*u.h*s,l=Object(u.a)(a)>180;l^(s*MA&&(A=o):l^(s*M<(c=(c+360)%360-180)&&cA&&(A=t)),l?eq(C,j)&&(j=e):q(e,j)>q(C,j)&&(C=e):j>=C?(ej&&(j=e)):e>M?q(C,e)>q(C,j)&&(j=e):q(e,j)>q(C,j)&&(C=e)}else R.push(I=[C=e,j=e]);tA&&(A=t),D=n,M=e}function U(){B.point=z}function H(){I[0]=C,I[1]=j,B.point=F,D=null}function W(e,t){if(D){var n=e-M;L.add(Object(u.a)(n)>180?n+(n>0?360:-360):n)}else P=e,N=t;p.point(e,t),z(e,t)}function Y(){p.lineStart()}function V(){W(P,N),p.lineEnd(),Object(u.a)(L)>u.i&&(C=-(j=180)),I[0]=C,I[1]=j,D=null}function q(e,t){return(t-=e)<0?t+360:t}function $(e,t){return e[0]-t[0]}function G(e,t){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:tq(r[0],r[1])&&(r[1]=i[1]),q(i[0],r[1])>q(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,t=0,r=o[n=o.length-1];t<=n;r=i,++t)i=o[t],(s=q(r[1],i[0]))>a&&(a=s,C=i[0],j=r[1])}return R=I=null,C===1/0||T===1/0?[[NaN,NaN],[NaN,NaN]]:[[C,T],[j,A]]},de={sphere:l.a,point:he,lineStart:ge,lineEnd:be,polygonStart:function(){de.lineStart=ve,de.lineEnd=xe},polygonEnd:function(){de.lineStart=ge,de.lineEnd=be}};function he(e,t){e*=u.r,t*=u.r;var n=Object(u.g)(t);pe(n*Object(u.g)(e),n*Object(u.t)(e),Object(u.t)(t))}function pe(e,t,n){++X,Z+=(e-Z)/X,J+=(t-J)/X,Q+=(n-Q)/X}function ge(){de.point=ye}function ye(e,t){e*=u.r,t*=u.r;var n=Object(u.g)(t);ce=n*Object(u.g)(e),ue=n*Object(u.t)(e),le=Object(u.t)(t),de.point=me,pe(ce,ue,le)}function me(e,t){e*=u.r,t*=u.r;var n=Object(u.g)(t),r=n*Object(u.g)(e),i=n*Object(u.t)(e),o=Object(u.t)(t),a=Object(u.e)(Object(u.u)((a=ue*o-le*i)*a+(a=le*r-ce*o)*a+(a=ce*i-ue*r)*a),ce*r+ue*i+le*o);K+=a,ee+=a*(ce+(ce=r)),te+=a*(ue+(ue=i)),ne+=a*(le+(le=o)),pe(ce,ue,le)}function be(){de.point=he}function ve(){de.point=we}function xe(){_e(ae,se),de.point=he}function we(e,t){ae=e,se=t,e*=u.r,t*=u.r,de.point=_e;var n=Object(u.g)(t);ce=n*Object(u.g)(e),ue=n*Object(u.t)(e),le=Object(u.t)(t),pe(ce,ue,le)}function _e(e,t){e*=u.r,t*=u.r;var n=Object(u.g)(t),r=n*Object(u.g)(e),i=n*Object(u.t)(e),o=Object(u.t)(t),a=ue*o-le*i,s=le*r-ce*o,c=ce*i-ue*r,l=Object(u.u)(a*a+s*s+c*c),f=Object(u.c)(l),d=l&&-f/l;re+=d*a,ie+=d*s,oe+=d*c,K+=f,ee+=f*(ce+(ce=r)),te+=f*(ue+(ue=i)),ne+=f*(le+(le=o)),pe(ce,ue,le)}var ke=function(e){X=K=Z=J=Q=ee=te=ne=re=ie=oe=0,Object(f.a)(e,de);var t=re,n=ie,r=oe,i=t*t+n*n+r*r;return iu.o?e+Math.round(-e/u.w)*u.w:e,t]}function Ce(e,t,n){return(e%=u.w)?t||n?Ee(je(e),Ae(t,n)):je(e):t||n?Ae(t,n):Se}function Te(e){return function(t,n){return[(t+=e)>u.o?t-u.w:t<-u.o?t+u.w:t,n]}}function je(e){var t=Te(e);return t.invert=Te(-e),t}function Ae(e,t){var n=Object(u.g)(e),r=Object(u.t)(e),i=Object(u.g)(t),o=Object(u.t)(t);function a(e,t){var a=Object(u.g)(t),s=Object(u.g)(e)*a,c=Object(u.t)(e)*a,l=Object(u.t)(t),f=l*n+s*r;return[Object(u.e)(c*i-f*o,s*n-l*r),Object(u.c)(f*i+c*o)]}return a.invert=function(e,t){var a=Object(u.g)(t),s=Object(u.g)(e)*a,c=Object(u.t)(e)*a,l=Object(u.t)(t),f=l*i-c*o;return[Object(u.e)(c*i+l*o,s*n+f*r),Object(u.c)(f*n-s*r)]},a}Se.invert=Se;var Me=function(e){function t(t){return(t=e(t[0]*u.r,t[1]*u.r))[0]*=u.h,t[1]*=u.h,t}return e=Ce(e[0]*u.r,e[1]*u.r,e.length>2?e[2]*u.r:0),t.invert=function(t){return(t=e.invert(t[0]*u.r,t[1]*u.r))[0]*=u.h,t[1]*=u.h,t},t};function Pe(e,t,n,r,i,o){if(n){var a=Object(u.g)(t),s=Object(u.t)(t),c=r*n;null==i?(i=t+r*u.w,o=t-c/2):(i=Ne(a,i),o=Ne(a,o),(r>0?io)&&(i+=r*u.w));for(var l,f=i;r>0?f>o:f1&&t.push(t.pop().concat(t.shift()))},result:function(){var n=t;return t=[],e=null,n}}},Ie=function(e,t){return Object(u.a)(e[0]-t[0])=0;--o)i.point((f=l[o])[0],f[1]);else r(h.x,h.p.x,-1,i);h=h.p}l=(h=h.o).z,p=!p}while(!h.v);i.lineEnd()}}};function Fe(e){if(t=e.length){for(var t,n,r=0,i=e[0];++r=0?1:-1,j=T*C,A=j>u.o,M=y*O;if(ze.add(Object(u.e)(M*T*Object(u.t)(j),m*E+M*Object(u.g)(j))),a+=A?C+T*u.w:C,A^p>=n^x>=n){var P=k(w(h),w(v));S(P);var N=k(o,P);S(N);var D=(A^C>=0?-1:1)*Object(u.c)(N[2]);(r>D||r===D&&(P[0]||P[1]))&&(s+=A^C>=0?1:-1)}}return(a<-u.i||a0){for(f||(i.polygonStart(),f=!0),i.lineStart(),e=0;e1&&2&c&&d.push(d.pop().concat(d.shift())),a.push(d.filter(Ve))}return d}};function Ve(e){return e.length>1}function qe(e,t){return((e=e.x)[0]<0?e[1]-u.l-u.i:u.l-e[1])-((t=t.x)[0]<0?t[1]-u.l-u.i:u.l-t[1])}var $e=Ye((function(){return!0}),(function(e){var t,n=NaN,r=NaN,i=NaN;return{lineStart:function(){e.lineStart(),t=1},point:function(o,a){var s=o>0?u.o:-u.o,c=Object(u.a)(o-n);Object(u.a)(c-u.o)0?u.l:-u.l),e.point(i,r),e.lineEnd(),e.lineStart(),e.point(s,r),e.point(o,r),t=0):i!==s&&c>=u.o&&(Object(u.a)(n-i)u.i?Object(u.d)((Object(u.t)(t)*(o=Object(u.g)(r))*Object(u.t)(n)-Object(u.t)(r)*(i=Object(u.g)(t))*Object(u.t)(e))/(i*o*a)):(t+r)/2}(n,r,o,a),e.point(i,r),e.lineEnd(),e.lineStart(),e.point(s,r),t=0),e.point(n=o,r=a),i=s},lineEnd:function(){e.lineEnd(),n=r=NaN},clean:function(){return 2-t}}}),(function(e,t,n,r){var i;if(null==e)i=n*u.l,r.point(-u.o,i),r.point(0,i),r.point(u.o,i),r.point(u.o,0),r.point(u.o,-i),r.point(0,-i),r.point(-u.o,-i),r.point(-u.o,0),r.point(-u.o,i);else if(Object(u.a)(e[0]-t[0])>u.i){var o=e[0]0,i=Object(u.a)(t)>u.i;function o(e,n){return Object(u.g)(e)*Object(u.g)(n)>t}function a(e,n,r){var i=[1,0,0],o=k(w(e),w(n)),a=_(o,o),s=o[0],c=a-s*s;if(!c)return!r&&e;var l=t*a/c,f=-t*s/c,d=k(i,o),h=E(i,l);O(h,E(o,f));var p=d,g=_(h,p),y=_(p,p),m=g*g-y*(_(h,h)-1);if(!(m<0)){var b=Object(u.u)(m),v=E(p,(-g-b)/y);if(O(v,h),v=x(v),!r)return v;var S,C=e[0],T=n[0],j=e[1],A=n[1];T0^v[1]<(Object(u.a)(v[0]-C)u.o^(C<=v[0]&&v[0]<=T)){var N=E(p,(-g+b)/y);return O(N,h),[v,x(N)]}}}function s(t,n){var i=r?e:u.o-e,o=0;return t<-i?o|=1:t>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return Ye(o,(function(e){var t,n,c,l,f;return{lineStart:function(){l=c=!1,f=1},point:function(d,h){var p,g=[d,h],y=o(d,h),m=r?y?0:s(d,h):y?s(d+(d<0?u.o:-u.o),h):0;if(!t&&(l=c=y)&&e.lineStart(),y!==c&&(!(p=a(t,g))||Ie(t,p)||Ie(g,p))&&(g[2]=1),y!==c)f=0,y?(e.lineStart(),p=a(g,t),e.point(p[0],p[1])):(p=a(t,g),e.point(p[0],p[1],2),e.lineEnd()),t=p;else if(i&&t&&r^y){var b;m&n||!(b=a(g,t,!0))||(f=0,r?(e.lineStart(),e.point(b[0][0],b[0][1]),e.point(b[1][0],b[1][1]),e.lineEnd()):(e.point(b[1][0],b[1][1]),e.lineEnd(),e.lineStart(),e.point(b[0][0],b[0][1],3)))}!y||t&&Ie(t,g)||e.point(g[0],g[1]),t=g,c=y,n=m},lineEnd:function(){c&&e.lineEnd(),t=null},clean:function(){return f|(l&&c)<<1}}}),(function(t,r,i,o){Pe(o,e,n,i,t,r)}),r?[0,-e]:[-u.o,e-u.o])},Xe=1e9,Ke=-Xe;function Ze(e,t,n,r){function i(i,o){return e<=i&&i<=n&&t<=o&&o<=r}function o(i,o,s,u){var l=0,f=0;if(null==i||(l=a(i,s))!==(f=a(o,s))||c(i,o)<0^s>0)do{u.point(0===l||3===l?e:n,l>1?r:t)}while((l=(l+s+4)%4)!==f);else u.point(o[0],o[1])}function a(r,i){return Object(u.a)(r[0]-e)0?0:3:Object(u.a)(r[0]-n)0?2:1:Object(u.a)(r[1]-t)0?1:0:i>0?3:2}function s(e,t){return c(e.x,t.x)}function c(e,t){var n=a(e,1),r=a(t,1);return n!==r?n-r:0===n?t[1]-e[1]:1===n?e[0]-t[0]:2===n?e[1]-t[1]:t[0]-e[0]}return function(a){var c,u,l,f,d,h,p,g,y,m,b,v=a,x=Re(),w={point:_,lineStart:function(){w.point=k,u&&u.push(l=[]);m=!0,y=!1,p=g=NaN},lineEnd:function(){c&&(k(f,d),h&&y&&x.rejoin(),c.push(x.result()));w.point=_,y&&v.lineEnd()},polygonStart:function(){v=x,c=[],u=[],b=!0},polygonEnd:function(){var t=function(){for(var t=0,n=0,i=u.length;nr&&(d-o)*(r-a)>(h-a)*(e-o)&&++t:h<=r&&(d-o)*(r-a)<(h-a)*(e-o)&&--t;return t}(),n=b&&t,i=(c=Object(We.n)(c)).length;(n||i)&&(a.polygonStart(),n&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&Be(c,s,t,o,a),a.polygonEnd());v=a,c=u=l=null}};function _(e,t){i(e,t)&&v.point(e,t)}function k(o,a){var s=i(o,a);if(u&&l.push([o,a]),m)f=o,d=a,h=s,m=!1,s&&(v.lineStart(),v.point(o,a));else if(s&&y)v.point(o,a);else{var c=[p=Math.max(Ke,Math.min(Xe,p)),g=Math.max(Ke,Math.min(Xe,g))],x=[o=Math.max(Ke,Math.min(Xe,o)),a=Math.max(Ke,Math.min(Xe,a))];!function(e,t,n,r,i,o){var a,s=e[0],c=e[1],u=0,l=1,f=t[0]-s,d=t[1]-c;if(a=n-s,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>l)return;a>u&&(u=a)}if(a=i-s,f||!(a<0)){if(a/=f,f<0){if(a>l)return;a>u&&(u=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>l)return;a>u&&(u=a)}if(a=o-c,d||!(a<0)){if(a/=d,d<0){if(a>l)return;a>u&&(u=a)}else if(d>0){if(a0&&(e[0]=s+u*f,e[1]=c+u*d),l<1&&(t[0]=s+l*f,t[1]=c+l*d),!0}}}}}(c,x,e,t,n,r)?s&&(v.lineStart(),v.point(o,a),b=!1):(y||(v.lineStart(),v.point(c[0],c[1])),v.point(x[0],x[1]),s||v.lineEnd(),b=!1)}p=o,g=a,y=s}return w}}var Je,Qe,et,tt=function(){var e,t,n,r=0,i=0,o=960,a=500;return n={stream:function(n){return e&&t===n?e:e=Ze(r,i,o,a)(t=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],o=+s[1][0],a=+s[1][1],e=t=null,n):[[r,i],[o,a]]}}},nt=Object(c.a)(),rt={sphere:l.a,point:l.a,lineStart:function(){rt.point=ot,rt.lineEnd=it},lineEnd:l.a,polygonStart:l.a,polygonEnd:l.a};function it(){rt.point=rt.lineEnd=l.a}function ot(e,t){e*=u.r,t*=u.r,Je=e,Qe=Object(u.t)(t),et=Object(u.g)(t),rt.point=at}function at(e,t){e*=u.r,t*=u.r;var n=Object(u.t)(t),r=Object(u.g)(t),i=Object(u.a)(e-Je),o=Object(u.g)(i),a=r*Object(u.t)(i),s=et*n-Qe*r*o,c=Qe*n+et*r*o;nt.add(Object(u.e)(Object(u.u)(a*a+s*s),c)),Je=e,Qe=n,et=r}var st=function(e){return nt.reset(),Object(f.a)(e,rt),+nt},ct=[null,null],ut={type:"LineString",coordinates:ct},lt=function(e,t){return ct[0]=e,ct[1]=t,st(ut)},ft={Feature:function(e,t){return ht(e.geometry,t)},FeatureCollection:function(e,t){for(var n=e.features,r=-1,i=n.length;++r0&&(i=lt(e[o],e[o-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))u.i})).map(c)).concat(Object(We.s)(Object(u.f)(o/p)*p,i,p).filter((function(e){return Object(u.a)(e%y)>u.i})).map(l))}return b.lines=function(){return v().map((function(e){return{type:"LineString",coordinates:e}}))},b.outline=function(){return{type:"Polygon",coordinates:[f(r).concat(d(a).slice(1),f(n).reverse().slice(1),d(s).reverse().slice(1))]}},b.extent=function(e){return arguments.length?b.extentMajor(e).extentMinor(e):b.extentMinor()},b.extentMajor=function(e){return arguments.length?(r=+e[0][0],n=+e[1][0],s=+e[0][1],a=+e[1][1],r>n&&(e=r,r=n,n=e),s>a&&(e=s,s=a,a=e),b.precision(m)):[[r,s],[n,a]]},b.extentMinor=function(n){return arguments.length?(t=+n[0][0],e=+n[1][0],o=+n[0][1],i=+n[1][1],t>e&&(n=t,t=e,e=n),o>i&&(n=o,o=i,i=n),b.precision(m)):[[t,o],[e,i]]},b.step=function(e){return arguments.length?b.stepMajor(e).stepMinor(e):b.stepMinor()},b.stepMajor=function(e){return arguments.length?(g=+e[0],y=+e[1],b):[g,y]},b.stepMinor=function(e){return arguments.length?(h=+e[0],p=+e[1],b):[h,p]},b.precision=function(u){return arguments.length?(m=+u,c=xt(o,i,90),l=wt(t,e,m),f=xt(s,a,90),d=wt(r,n,m),b):m},b.extentMajor([[-180,-90+u.i],[180,90-u.i]]).extentMinor([[-180,-80-u.i],[180,80+u.i]])}function kt(){return _t()()}var Ot=function(e,t){var n=e[0]*u.r,r=e[1]*u.r,i=t[0]*u.r,o=t[1]*u.r,a=Object(u.g)(r),s=Object(u.t)(r),c=Object(u.g)(o),l=Object(u.t)(o),f=a*Object(u.g)(n),d=a*Object(u.t)(n),h=c*Object(u.g)(i),p=c*Object(u.t)(i),g=2*Object(u.c)(Object(u.u)(Object(u.m)(o-r)+a*c*Object(u.m)(i-n))),y=Object(u.t)(g),m=g?function(e){var t=Object(u.t)(e*=g)/y,n=Object(u.t)(g-e)/y,r=n*f+t*h,i=n*d+t*p,o=n*s+t*l;return[Object(u.e)(i,r)*u.h,Object(u.e)(o,Object(u.u)(r*r+i*i))*u.h]}:function(){return[n*u.h,r*u.h]};return m.distance=g,m},Et=n(379),St=n(106),Ct=function(e){return{stream:Tt(e)}};function Tt(e){return function(t){var n=new jt;for(var r in e)n[r]=e[r];return n.stream=t,n}}function jt(){}jt.prototype={constructor:jt,point:function(e,t){this.stream.point(e,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var At=n(152);function Mt(e,t,n){var r=e.clipExtent&&e.clipExtent();return e.scale(150).translate([0,0]),null!=r&&e.clipExtent(null),Object(f.a)(n,e.stream(At.a)),t(At.a.result()),null!=r&&e.clipExtent(r),e}function Pt(e,t,n){return Mt(e,(function(n){var r=t[1][0]-t[0][0],i=t[1][1]-t[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),a=+t[0][0]+(r-o*(n[1][0]+n[0][0]))/2,s=+t[0][1]+(i-o*(n[1][1]+n[0][1]))/2;e.scale(150*o).translate([a,s])}),n)}function Nt(e,t,n){return Pt(e,[[0,0],t],n)}function Dt(e,t,n){return Mt(e,(function(n){var r=+t,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,a=-i*n[0][1];e.scale(150*i).translate([o,a])}),n)}function Rt(e,t,n){return Mt(e,(function(n){var r=+t,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],a=(r-i*(n[1][1]+n[0][1]))/2;e.scale(150*i).translate([o,a])}),n)}var It=Object(u.g)(30*u.r),Lt=function(e,t){return+t?function(e,t){function n(r,i,o,a,s,c,l,f,d,h,p,g,y,m){var b=l-r,v=f-i,x=b*b+v*v;if(x>4*t&&y--){var w=a+h,_=s+p,k=c+g,O=Object(u.u)(w*w+_*_+k*k),E=Object(u.c)(k/=O),S=Object(u.a)(Object(u.a)(k)-1)t||Object(u.a)((b*A+v*M)/x-.5)>.3||a*h+s*p+c*g2?e[2]%360*u.r:0,A()):[m*u.h,b*u.h,v*u.h]},T.angle=function(e){return arguments.length?(x=e%360*u.r,A()):x*u.h},T.reflectX=function(e){return arguments.length?(w=e?-1:1,A()):w<0},T.reflectY=function(e){return arguments.length?(_=e?-1:1,A()):_<0},T.precision=function(e){return arguments.length?(a=Lt(s,C=e*e),M()):Object(u.u)(C)},T.fitExtent=function(e,t){return Pt(T,e,t)},T.fitSize=function(e,t){return Nt(T,e,t)},T.fitWidth=function(e,t){return Dt(T,e,t)},T.fitHeight=function(e,t){return Rt(T,e,t)},function(){return t=e.apply(this,arguments),T.invert=t.invert&&j,A()}}function Wt(e){var t=0,n=u.o/3,r=Ht(e),i=r(t,n);return i.parallels=function(e){return arguments.length?r(t=e[0]*u.r,n=e[1]*u.r):[t*u.h,n*u.h]},i}function Yt(e,t){var n=Object(u.t)(e),r=(n+Object(u.t)(t))/2;if(Object(u.a)(r)=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:a).invert(e)},f.stream=function(n){return e&&t===n?e:e=function(e){var t=e.length;return{point:function(n,r){for(var i=-1;++i0?t<-u.l+u.i&&(t=-u.l+u.i):t>u.l-u.i&&(t=u.l-u.i);var n=i/Object(u.p)(rn(t),r);return[n*Object(u.t)(r*e),i-n*Object(u.g)(r*e)]}return o.invert=function(e,t){var n=i-t,o=Object(u.s)(r)*Object(u.u)(e*e+n*n),a=Object(u.e)(e,Object(u.a)(n))*Object(u.s)(n);return n*r<0&&(a-=u.o*Object(u.s)(e)*Object(u.s)(n)),[a/r,2*Object(u.d)(Object(u.p)(i/o,1/r))-u.l]},o}var an=function(){return Wt(on).scale(109.5).parallels([30,30])};function sn(e,t){return[e,t]}sn.invert=sn;var cn=function(){return Ut(sn).scale(152.63)};function un(e,t){var n=Object(u.g)(e),r=e===t?Object(u.t)(e):(n-Object(u.g)(t))/(t-e),i=n/r+e;if(Object(u.a)(r)u.i&&--i>0);return[e/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]};var _n=function(){return Ut(wn).scale(175.295)};function kn(e,t){return[Object(u.g)(t)*Object(u.t)(e),Object(u.t)(t)]}kn.invert=Xt(u.c);var On=function(){return Ut(kn).scale(249.5).clipAngle(90+u.i)};function En(e,t){var n=Object(u.g)(t),r=1+Object(u.g)(e)*n;return[n*Object(u.t)(e)/r,Object(u.t)(t)/r]}En.invert=Xt((function(e){return 2*Object(u.d)(e)}));var Sn=function(){return Ut(En).scale(250).clipAngle(142)};function Cn(e,t){return[Object(u.n)(Object(u.v)((u.l+t)/2)),-e]}Cn.invert=function(e,t){return[-t,2*Object(u.d)(Object(u.k)(e))-u.l]};var Tn=function(){var e=nn(Cn),t=e.center,n=e.rotate;return e.center=function(e){return arguments.length?t([-e[1],e[0]]):[(e=t())[1],-e[0]]},e.rotate=function(e){return arguments.length?n([e[0],e[1],e.length>2?e[2]+90:90]):[(e=n())[0],e[1],e[2]-90]},n([0,0,90]).scale(159.155)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return h}));var r,i,o,a,s=n(55),c=180/Math.PI,u={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},l=function(e,t,n,r,i,o){var a,s,u;return(a=Math.sqrt(e*e+t*t))&&(e/=a,t/=a),(u=e*n+t*r)&&(n-=e*u,r-=t*u),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,u/=s),e*r180?t+=360:t-e>180&&(e+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Object(s.a)(e,t)})):t&&n.push(i(n)+"rotate("+t+r)}(o.rotate,a.rotate,c,u),function(e,t,n,o){e!==t?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Object(s.a)(e,t)}):t&&n.push(i(n)+"skewX("+t+r)}(o.skewX,a.skewX,c,u),function(e,t,n,r,o,a){if(e!==n||t!==r){var c=o.push(i(o)+"scale(",null,",",null,")");a.push({i:c-4,x:Object(s.a)(e,n)},{i:c-2,x:Object(s.a)(t,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,c,u),o=a=null,function(e){for(var t,n=-1,r=u.length;++n=n-1){var l=s[t];return l.x0=i,l.y0=o,l.x1=a,void(l.y1=c)}var f=u[t],d=r/2+f,h=t+1,p=n-1;for(;h>>1;u[g]c-o){var b=(i*m+a*y)/r;e(t,h,y,i,o,b,c),e(h,n,m,b,o,a,c)}else{var v=(o*m+c*y)/r;e(t,h,y,i,o,a,v),e(h,n,m,i,v,a,c)}}(0,c,e.value,t,n,r,i)}},function(e,t,n){"use strict";var r=n(79),i=n(98);t.a=function(e,t,n,o,a){(1&e.depth?i.a:r.a)(e,t,n,o,a)}},function(e,t,n){"use strict";var r=n(79),i=n(98),o=n(121);t.a=function e(t){function n(e,n,a,s,c){if((u=e._squarify)&&u.ratio===t)for(var u,l,f,d,h,p=-1,g=u.length,y=e.value;++p1?t:1)},n}(o.b)},function(e,t,n){"use strict";t.a=function(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}},function(e,t,n){"use strict";var r=Math.SQRT2;function i(e){return((e=Math.exp(e))+1/e)/2}t.a=function(e,t){var n,o,a=e[0],s=e[1],c=e[2],u=t[0],l=t[1],f=t[2],d=u-a,h=l-s,p=d*d+h*h;if(p<1e-12)o=Math.log(f/c)/r,n=function(e){return[a+e*d,s+e*h,c*Math.exp(r*e*o)]};else{var g=Math.sqrt(p),y=(f*f-c*c+4*p)/(2*c*2*g),m=(f*f-c*c-4*p)/(2*f*2*g),b=Math.log(Math.sqrt(y*y+1)-y),v=Math.log(Math.sqrt(m*m+1)-m);o=(v-b)/r,n=function(e){var t,n=e*o,u=i(b),l=c/(2*g)*(u*(t=r*n+b,((t=Math.exp(2*t))-1)/(t+1))-function(e){return((e=Math.exp(e))-1/e)/2}(b));return[a+l*d,s+l*h,c*u/i(r*n+b)]}}return n.duration=1e3*o,n}},function(e,t,n){"use strict";var r=n(150),i=n(21),o=n(14);function a(e){return e.innerRadius}function s(e){return e.outerRadius}function c(e){return e.startAngle}function u(e){return e.endAngle}function l(e){return e&&e.padAngle}function f(e,t,n,r,i,a,s,c){var u=n-e,l=r-t,f=s-i,d=c-a,h=d*u-f*l;if(!(h*hM*M+P*P&&(E=C,S=T),{cx:E,cy:S,x01:-f,y01:-d,x11:E*(i/_-1),y11:S*(i/_-1)}}t.a=function(){var e=a,t=s,n=Object(i.a)(0),h=null,p=c,g=u,y=l,m=null;function b(){var i,a,s=+e.apply(this,arguments),c=+t.apply(this,arguments),u=p.apply(this,arguments)-o.g,l=g.apply(this,arguments)-o.g,b=Object(o.a)(l-u),v=l>u;if(m||(m=i=Object(r.a)()),co.f)if(b>o.m-o.f)m.moveTo(c*Object(o.e)(u),c*Object(o.k)(u)),m.arc(0,0,c,u,l,!v),s>o.f&&(m.moveTo(s*Object(o.e)(l),s*Object(o.k)(l)),m.arc(0,0,s,l,u,v));else{var x,w,_=u,k=l,O=u,E=l,S=b,C=b,T=y.apply(this,arguments)/2,j=T>o.f&&(h?+h.apply(this,arguments):Object(o.l)(s*s+c*c)),A=Object(o.i)(Object(o.a)(c-s)/2,+n.apply(this,arguments)),M=A,P=A;if(j>o.f){var N=Object(o.c)(j/s*Object(o.k)(T)),D=Object(o.c)(j/c*Object(o.k)(T));(S-=2*N)>o.f?(O+=N*=v?1:-1,E-=N):(S=0,O=E=(u+l)/2),(C-=2*D)>o.f?(_+=D*=v?1:-1,k-=D):(C=0,_=k=(u+l)/2)}var R=c*Object(o.e)(_),I=c*Object(o.k)(_),L=s*Object(o.e)(E),B=s*Object(o.k)(E);if(A>o.f){var F,z=c*Object(o.e)(k),U=c*Object(o.k)(k),H=s*Object(o.e)(O),W=s*Object(o.k)(O);if(bo.f?P>o.f?(x=d(H,W,R,I,c,P,v),w=d(z,U,L,B,c,P,v),m.moveTo(x.cx+x.x01,x.cy+x.y01),Po.f&&S>o.f?M>o.f?(x=d(L,B,z,U,s,-M,v),w=d(R,I,H,W,s,-M,v),m.lineTo(x.cx+x.x01,x.cy+x.y01),Ml))return!1;var d=c.get(e),h=c.get(t);if(d&&h)return d==t&&h==e;var p=-1,g=!0,y=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++p0&&(o=c.removeMin(),(a=s[o]).distance!==Number.POSITIVE_INFINITY);)r(o).forEach(u);return s}(e,String(t),n||o,r||function(t){return e.outEdges(t)})};var o=r.constant(1)},function(e,t,n){var r=n(64);function i(){this._arr=[],this._keyIndices={}}e.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},i.prototype.has=function(e){return r.has(this._keyIndices,e)},i.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var i=this._arr,o=i.length;return n[e]=o,i.push({key:e,priority:t}),this._decrease(o),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},i.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+e+" Old: "+this._arr[n].priority+" New: "+t);this._arr[n].priority=t,this._decrease(n)},i.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,i=e;n>1].priority2?t[2]:void 0;for(u&&o(t[0],t[1],u)&&(r=1);++n1&&a.sort((function(e,t){var r=e.x-n.x,i=e.y-n.y,o=Math.sqrt(r*r+i*i),a=t.x-n.x,s=t.y-n.y,c=Math.sqrt(a*a+s*s);return oMath.abs(a)*u?(s<0&&(u=-u),n=0===s?0:u*a/s,r=u):(a<0&&(c=-c),n=c,r=0===a?0:c*s/a);return{x:i+n,y:o+r}}},function(e,t,n){var r=n(66);e.exports=function(e,t){var n=e.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":i.insert(o);break;case"object":i.insert((function(){return o}));break;default:i.html(o)}r.applyStyle(i,t.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var a=i.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(67),i=n(165),o=n(630),a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:function(e){if(35===e.charCodeAt(0)){var t=e.match(a.re);if(t){var n=t[1],r=parseInt(n,16),o=n.length,s=o%4===0,c=o>4,u=c?1:17,l=c?8:4,f=s?0:-1,d=c?255:15;return i.default.set({r:(r>>l*(f+3)&d)*u,g:(r>>l*(f+2)&d)*u,b:(r>>l*(f+1)&d)*u,a:s?(r&d)*u/255:1},e)}}},stringify:function(e){return e.a<1?"#"+o.DEC2HEX[Math.round(e.r)]+o.DEC2HEX[Math.round(e.g)]+o.DEC2HEX[Math.round(e.b)]+r.default.unit.frac2hex(e.a):"#"+o.DEC2HEX[Math.round(e.r)]+o.DEC2HEX[Math.round(e.g)]+o.DEC2HEX[Math.round(e.b)]}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(67),i=n(165),o=n(73);t.default=function(e,t,n,a){void 0===a&&(a=1);var s=i.default.set({h:r.default.channel.clamp.h(e),s:r.default.channel.clamp.s(t),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(a)});return o.default.stringify(s)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(97);t.default=function(e){return r.default(e,"a")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(67),i=n(73);t.default=function(e){var t=i.default.parse(e),n=t.r,o=t.g,a=t.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(o)+.0722*r.default.channel.toLinear(a);return r.default.lang.round(s)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(355);t.default=function(e){return r.default(e)>=.5}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(119);t.default=function(e,t){return r.default(e,"a",t)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(119);t.default=function(e,t){return r.default(e,"a",-t)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(73),i=n(193);t.default=function(e,t){var n=r.default.parse(e),o={};for(var a in t)t[a]&&(o[a]=n[a]+t[a]);return i.default(e,o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(73),i=n(192);t.default=function(e,t,n){void 0===n&&(n=50);var o=r.default.parse(e),a=o.r,s=o.g,c=o.b,u=o.a,l=r.default.parse(t),f=l.r,d=l.g,h=l.b,p=l.a,g=n/100,y=2*g-1,m=u-p,b=((y*m===-1?y:(y+m)/(1+y*m))+1)/2,v=1-b,x=a*b+f*v,w=s*b+d*v,_=c*b+h*v,k=u*g+p*(1-g);return i.default(x,w,_,k)}},function(e,t){},function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0&&"[object Function]"===r.call(e.callee)),n}},function(e,t,n){"use strict";var r=function(e){return e!==e};e.exports=function(e,t){return 0===e&&0===t?1/e===1/t:e===t||!(!r(e)||!r(t))}},function(e,t,n){"use strict";var r=n(373);e.exports=function(){return"function"===typeof Object.is?Object.is:r}},function(e,t,n){"use strict";var r=Object,i=TypeError;e.exports=function(){if(null!=this&&this!==r(this))throw new i("RegExp.prototype.flags getter called on non-object");var e="";return this.global&&(e+="g"),this.ignoreCase&&(e+="i"),this.multiline&&(e+="m"),this.dotAll&&(e+="s"),this.unicode&&(e+="u"),this.sticky&&(e+="y"),e}},function(e,t,n){"use strict";var r=n(375),i=n(166).supportsDescriptors,o=Object.getOwnPropertyDescriptor,a=TypeError;e.exports=function(){if(!i)throw new a("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");if("gim"===/a/gim.flags){var e=o(RegExp.prototype,"flags");if(e&&"function"===typeof e.get&&"boolean"===typeof/a/.dotAll)return e.get}return r}},,function(e,t,n){"use strict";n.r(t),n.d(t,"version",(function(){return r})),n.d(t,"bisect",(function(){return i.b})),n.d(t,"bisectRight",(function(){return i.d})),n.d(t,"bisectLeft",(function(){return i.c})),n.d(t,"ascending",(function(){return i.a})),n.d(t,"bisector",(function(){return i.e})),n.d(t,"cross",(function(){return i.f})),n.d(t,"descending",(function(){return i.g})),n.d(t,"deviation",(function(){return i.h})),n.d(t,"extent",(function(){return i.i})),n.d(t,"histogram",(function(){return i.j})),n.d(t,"thresholdFreedmanDiaconis",(function(){return i.w})),n.d(t,"thresholdScott",(function(){return i.x})),n.d(t,"thresholdSturges",(function(){return i.y})),n.d(t,"max",(function(){return i.k})),n.d(t,"mean",(function(){return i.l})),n.d(t,"median",(function(){return i.m})),n.d(t,"merge",(function(){return i.n})),n.d(t,"min",(function(){return i.o})),n.d(t,"pairs",(function(){return i.p})),n.d(t,"permute",(function(){return i.q})),n.d(t,"quantile",(function(){return i.r})),n.d(t,"range",(function(){return i.s})),n.d(t,"scan",(function(){return i.t})),n.d(t,"shuffle",(function(){return i.u})),n.d(t,"sum",(function(){return i.v})),n.d(t,"ticks",(function(){return i.B})),n.d(t,"tickIncrement",(function(){return i.z})),n.d(t,"tickStep",(function(){return i.A})),n.d(t,"transpose",(function(){return i.C})),n.d(t,"variance",(function(){return i.D})),n.d(t,"zip",(function(){return i.E})),n.d(t,"axisTop",(function(){return p})),n.d(t,"axisRight",(function(){return g})),n.d(t,"axisBottom",(function(){return y})),n.d(t,"axisLeft",(function(){return m})),n.d(t,"brush",(function(){return In})),n.d(t,"brushX",(function(){return Dn})),n.d(t,"brushY",(function(){return Rn})),n.d(t,"brushSelection",(function(){return Nn})),n.d(t,"chord",(function(){return Vn})),n.d(t,"ribbon",(function(){return er})),n.d(t,"nest",(function(){return tr.d})),n.d(t,"set",(function(){return tr.e})),n.d(t,"map",(function(){return tr.c})),n.d(t,"keys",(function(){return tr.b})),n.d(t,"values",(function(){return tr.f})),n.d(t,"entries",(function(){return tr.a})),n.d(t,"color",(function(){return nr.a})),n.d(t,"rgb",(function(){return nr.h})),n.d(t,"hsl",(function(){return nr.e})),n.d(t,"lab",(function(){return nr.f})),n.d(t,"hcl",(function(){return nr.d})),n.d(t,"lch",(function(){return nr.g})),n.d(t,"gray",(function(){return nr.c})),n.d(t,"cubehelix",(function(){return nr.b})),n.d(t,"contours",(function(){return rr.b})),n.d(t,"contourDensity",(function(){return rr.a})),n.d(t,"dispatch",(function(){return O})),n.d(t,"drag",(function(){return lr})),n.d(t,"dragDisable",(function(){return Fe})),n.d(t,"dragEnable",(function(){return ze})),n.d(t,"dsvFormat",(function(){return mr})),n.d(t,"csvParse",(function(){return vr})),n.d(t,"csvParseRows",(function(){return xr})),n.d(t,"csvFormat",(function(){return wr})),n.d(t,"csvFormatBody",(function(){return _r})),n.d(t,"csvFormatRows",(function(){return kr})),n.d(t,"csvFormatRow",(function(){return Or})),n.d(t,"csvFormatValue",(function(){return Er})),n.d(t,"tsvParse",(function(){return Cr})),n.d(t,"tsvParseRows",(function(){return Tr})),n.d(t,"tsvFormat",(function(){return jr})),n.d(t,"tsvFormatBody",(function(){return Ar})),n.d(t,"tsvFormatRows",(function(){return Mr})),n.d(t,"tsvFormatRow",(function(){return Pr})),n.d(t,"tsvFormatValue",(function(){return Nr})),n.d(t,"autoType",(function(){return Dr})),n.d(t,"easeLinear",(function(){return Ir})),n.d(t,"easeQuad",(function(){return Fr})),n.d(t,"easeQuadIn",(function(){return Lr})),n.d(t,"easeQuadOut",(function(){return Br})),n.d(t,"easeQuadInOut",(function(){return Fr})),n.d(t,"easeCubic",(function(){return nn})),n.d(t,"easeCubicIn",(function(){return en})),n.d(t,"easeCubicOut",(function(){return tn})),n.d(t,"easeCubicInOut",(function(){return nn})),n.d(t,"easePoly",(function(){return Hr})),n.d(t,"easePolyIn",(function(){return zr})),n.d(t,"easePolyOut",(function(){return Ur})),n.d(t,"easePolyInOut",(function(){return Hr})),n.d(t,"easeSin",(function(){return $r})),n.d(t,"easeSinIn",(function(){return Vr})),n.d(t,"easeSinOut",(function(){return qr})),n.d(t,"easeSinInOut",(function(){return $r})),n.d(t,"easeExp",(function(){return Zr})),n.d(t,"easeExpIn",(function(){return Xr})),n.d(t,"easeExpOut",(function(){return Kr})),n.d(t,"easeExpInOut",(function(){return Zr})),n.d(t,"easeCircle",(function(){return ei})),n.d(t,"easeCircleIn",(function(){return Jr})),n.d(t,"easeCircleOut",(function(){return Qr})),n.d(t,"easeCircleInOut",(function(){return ei})),n.d(t,"easeBounce",(function(){return ii})),n.d(t,"easeBounceIn",(function(){return ri})),n.d(t,"easeBounceOut",(function(){return ii})),n.d(t,"easeBounceInOut",(function(){return oi})),n.d(t,"easeBack",(function(){return ui})),n.d(t,"easeBackIn",(function(){return si})),n.d(t,"easeBackOut",(function(){return ci})),n.d(t,"easeBackInOut",(function(){return ui})),n.d(t,"easeElastic",(function(){return di})),n.d(t,"easeElasticIn",(function(){return fi})),n.d(t,"easeElasticOut",(function(){return di})),n.d(t,"easeElasticInOut",(function(){return hi})),n.d(t,"blob",(function(){return gi})),n.d(t,"buffer",(function(){return mi})),n.d(t,"dsv",(function(){return wi})),n.d(t,"csv",(function(){return _i})),n.d(t,"tsv",(function(){return ki})),n.d(t,"image",(function(){return Oi})),n.d(t,"json",(function(){return Si})),n.d(t,"text",(function(){return vi})),n.d(t,"xml",(function(){return Ti})),n.d(t,"html",(function(){return ji})),n.d(t,"svg",(function(){return Ai})),n.d(t,"forceCenter",(function(){return Mi})),n.d(t,"forceCollide",(function(){return Yi})),n.d(t,"forceLink",(function(){return $i})),n.d(t,"forceManyBody",(function(){return Ji})),n.d(t,"forceRadial",(function(){return Qi})),n.d(t,"forceSimulation",(function(){return Zi})),n.d(t,"forceX",(function(){return eo})),n.d(t,"forceY",(function(){return to})),n.d(t,"formatDefaultLocale",(function(){return no.c})),n.d(t,"format",(function(){return no.b})),n.d(t,"formatPrefix",(function(){return no.e})),n.d(t,"formatLocale",(function(){return no.d})),n.d(t,"formatSpecifier",(function(){return no.f})),n.d(t,"FormatSpecifier",(function(){return no.a})),n.d(t,"precisionFixed",(function(){return no.g})),n.d(t,"precisionPrefix",(function(){return no.h})),n.d(t,"precisionRound",(function(){return no.i})),n.d(t,"geoArea",(function(){return ro.c})),n.d(t,"geoBounds",(function(){return ro.h})),n.d(t,"geoCentroid",(function(){return ro.i})),n.d(t,"geoCircle",(function(){return ro.j})),n.d(t,"geoClipAntimeridian",(function(){return ro.k})),n.d(t,"geoClipCircle",(function(){return ro.l})),n.d(t,"geoClipExtent",(function(){return ro.m})),n.d(t,"geoClipRectangle",(function(){return ro.n})),n.d(t,"geoContains",(function(){return ro.u})),n.d(t,"geoDistance",(function(){return ro.v})),n.d(t,"geoGraticule",(function(){return ro.C})),n.d(t,"geoGraticule10",(function(){return ro.D})),n.d(t,"geoInterpolate",(function(){return ro.F})),n.d(t,"geoLength",(function(){return ro.G})),n.d(t,"geoPath",(function(){return ro.N})),n.d(t,"geoAlbers",(function(){return ro.a})),n.d(t,"geoAlbersUsa",(function(){return ro.b})),n.d(t,"geoAzimuthalEqualArea",(function(){return ro.d})),n.d(t,"geoAzimuthalEqualAreaRaw",(function(){return ro.e})),n.d(t,"geoAzimuthalEquidistant",(function(){return ro.f})),n.d(t,"geoAzimuthalEquidistantRaw",(function(){return ro.g})),n.d(t,"geoConicConformal",(function(){return ro.o})),n.d(t,"geoConicConformalRaw",(function(){return ro.p})),n.d(t,"geoConicEqualArea",(function(){return ro.q})),n.d(t,"geoConicEqualAreaRaw",(function(){return ro.r})),n.d(t,"geoConicEquidistant",(function(){return ro.s})),n.d(t,"geoConicEquidistantRaw",(function(){return ro.t})),n.d(t,"geoEqualEarth",(function(){return ro.w})),n.d(t,"geoEqualEarthRaw",(function(){return ro.x})),n.d(t,"geoEquirectangular",(function(){return ro.y})),n.d(t,"geoEquirectangularRaw",(function(){return ro.z})),n.d(t,"geoGnomonic",(function(){return ro.A})),n.d(t,"geoGnomonicRaw",(function(){return ro.B})),n.d(t,"geoIdentity",(function(){return ro.E})),n.d(t,"geoProjection",(function(){return ro.O})),n.d(t,"geoProjectionMutator",(function(){return ro.P})),n.d(t,"geoMercator",(function(){return ro.H})),n.d(t,"geoMercatorRaw",(function(){return ro.I})),n.d(t,"geoNaturalEarth1",(function(){return ro.J})),n.d(t,"geoNaturalEarth1Raw",(function(){return ro.K})),n.d(t,"geoOrthographic",(function(){return ro.L})),n.d(t,"geoOrthographicRaw",(function(){return ro.M})),n.d(t,"geoStereographic",(function(){return ro.R})),n.d(t,"geoStereographicRaw",(function(){return ro.S})),n.d(t,"geoTransverseMercator",(function(){return ro.V})),n.d(t,"geoTransverseMercatorRaw",(function(){return ro.W})),n.d(t,"geoRotation",(function(){return ro.Q})),n.d(t,"geoStream",(function(){return ro.T})),n.d(t,"geoTransform",(function(){return ro.U})),n.d(t,"cluster",(function(){return io.a})),n.d(t,"hierarchy",(function(){return io.b})),n.d(t,"pack",(function(){return io.c})),n.d(t,"packSiblings",(function(){return io.e})),n.d(t,"packEnclose",(function(){return io.d})),n.d(t,"partition",(function(){return io.f})),n.d(t,"stratify",(function(){return io.g})),n.d(t,"tree",(function(){return io.h})),n.d(t,"treemap",(function(){return io.i})),n.d(t,"treemapBinary",(function(){return io.j})),n.d(t,"treemapDice",(function(){return io.k})),n.d(t,"treemapSlice",(function(){return io.m})),n.d(t,"treemapSliceDice",(function(){return io.n})),n.d(t,"treemapSquarify",(function(){return io.o})),n.d(t,"treemapResquarify",(function(){return io.l})),n.d(t,"interpolate",(function(){return oo.a})),n.d(t,"interpolateArray",(function(){return oo.b})),n.d(t,"interpolateBasis",(function(){return oo.c})),n.d(t,"interpolateBasisClosed",(function(){return oo.d})),n.d(t,"interpolateDate",(function(){return oo.g})),n.d(t,"interpolateDiscrete",(function(){return oo.h})),n.d(t,"interpolateHue",(function(){return oo.m})),n.d(t,"interpolateNumber",(function(){return oo.o})),n.d(t,"interpolateNumberArray",(function(){return oo.p})),n.d(t,"interpolateObject",(function(){return oo.q})),n.d(t,"interpolateRound",(function(){return oo.u})),n.d(t,"interpolateString",(function(){return oo.v})),n.d(t,"interpolateTransformCss",(function(){return oo.w})),n.d(t,"interpolateTransformSvg",(function(){return oo.x})),n.d(t,"interpolateZoom",(function(){return oo.y})),n.d(t,"interpolateRgb",(function(){return oo.r})),n.d(t,"interpolateRgbBasis",(function(){return oo.s})),n.d(t,"interpolateRgbBasisClosed",(function(){return oo.t})),n.d(t,"interpolateHsl",(function(){return oo.k})),n.d(t,"interpolateHslLong",(function(){return oo.l})),n.d(t,"interpolateLab",(function(){return oo.n})),n.d(t,"interpolateHcl",(function(){return oo.i})),n.d(t,"interpolateHclLong",(function(){return oo.j})),n.d(t,"interpolateCubehelix",(function(){return oo.e})),n.d(t,"interpolateCubehelixLong",(function(){return oo.f})),n.d(t,"piecewise",(function(){return oo.z})),n.d(t,"quantize",(function(){return oo.A})),n.d(t,"path",(function(){return ao.a})),n.d(t,"polygonArea",(function(){return so})),n.d(t,"polygonCentroid",(function(){return co})),n.d(t,"polygonHull",(function(){return fo})),n.d(t,"polygonContains",(function(){return ho})),n.d(t,"polygonLength",(function(){return po})),n.d(t,"quadtree",(function(){return Bi})),n.d(t,"randomUniform",(function(){return yo})),n.d(t,"randomNormal",(function(){return mo})),n.d(t,"randomLogNormal",(function(){return bo})),n.d(t,"randomBates",(function(){return xo})),n.d(t,"randomIrwinHall",(function(){return vo})),n.d(t,"randomExponential",(function(){return wo})),n.d(t,"scaleBand",(function(){return jo})),n.d(t,"scalePoint",(function(){return Mo})),n.d(t,"scaleIdentity",(function(){return Zo})),n.d(t,"scaleLinear",(function(){return Ko})),n.d(t,"scaleLog",(function(){return aa})),n.d(t,"scaleSymlog",(function(){return la})),n.d(t,"scaleOrdinal",(function(){return To})),n.d(t,"scaleImplicit",(function(){return Co})),n.d(t,"scalePow",(function(){return ga})),n.d(t,"scaleSqrt",(function(){return ya})),n.d(t,"scaleQuantile",(function(){return ma})),n.d(t,"scaleQuantize",(function(){return ba})),n.d(t,"scaleThreshold",(function(){return va})),n.d(t,"scaleTime",(function(){return Ba})),n.d(t,"scaleUtc",(function(){return Va})),n.d(t,"scaleSequential",(function(){return Ga})),n.d(t,"scaleSequentialLog",(function(){return Xa})),n.d(t,"scaleSequentialPow",(function(){return Za})),n.d(t,"scaleSequentialSqrt",(function(){return Ja})),n.d(t,"scaleSequentialSymlog",(function(){return Ka})),n.d(t,"scaleSequentialQuantile",(function(){return Qa})),n.d(t,"scaleDiverging",(function(){return ts})),n.d(t,"scaleDivergingLog",(function(){return ns})),n.d(t,"scaleDivergingPow",(function(){return is})),n.d(t,"scaleDivergingSqrt",(function(){return os})),n.d(t,"scaleDivergingSymlog",(function(){return rs})),n.d(t,"tickFormat",(function(){return Go})),n.d(t,"schemeCategory10",(function(){return ss})),n.d(t,"schemeAccent",(function(){return cs})),n.d(t,"schemeDark2",(function(){return us})),n.d(t,"schemePaired",(function(){return ls})),n.d(t,"schemePastel1",(function(){return fs})),n.d(t,"schemePastel2",(function(){return ds})),n.d(t,"schemeSet1",(function(){return hs})),n.d(t,"schemeSet2",(function(){return ps})),n.d(t,"schemeSet3",(function(){return gs})),n.d(t,"schemeTableau10",(function(){return ys})),n.d(t,"interpolateBrBG",(function(){return vs})),n.d(t,"schemeBrBG",(function(){return bs})),n.d(t,"interpolatePRGn",(function(){return ws})),n.d(t,"schemePRGn",(function(){return xs})),n.d(t,"interpolatePiYG",(function(){return ks})),n.d(t,"schemePiYG",(function(){return _s})),n.d(t,"interpolatePuOr",(function(){return Es})),n.d(t,"schemePuOr",(function(){return Os})),n.d(t,"interpolateRdBu",(function(){return Cs})),n.d(t,"schemeRdBu",(function(){return Ss})),n.d(t,"interpolateRdGy",(function(){return js})),n.d(t,"schemeRdGy",(function(){return Ts})),n.d(t,"interpolateRdYlBu",(function(){return Ms})),n.d(t,"schemeRdYlBu",(function(){return As})),n.d(t,"interpolateRdYlGn",(function(){return Ns})),n.d(t,"schemeRdYlGn",(function(){return Ps})),n.d(t,"interpolateSpectral",(function(){return Rs})),n.d(t,"schemeSpectral",(function(){return Ds})),n.d(t,"interpolateBuGn",(function(){return Ls})),n.d(t,"schemeBuGn",(function(){return Is})),n.d(t,"interpolateBuPu",(function(){return Fs})),n.d(t,"schemeBuPu",(function(){return Bs})),n.d(t,"interpolateGnBu",(function(){return Us})),n.d(t,"schemeGnBu",(function(){return zs})),n.d(t,"interpolateOrRd",(function(){return Ws})),n.d(t,"schemeOrRd",(function(){return Hs})),n.d(t,"interpolatePuBuGn",(function(){return Vs})),n.d(t,"schemePuBuGn",(function(){return Ys})),n.d(t,"interpolatePuBu",(function(){return $s})),n.d(t,"schemePuBu",(function(){return qs})),n.d(t,"interpolatePuRd",(function(){return Xs})),n.d(t,"schemePuRd",(function(){return Gs})),n.d(t,"interpolateRdPu",(function(){return Zs})),n.d(t,"schemeRdPu",(function(){return Ks})),n.d(t,"interpolateYlGnBu",(function(){return Qs})),n.d(t,"schemeYlGnBu",(function(){return Js})),n.d(t,"interpolateYlGn",(function(){return tc})),n.d(t,"schemeYlGn",(function(){return ec})),n.d(t,"interpolateYlOrBr",(function(){return rc})),n.d(t,"schemeYlOrBr",(function(){return nc})),n.d(t,"interpolateYlOrRd",(function(){return oc})),n.d(t,"schemeYlOrRd",(function(){return ic})),n.d(t,"interpolateBlues",(function(){return sc})),n.d(t,"schemeBlues",(function(){return ac})),n.d(t,"interpolateGreens",(function(){return uc})),n.d(t,"schemeGreens",(function(){return cc})),n.d(t,"interpolateGreys",(function(){return fc})),n.d(t,"schemeGreys",(function(){return lc})),n.d(t,"interpolatePurples",(function(){return hc})),n.d(t,"schemePurples",(function(){return dc})),n.d(t,"interpolateReds",(function(){return gc})),n.d(t,"schemeReds",(function(){return pc})),n.d(t,"interpolateOranges",(function(){return mc})),n.d(t,"schemeOranges",(function(){return yc})),n.d(t,"interpolateCividis",(function(){return bc})),n.d(t,"interpolateCubehelixDefault",(function(){return wc})),n.d(t,"interpolateRainbow",(function(){return Ec})),n.d(t,"interpolateWarm",(function(){return _c})),n.d(t,"interpolateCool",(function(){return kc})),n.d(t,"interpolateSinebow",(function(){return jc})),n.d(t,"interpolateTurbo",(function(){return Ac})),n.d(t,"interpolateViridis",(function(){return Pc})),n.d(t,"interpolateMagma",(function(){return Nc})),n.d(t,"interpolateInferno",(function(){return Dc})),n.d(t,"interpolatePlasma",(function(){return Rc})),n.d(t,"create",(function(){return Ic})),n.d(t,"creator",(function(){return ye})),n.d(t,"local",(function(){return Bc})),n.d(t,"matcher",(function(){return j})),n.d(t,"mouse",(function(){return $e})),n.d(t,"namespace",(function(){return L})),n.d(t,"namespaces",(function(){return I})),n.d(t,"clientPoint",(function(){return Ve})),n.d(t,"select",(function(){return Ie})),n.d(t,"selectAll",(function(){return zc})),n.d(t,"selection",(function(){return Re})),n.d(t,"selector",(function(){return S})),n.d(t,"selectorAll",(function(){return T})),n.d(t,"style",(function(){return G})),n.d(t,"touch",(function(){return qe})),n.d(t,"touches",(function(){return Uc})),n.d(t,"window",(function(){return Y})),n.d(t,"event",(function(){return _e})),n.d(t,"customEvent",(function(){return Te})),n.d(t,"arc",(function(){return Hc.arc})),n.d(t,"area",(function(){return Hc.area})),n.d(t,"line",(function(){return Hc.line})),n.d(t,"pie",(function(){return Hc.pie})),n.d(t,"areaRadial",(function(){return Hc.areaRadial})),n.d(t,"radialArea",(function(){return Hc.radialArea})),n.d(t,"lineRadial",(function(){return Hc.lineRadial})),n.d(t,"radialLine",(function(){return Hc.radialLine})),n.d(t,"pointRadial",(function(){return Hc.pointRadial})),n.d(t,"linkHorizontal",(function(){return Hc.linkHorizontal})),n.d(t,"linkVertical",(function(){return Hc.linkVertical})),n.d(t,"linkRadial",(function(){return Hc.linkRadial})),n.d(t,"symbol",(function(){return Hc.symbol})),n.d(t,"symbols",(function(){return Hc.symbols})),n.d(t,"symbolCircle",(function(){return Hc.symbolCircle})),n.d(t,"symbolCross",(function(){return Hc.symbolCross})),n.d(t,"symbolDiamond",(function(){return Hc.symbolDiamond})),n.d(t,"symbolSquare",(function(){return Hc.symbolSquare})),n.d(t,"symbolStar",(function(){return Hc.symbolStar})),n.d(t,"symbolTriangle",(function(){return Hc.symbolTriangle})),n.d(t,"symbolWye",(function(){return Hc.symbolWye})),n.d(t,"curveBasisClosed",(function(){return Hc.curveBasisClosed})),n.d(t,"curveBasisOpen",(function(){return Hc.curveBasisOpen})),n.d(t,"curveBasis",(function(){return Hc.curveBasis})),n.d(t,"curveBundle",(function(){return Hc.curveBundle})),n.d(t,"curveCardinalClosed",(function(){return Hc.curveCardinalClosed})),n.d(t,"curveCardinalOpen",(function(){return Hc.curveCardinalOpen})),n.d(t,"curveCardinal",(function(){return Hc.curveCardinal})),n.d(t,"curveCatmullRomClosed",(function(){return Hc.curveCatmullRomClosed})),n.d(t,"curveCatmullRomOpen",(function(){return Hc.curveCatmullRomOpen})),n.d(t,"curveCatmullRom",(function(){return Hc.curveCatmullRom})),n.d(t,"curveLinearClosed",(function(){return Hc.curveLinearClosed})),n.d(t,"curveLinear",(function(){return Hc.curveLinear})),n.d(t,"curveMonotoneX",(function(){return Hc.curveMonotoneX})),n.d(t,"curveMonotoneY",(function(){return Hc.curveMonotoneY})),n.d(t,"curveNatural",(function(){return Hc.curveNatural})),n.d(t,"curveStep",(function(){return Hc.curveStep})),n.d(t,"curveStepAfter",(function(){return Hc.curveStepAfter})),n.d(t,"curveStepBefore",(function(){return Hc.curveStepBefore})),n.d(t,"stack",(function(){return Hc.stack})),n.d(t,"stackOffsetExpand",(function(){return Hc.stackOffsetExpand})),n.d(t,"stackOffsetDiverging",(function(){return Hc.stackOffsetDiverging})),n.d(t,"stackOffsetNone",(function(){return Hc.stackOffsetNone})),n.d(t,"stackOffsetSilhouette",(function(){return Hc.stackOffsetSilhouette})),n.d(t,"stackOffsetWiggle",(function(){return Hc.stackOffsetWiggle})),n.d(t,"stackOrderAppearance",(function(){return Hc.stackOrderAppearance})),n.d(t,"stackOrderAscending",(function(){return Hc.stackOrderAscending})),n.d(t,"stackOrderDescending",(function(){return Hc.stackOrderDescending})),n.d(t,"stackOrderInsideOut",(function(){return Hc.stackOrderInsideOut})),n.d(t,"stackOrderNone",(function(){return Hc.stackOrderNone})),n.d(t,"stackOrderReverse",(function(){return Hc.stackOrderReverse})),n.d(t,"timeInterval",(function(){return Wc.g})),n.d(t,"timeMillisecond",(function(){return Wc.h})),n.d(t,"timeMilliseconds",(function(){return Wc.i})),n.d(t,"utcMillisecond",(function(){return Wc.L})),n.d(t,"utcMilliseconds",(function(){return Wc.M})),n.d(t,"timeSecond",(function(){return Wc.r})),n.d(t,"timeSeconds",(function(){return Wc.s})),n.d(t,"utcSecond",(function(){return Wc.V})),n.d(t,"utcSeconds",(function(){return Wc.W})),n.d(t,"timeMinute",(function(){return Wc.j})),n.d(t,"timeMinutes",(function(){return Wc.k})),n.d(t,"timeHour",(function(){return Wc.e})),n.d(t,"timeHours",(function(){return Wc.f})),n.d(t,"timeDay",(function(){return Wc.a})),n.d(t,"timeDays",(function(){return Wc.b})),n.d(t,"timeWeek",(function(){return Wc.B})),n.d(t,"timeWeeks",(function(){return Wc.C})),n.d(t,"timeSunday",(function(){return Wc.t})),n.d(t,"timeSundays",(function(){return Wc.u})),n.d(t,"timeMonday",(function(){return Wc.l})),n.d(t,"timeMondays",(function(){return Wc.m})),n.d(t,"timeTuesday",(function(){return Wc.x})),n.d(t,"timeTuesdays",(function(){return Wc.y})),n.d(t,"timeWednesday",(function(){return Wc.z})),n.d(t,"timeWednesdays",(function(){return Wc.A})),n.d(t,"timeThursday",(function(){return Wc.v})),n.d(t,"timeThursdays",(function(){return Wc.w})),n.d(t,"timeFriday",(function(){return Wc.c})),n.d(t,"timeFridays",(function(){return Wc.d})),n.d(t,"timeSaturday",(function(){return Wc.p})),n.d(t,"timeSaturdays",(function(){return Wc.q})),n.d(t,"timeMonth",(function(){return Wc.n})),n.d(t,"timeMonths",(function(){return Wc.o})),n.d(t,"timeYear",(function(){return Wc.D})),n.d(t,"timeYears",(function(){return Wc.E})),n.d(t,"utcMinute",(function(){return Wc.N})),n.d(t,"utcMinutes",(function(){return Wc.O})),n.d(t,"utcHour",(function(){return Wc.J})),n.d(t,"utcHours",(function(){return Wc.K})),n.d(t,"utcDay",(function(){return Wc.F})),n.d(t,"utcDays",(function(){return Wc.G})),n.d(t,"utcWeek",(function(){return Wc.fb})),n.d(t,"utcWeeks",(function(){return Wc.gb})),n.d(t,"utcSunday",(function(){return Wc.X})),n.d(t,"utcSundays",(function(){return Wc.Y})),n.d(t,"utcMonday",(function(){return Wc.P})),n.d(t,"utcMondays",(function(){return Wc.Q})),n.d(t,"utcTuesday",(function(){return Wc.bb})),n.d(t,"utcTuesdays",(function(){return Wc.cb})),n.d(t,"utcWednesday",(function(){return Wc.db})),n.d(t,"utcWednesdays",(function(){return Wc.eb})),n.d(t,"utcThursday",(function(){return Wc.Z})),n.d(t,"utcThursdays",(function(){return Wc.ab})),n.d(t,"utcFriday",(function(){return Wc.H})),n.d(t,"utcFridays",(function(){return Wc.I})),n.d(t,"utcSaturday",(function(){return Wc.T})),n.d(t,"utcSaturdays",(function(){return Wc.U})),n.d(t,"utcMonth",(function(){return Wc.R})),n.d(t,"utcMonths",(function(){return Wc.S})),n.d(t,"utcYear",(function(){return Wc.hb})),n.d(t,"utcYears",(function(){return Wc.ib})),n.d(t,"timeFormatDefaultLocale",(function(){return Yc.d})),n.d(t,"timeFormat",(function(){return Yc.c})),n.d(t,"timeParse",(function(){return Yc.f})),n.d(t,"utcFormat",(function(){return Yc.g})),n.d(t,"utcParse",(function(){return Yc.h})),n.d(t,"timeFormatLocale",(function(){return Yc.e})),n.d(t,"isoFormat",(function(){return Yc.a})),n.d(t,"isoParse",(function(){return Yc.b})),n.d(t,"now",(function(){return nt})),n.d(t,"timer",(function(){return ot})),n.d(t,"timerFlush",(function(){return at})),n.d(t,"timeout",(function(){return lt})),n.d(t,"interval",(function(){return Vc})),n.d(t,"transition",(function(){return Zt})),n.d(t,"active",(function(){return sn})),n.d(t,"interrupt",(function(){return mt})),n.d(t,"voronoi",(function(){return qc.a})),n.d(t,"zoom",(function(){return su})),n.d(t,"zoomTransform",(function(){return Jc})),n.d(t,"zoomIdentity",(function(){return Zc}));var r="5.16.0",i=n(12),o=Array.prototype.slice,a=function(e){return e},s=1e-6;function c(e){return"translate("+(e+.5)+",0)"}function u(e){return"translate(0,"+(e+.5)+")"}function l(e){return function(t){return+e(t)}}function f(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}function d(){return!this.__axis}function h(e,t){var n=[],r=null,i=null,h=6,p=6,g=3,y=1===e||4===e?-1:1,m=4===e||2===e?"x":"y",b=1===e||3===e?c:u;function v(o){var c=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,u=null==i?t.tickFormat?t.tickFormat.apply(t,n):a:i,v=Math.max(h,0)+g,x=t.range(),w=+x[0]+.5,_=+x[x.length-1]+.5,k=(t.bandwidth?f:l)(t.copy()),O=o.selection?o.selection():o,E=O.selectAll(".domain").data([null]),S=O.selectAll(".tick").data(c,t).order(),C=S.exit(),T=S.enter().append("g").attr("class","tick"),j=S.select("line"),A=S.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),S=S.merge(T),j=j.merge(T.append("line").attr("stroke","currentColor").attr(m+"2",y*h)),A=A.merge(T.append("text").attr("fill","currentColor").attr(m,y*v).attr("dy",1===e?"0em":3===e?"0.71em":"0.32em")),o!==O&&(E=E.transition(o),S=S.transition(o),j=j.transition(o),A=A.transition(o),C=C.transition(o).attr("opacity",s).attr("transform",(function(e){return isFinite(e=k(e))?b(e):this.getAttribute("transform")})),T.attr("opacity",s).attr("transform",(function(e){var t=this.parentNode.__axis;return b(t&&isFinite(t=t(e))?t:k(e))}))),C.remove(),E.attr("d",4===e||2==e?p?"M"+y*p+","+w+"H0.5V"+_+"H"+y*p:"M0.5,"+w+"V"+_:p?"M"+w+","+y*p+"V0.5H"+_+"V"+y*p:"M"+w+",0.5H"+_),S.attr("opacity",1).attr("transform",(function(e){return b(k(e))})),j.attr(m+"2",y*h),A.attr(m,y*v).text(u),O.filter(d).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===e?"start":4===e?"end":"middle"),O.each((function(){this.__axis=k}))}return v.scale=function(e){return arguments.length?(t=e,v):t},v.ticks=function(){return n=o.call(arguments),v},v.tickArguments=function(e){return arguments.length?(n=null==e?[]:o.call(e),v):n.slice()},v.tickValues=function(e){return arguments.length?(r=null==e?null:o.call(e),v):r&&r.slice()},v.tickFormat=function(e){return arguments.length?(i=e,v):i},v.tickSize=function(e){return arguments.length?(h=p=+e,v):h},v.tickSizeInner=function(e){return arguments.length?(h=+e,v):h},v.tickSizeOuter=function(e){return arguments.length?(p=+e,v):p},v.tickPadding=function(e){return arguments.length?(g=+e,v):g},v}function p(e){return h(1,e)}function g(e){return h(2,e)}function y(e){return h(3,e)}function m(e){return h(4,e)}var b={value:function(){}};function v(){for(var e,t=0,n=arguments.length,r={};t=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}}))}function _(e,t){for(var n,r=0,i=e.length;r0)for(var n,r,i=new Array(n),o=0;ot?1:e>=t?0:NaN}var R="http://www.w3.org/1999/xhtml",I={svg:"http://www.w3.org/2000/svg",xhtml:R,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},L=function(e){var t=e+="",n=t.indexOf(":");return n>=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),I.hasOwnProperty(t)?{space:I[t],local:e}:e};function B(e){return function(){this.removeAttribute(e)}}function F(e){return function(){this.removeAttributeNS(e.space,e.local)}}function z(e,t){return function(){this.setAttribute(e,t)}}function U(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function H(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttribute(e):this.setAttribute(e,n)}}function W(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}var Y=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function V(e){return function(){this.style.removeProperty(e)}}function q(e,t,n){return function(){this.style.setProperty(e,t,n)}}function $(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function G(e,t){return e.style.getPropertyValue(t)||Y(e).getComputedStyle(e,null).getPropertyValue(t)}function X(e){return function(){delete this[e]}}function K(e,t){return function(){this[e]=t}}function Z(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}function J(e){return e.trim().split(/^|\s+/)}function Q(e){return e.classList||new ee(e)}function ee(e){this._node=e,this._names=J(e.getAttribute("class")||"")}function te(e,t){for(var n=Q(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function ae(){this.textContent=""}function se(e){return function(){this.textContent=e}}function ce(e){return function(){var t=e.apply(this,arguments);this.textContent=null==t?"":t}}function ue(){this.innerHTML=""}function le(e){return function(){this.innerHTML=e}}function fe(e){return function(){var t=e.apply(this,arguments);this.innerHTML=null==t?"":t}}function de(){this.nextSibling&&this.parentNode.appendChild(this)}function he(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function pe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===R&&t.documentElement.namespaceURI===R?t.createElement(e):t.createElementNS(n,e)}}function ge(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}var ye=function(e){var t=L(e);return(t.local?ge:pe)(t)};function me(){return null}function be(){var e=this.parentNode;e&&e.removeChild(this)}function ve(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function xe(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}var we={},_e=null;"undefined"!==typeof document&&("onmouseenter"in document.documentElement||(we={mouseenter:"mouseover",mouseleave:"mouseout"}));function ke(e,t,n){return e=Oe(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function Oe(e,t,n){return function(r){var i=_e;_e=r;try{e.call(this,this.__data__,t,n)}finally{_e=i}}}function Ee(e){return e.trim().split(/^|\s+/).map((function(e){var t="",n=e.indexOf(".");return n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}}))}function Se(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,o=t.length;r=w&&(w=x+1);!(v=m[w])&&++w=0;)(r=i[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(e){function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=D);for(var n=this._groups,r=n.length,i=new Array(r),o=0;o1?this.each((null==t?V:"function"===typeof t?$:q)(e,t,null==n?"":n)):G(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?X:"function"===typeof t?Z:K)(e,t)):this.node()[e]},classed:function(e,t){var n=J(e+"");if(arguments.length<2){for(var r=Q(this.node()),i=-1,o=n.length;++i=0&&t._call.call(null,e),t=t._next;--Ge}function st(){Je=(Ze=et.now())+Qe,Ge=Xe=0;try{at()}finally{Ge=0,function(){var e,t,n=Ue,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:Ue=t);He=e,ut(r)}(),Je=0}}function ct(){var e=et.now(),t=e-Ze;t>1e3&&(Qe-=t,Ze=e)}function ut(e){Ge||(Xe&&(Xe=clearTimeout(Xe)),e-Je>24?(e<1/0&&(Xe=setTimeout(st,e-et.now()-Qe)),Ke&&(Ke=clearInterval(Ke))):(Ke||(Ze=et.now(),Ke=setInterval(ct,1e3)),Ge=1,tt(st)))}it.prototype=ot.prototype={constructor:it,restart:function(e,t,n){if("function"!==typeof e)throw new TypeError("callback is not a function");n=(null==n?nt():+n)+(null==t?0:+t),this._next||He===this||(He?He._next=this:Ue=this,He=this),this._call=e,this._time=n,ut()},stop:function(){this._call&&(this._call=null,this._time=1/0,ut())}};var lt=function(e,t,n){var r=new it;return t=null==t?0:+t,r.restart((function(n){r.stop(),e(n+t)}),t,n),r},ft=O("start","end","cancel","interrupt"),dt=[],ht=function(e,t,n,r,i,o){var a=e.__transition;if(a){if(n in a)return}else e.__transition={};!function(e,t,n){var r,i=e.__transition;function o(e){n.state=1,n.timer.restart(a,n.delay,n.time),n.delay<=e&&a(e-n.delay)}function a(o){var u,l,f,d;if(1!==n.state)return c();for(u in i)if((d=i[u]).name===n.name){if(3===d.state)return lt(a);4===d.state?(d.state=6,d.timer.stop(),d.on.call("interrupt",e,e.__data__,d.index,d.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function gt(e,t){var n=yt(e,t);if(n.state>3)throw new Error("too late; already running");return n}function yt(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}var mt=function(e,t){var n,r,i,o=e.__transition,a=!0;if(o){for(i in t=null==t?null:t+"",o)(n=o[i]).name===t?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",e,e.__data__,n.index,n.group),delete o[i]):a=!1;a&&delete e.__transition}},bt=n(264);function vt(e,t){var n,r;return function(){var i=gt(this,e),o=i.tween;if(o!==n)for(var a=0,s=(r=n=o).length;a=0&&(e=e.slice(0,t)),!e||"start"===e}))}(t)?pt:gt;return function(){var a=o(this,e),s=a.on;s!==r&&(i=(r=s).copy()).on(t,n),a.on=i}}var Wt=Re.prototype.constructor;function Yt(e){return function(){this.style.removeProperty(e)}}function Vt(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function qt(e,t,n){var r,i;function o(){var o=t.apply(this,arguments);return o!==i&&(r=(i=o)&&Vt(e,o,n)),r}return o._value=t,o}function $t(e){return function(t){this.textContent=e.call(this,t)}}function Gt(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&$t(r)),t}return r._value=e,r}var Xt=0;function Kt(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Zt(e){return Re().transition(e)}function Jt(){return++Xt}var Qt=Re.prototype;function en(e){return e*e*e}function tn(e){return--e*e*e+1}function nn(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}Kt.prototype=Zt.prototype={constructor:Kt,select:function(e){var t=this._name,n=this._id;"function"!==typeof e&&(e=S(e));for(var r=this._groups,i=r.length,o=new Array(i),a=0;a1&&n.name===t)return new Kt([[e]],an,t,+r);return null},cn=function(e){return function(){return e}},un=function(e,t,n){this.target=e,this.type=t,this.selection=n};function ln(){_e.stopImmediatePropagation()}var fn=function(){_e.preventDefault(),_e.stopImmediatePropagation()},dn={name:"drag"},hn={name:"space"},pn={name:"handle"},gn={name:"center"};function yn(e){return[+e[0],+e[1]]}function mn(e){return[yn(e[0]),yn(e[1])]}function bn(e){return function(t){return qe(t,_e.touches,e)}}var vn={name:"x",handles:["w","e"].map(Cn),input:function(e,t){return null==e?null:[[+e[0],t[0][1]],[+e[1],t[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}},xn={name:"y",handles:["n","s"].map(Cn),input:function(e,t){return null==e?null:[[t[0][0],+e[0]],[t[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}},wn={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(Cn),input:function(e){return null==e?null:mn(e)},output:function(e){return e}},_n={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},kn={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},On={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},En={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},Sn={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function Cn(e){return{type:e}}function Tn(){return!_e.ctrlKey&&!_e.button}function jn(){var e=this.ownerSVGElement||this;return e.hasAttribute("viewBox")?[[(e=e.viewBox.baseVal).x,e.y],[e.x+e.width,e.y+e.height]]:[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function An(){return navigator.maxTouchPoints||"ontouchstart"in this}function Mn(e){for(;!e.__brush;)if(!(e=e.parentNode))return;return e.__brush}function Pn(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function Nn(e){var t=e.__brush;return t?t.dim.output(t.selection):null}function Dn(){return Ln(vn)}function Rn(){return Ln(xn)}var In=function(){return Ln(wn)};function Ln(e){var t,n=jn,r=Tn,i=An,o=!0,a=O("start","brush","end"),s=6;function c(t){var n=t.property("__brush",g).selectAll(".overlay").data([Cn("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",_n.overlay).merge(n).each((function(){var e=Mn(this).extent;Ie(this).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1])})),t.selectAll(".selection").data([Cn("selection")]).enter().append("rect").attr("class","selection").attr("cursor",_n.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=t.selectAll(".handle").data(e.handles,(function(e){return e.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(e){return"handle handle--"+e.type})).attr("cursor",(function(e){return _n[e.type]})),t.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",d).filter(i).on("touchstart.brush",d).on("touchmove.brush",h).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var e=Ie(this),t=Mn(this).selection;t?(e.selectAll(".selection").style("display",null).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1]),e.selectAll(".handle").style("display",null).attr("x",(function(e){return"e"===e.type[e.type.length-1]?t[1][0]-s/2:t[0][0]-s/2})).attr("y",(function(e){return"s"===e.type[0]?t[1][1]-s/2:t[0][1]-s/2})).attr("width",(function(e){return"n"===e.type||"s"===e.type?t[1][0]-t[0][0]+s:s})).attr("height",(function(e){return"e"===e.type||"w"===e.type?t[1][1]-t[0][1]+s:s}))):e.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(e,t,n){var r=e.__brush.emitter;return!r||n&&r.clean?new f(e,t,n):r}function f(e,t,n){this.that=e,this.args=t,this.state=e.__brush,this.active=0,this.clean=n}function d(){if((!t||_e.touches)&&r.apply(this,arguments)){var n,i,a,s,c,f,d,h,p,g,y,m=this,b=_e.target.__data__.type,v="selection"===(o&&_e.metaKey?b="overlay":b)?dn:o&&_e.altKey?gn:pn,x=e===xn?null:En[b],w=e===vn?null:Sn[b],_=Mn(m),k=_.extent,O=_.selection,E=k[0][0],S=k[0][1],C=k[1][0],T=k[1][1],j=0,A=0,M=x&&w&&o&&_e.shiftKey,P=_e.touches?bn(_e.changedTouches[0].identifier):$e,N=P(m),D=N,R=l(m,arguments,!0).beforestart();"overlay"===b?(O&&(p=!0),_.selection=O=[[n=e===xn?E:N[0],a=e===vn?S:N[1]],[c=e===xn?C:n,d=e===vn?T:a]]):(n=O[0][0],a=O[0][1],c=O[1][0],d=O[1][1]),i=n,s=a,f=c,h=d;var I=Ie(m).attr("pointer-events","none"),L=I.selectAll(".overlay").attr("cursor",_n[b]);if(_e.touches)R.moved=F,R.ended=U;else{var B=Ie(_e.view).on("mousemove.brush",F,!0).on("mouseup.brush",U,!0);o&&B.on("keydown.brush",H,!0).on("keyup.brush",W,!0),Fe(_e.view)}ln(),mt(m),u.call(m),R.start()}function F(){var e=P(m);!M||g||y||(Math.abs(e[0]-D[0])>Math.abs(e[1]-D[1])?y=!0:g=!0),D=e,p=!0,fn(),z()}function z(){var e;switch(j=D[0]-N[0],A=D[1]-N[1],v){case hn:case dn:x&&(j=Math.max(E-n,Math.min(C-c,j)),i=n+j,f=c+j),w&&(A=Math.max(S-a,Math.min(T-d,A)),s=a+A,h=d+A);break;case pn:x<0?(j=Math.max(E-n,Math.min(C-n,j)),i=n+j,f=c):x>0&&(j=Math.max(E-c,Math.min(C-c,j)),i=n,f=c+j),w<0?(A=Math.max(S-a,Math.min(T-a,A)),s=a+A,h=d):w>0&&(A=Math.max(S-d,Math.min(T-d,A)),s=a,h=d+A);break;case gn:x&&(i=Math.max(E,Math.min(C,n-j*x)),f=Math.max(E,Math.min(C,c+j*x))),w&&(s=Math.max(S,Math.min(T,a-A*w)),h=Math.max(S,Math.min(T,d+A*w)))}f0&&(n=i-j),w<0?d=h-A:w>0&&(a=s-A),v=hn,L.attr("cursor",_n.selection),z());break;default:return}fn()}function W(){switch(_e.keyCode){case 16:M&&(g=y=M=!1,z());break;case 18:v===gn&&(x<0?c=f:x>0&&(n=i),w<0?d=h:w>0&&(a=s),v=pn,z());break;case 32:v===hn&&(_e.altKey?(x&&(c=f-j*x,n=i+j*x),w&&(d=h-A*w,a=s+A*w),v=gn):(x<0?c=f:x>0&&(n=i),w<0?d=h:w>0&&(a=s),v=pn),L.attr("cursor",_n[b]),z());break;default:return}fn()}}function h(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function g(){var t=this.__brush||{selection:null};return t.extent=mn(n.apply(this,arguments)),t.dim=e,t}return c.move=function(t,n){t.selection?t.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var t=this,r=t.__brush,i=l(t,arguments),o=r.selection,a=e.input("function"===typeof n?n.apply(this,arguments):n,r.extent),s=Object(We.a)(o,a);function c(e){r.selection=1===e&&null===a?null:s(e),u.call(t),i.brush()}return null!==o&&null!==a?c:c(1)})):t.each((function(){var t=this,r=arguments,i=t.__brush,o=e.input("function"===typeof n?n.apply(t,r):n,i.extent),a=l(t,r).beforestart();mt(t),i.selection=null===o?null:o,u.call(t),a.start().brush().end()}))},c.clear=function(e){c.move(e,null)},f.prototype={beforestart:function(){return 1===++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0===--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){Te(new un(c,t,e.output(this.state.selection)),a.apply,a,[t,this.that,this.args])}},c.extent=function(e){return arguments.length?(n="function"===typeof e?e:cn(mn(e)),c):n},c.filter=function(e){return arguments.length?(r="function"===typeof e?e:cn(!!e),c):r},c.touchable=function(e){return arguments.length?(i="function"===typeof e?e:cn(!!e),c):i},c.handleSize=function(e){return arguments.length?(s=+e,c):s},c.keyModifiers=function(e){return arguments.length?(o=!!e,c):o},c.on=function(){var e=a.on.apply(a,arguments);return e===a?c:e},c}var Bn=Math.cos,Fn=Math.sin,zn=Math.PI,Un=zn/2,Hn=2*zn,Wn=Math.max;function Yn(e){return function(t,n){return e(t.source.value+t.target.value,n.source.value+n.target.value)}}var Vn=function(){var e=0,t=null,n=null,r=null;function o(o){var a,s,c,u,l,f,d=o.length,h=[],p=Object(i.s)(d),g=[],y=[],m=y.groups=new Array(d),b=new Array(d*d);for(a=0,l=-1;++lf}c.mouse("drag")}function g(){Ie(_e.view).on("mousemove.drag mouseup.drag",null),ze(_e.view,n),Be(),c.mouse("end")}function y(){if(i.apply(this,arguments)){var e,t,n=_e.changedTouches,r=o.apply(this,arguments),a=n.length;for(e=0;e9999?"+"+gr(t,6):gr(t,4))+"-"+gr(e.getUTCMonth()+1,2)+"-"+gr(e.getUTCDate(),2)+(o?"T"+gr(n,2)+":"+gr(r,2)+":"+gr(i,2)+"."+gr(o,3)+"Z":i?"T"+gr(n,2)+":"+gr(r,2)+":"+gr(i,2)+"Z":r||n?"T"+gr(n,2)+":"+gr(r,2)+"Z":"")}var mr=function(e){var t=new RegExp('["'+e+"\n\r]"),n=e.charCodeAt(0);function r(e,t){var r,i=[],o=e.length,a=0,s=0,c=o<=0,u=!1;function l(){if(c)return dr;if(u)return u=!1,fr;var t,r,i=a;if(34===e.charCodeAt(i)){for(;a++=o?c=!0:10===(r=e.charCodeAt(a++))?u=!0:13===r&&(u=!0,10===e.charCodeAt(a)&&++a),e.slice(i+1,t-1).replace(/""/g,'"')}for(;a=(o=(g+m)/2))?g=o:m=o,(l=n>=(a=(y+b)/2))?y=a:b=a,i=h,!(h=h[f=l<<1|u]))return i[f]=p,e;if(s=+e._x.call(null,h.data),c=+e._y.call(null,h.data),t===s&&n===c)return p.next=h,i?i[f]=p:e._root=p,e;do{i=i?i[f]=new Array(4):e._root=new Array(4),(u=t>=(o=(g+m)/2))?g=o:m=o,(l=n>=(a=(y+b)/2))?y=a:b=a}while((f=l<<1|u)===(d=(c>=a)<<1|s>=o));return i[d]=h,i[f]=p,e}var Ri=function(e,t,n,r,i){this.node=e,this.x0=t,this.y0=n,this.x1=r,this.y1=i};function Ii(e){return e[0]}function Li(e){return e[1]}function Bi(e,t,n){var r=new Fi(null==t?Ii:t,null==n?Li:n,NaN,NaN,NaN,NaN);return null==e?r:r.addAll(e)}function Fi(e,t,n,r,i,o){this._x=e,this._y=t,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function zi(e){for(var t={data:e.data},n=t;e=e.next;)n=n.next={data:e.data};return t}var Ui=Bi.prototype=Fi.prototype;function Hi(e){return e.x+e.vx}function Wi(e){return e.y+e.vy}Ui.copy=function(){var e,t,n=new Fi(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=zi(r),n;for(e=[{source:r,target:n._root=new Array(4)}];r=e.pop();)for(var i=0;i<4;++i)(t=r.source[i])&&(t.length?e.push({source:t,target:r.target[i]=new Array(4)}):r.target[i]=zi(t));return n},Ui.add=function(e){var t=+this._x.call(null,e),n=+this._y.call(null,e);return Di(this.cover(t,n),t,n,e)},Ui.addAll=function(e){var t,n,r,i,o=e.length,a=new Array(o),s=new Array(o),c=1/0,u=1/0,l=-1/0,f=-1/0;for(n=0;nl&&(l=r),if&&(f=i));if(c>l||u>f)return this;for(this.cover(c,u).cover(l,f),n=0;ne||e>=i||r>t||t>=o;)switch(s=(td||(o=c.y0)>h||(a=c.x1)=m)<<1|e>=y)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var b=e-+this._x.call(null,g.data),v=t-+this._y.call(null,g.data),x=b*b+v*v;if(x=(s=(p+y)/2))?p=s:y=s,(l=a>=(c=(g+m)/2))?g=c:m=c,t=h,!(h=h[f=l<<1|u]))return this;if(!h.length)break;(t[f+1&3]||t[f+2&3]||t[f+3&3])&&(n=t,d=f)}for(;h.data!==e;)if(r=h,!(h=h.next))return this;return(i=h.next)&&delete h.next,r?(i?r.next=i:delete r.next,this):t?(i?t[f]=i:delete t[f],(h=t[0]||t[1]||t[2]||t[3])&&h===(t[3]||t[2]||t[1]||t[0])&&!h.length&&(n?n[d]=h:this._root=h),this):(this._root=i,this)},Ui.removeAll=function(e){for(var t=0,n=e.length;tc+h||iu+h||os.index){var p=c-a.x-a.vx,g=u-a.y-a.vy,y=p*p+g*g;ye.r&&(e.r=e[t].r)}function s(){if(t){var r,i,o=t.length;for(n=new Array(o),r=0;r1?(null==n?s.remove(e):s.set(e,h(n)),t):s.get(e)},find:function(t,n,r){var i,o,a,s,c,u=0,l=e.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(e,n),t):u.on(e)}}},Ji=function(){var e,t,n,r,i=Pi(-30),o=1,a=1/0,s=.81;function c(r){var i,o=e.length,a=Bi(e,Gi,Xi).visitAfter(l);for(n=r,i=0;i=a)){(e.data!==t||e.next)&&(0===l&&(h+=(l=Ni())*l),0===f&&(h+=(f=Ni())*f),h1&&(t=e[o[a-2]],n=e[o[a-1]],r=e[s],(n[0]-t[0])*(r[1]-t[1])-(n[1]-t[1])*(r[0]-t[0])<=0);)--a;o[a++]=s}return o.slice(0,a)}var fo=function(e){if((n=e.length)<3)return null;var t,n,r=new Array(n),i=new Array(n);for(t=0;t=0;--t)u.push(e[r[o[t]][2]]);for(t=+s;ts!==u>s&&a<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},po=function(e){for(var t,n,r=-1,i=e.length,o=e[i-1],a=o[0],s=o[1],c=0;++r1);return e+n*o*Math.sqrt(-2*Math.log(i)/i)}}return n.source=e,n}(go),bo=function e(t){function n(){var e=mo.source(t).apply(this,arguments);return function(){return Math.exp(e())}}return n.source=e,n}(go),vo=function e(t){function n(e){return function(){for(var n=0,r=0;rr&&(t=n,n=r,r=t),function(e){return Math.max(n,Math.min(r,e))}}function Bo(e,t,n){var r=e[0],i=e[1],o=t[0],a=t[1];return i2?Fo:Bo,i=o=null,f}function f(t){return isNaN(t=+t)?n:(i||(i=r(a.map(e),s,c)))(e(u(t)))}return f.invert=function(n){return u(t((o||(o=r(s,a.map(e),kt.a)))(n)))},f.domain=function(e){return arguments.length?(a=Eo.call(e,No),u===Ro||(u=Lo(a)),l()):a.slice()},f.range=function(e){return arguments.length?(s=So.call(e),l()):s.slice()},f.rangeRound=function(e){return s=So.call(e),c=Po.a,l()},f.clamp=function(e){return arguments.length?(u=e?Lo(a):Ro,f):u!==Ro},f.interpolate=function(e){return arguments.length?(c=e,l()):c},f.unknown=function(e){return arguments.length?(n=e,f):n},function(n,r){return e=n,t=r,l()}}function Ho(e,t){return Uo()(e,t)}var Wo=n(140),Yo=n(278),Vo=n(172),qo=n(279),$o=n(277),Go=function(e,t,n,r){var o,a=Object(i.A)(e,t,n);switch((r=Object(Wo.b)(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(e),Math.abs(t));return null!=r.precision||isNaN(o=Object(Yo.a)(a,s))||(r.precision=o),Object(Vo.c)(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(o=Object(qo.a)(a,Math.max(Math.abs(e),Math.abs(t))))||(r.precision=o-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(o=Object($o.a)(a))||(r.precision=o-2*("%"===r.type))}return Object(Vo.b)(r)};function Xo(e){var t=e.domain;return e.ticks=function(e){var n=t();return Object(i.B)(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){var r=t();return Go(r[0],r[r.length-1],null==e?10:e,n)},e.nice=function(n){null==n&&(n=10);var r,o=t(),a=0,s=o.length-1,c=o[a],u=o[s];return u0?(c=Math.floor(c/r)*r,u=Math.ceil(u/r)*r,r=Object(i.z)(c,u,n)):r<0&&(c=Math.ceil(c*r)/r,u=Math.floor(u*r)/r,r=Object(i.z)(c,u,n)),r>0?(o[a]=Math.floor(c/r)*r,o[s]=Math.ceil(u/r)*r,t(o)):r<0&&(o[a]=Math.ceil(c*r)/r,o[s]=Math.floor(u*r)/r,t(o)),e},e}function Ko(){var e=Ho(Ro,Ro);return e.copy=function(){return zo(e,Ko())},_o.apply(e,arguments),Xo(e)}function Zo(e){var t;function n(e){return isNaN(e=+e)?t:e}return n.invert=n,n.domain=n.range=function(t){return arguments.length?(e=Eo.call(t,No),n):e.slice()},n.unknown=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return Zo(e).unknown(t)},e=arguments.length?Eo.call(e,No):[0,1],Xo(n)}var Jo=function(e,t){var n,r=0,i=(e=e.slice()).length-1,o=e[r],a=e[i];return a0){for(;hu)break;y.push(d)}}else for(;h=1;--f)if(!((d=l*f)u)break;y.push(d)}}else y=Object(i.B)(h,p,Math.min(p-h,g)).map(n);return r?y.reverse():y},r.tickFormat=function(e,i){if(null==i&&(i=10===a?".0e":","),"function"!==typeof i&&(i=Object(Vo.b)(i)),e===1/0)return i;null==e&&(e=10);var o=Math.max(1,a*e/r.ticks().length);return function(e){var r=e/n(Math.round(t(e)));return r*a0?r[i-1]:t[0],i=r?[o[r-1],n]:[o[i-1],o[i]]},s.unknown=function(t){return arguments.length?(e=t,s):s},s.thresholds=function(){return o.slice()},s.copy=function(){return ba().domain([t,n]).range(a).unknown(e)},_o.apply(Xo(s),arguments)}function va(){var e,t=[.5],n=[0,1],r=1;function o(o){return o<=o?n[Object(i.b)(t,o,0,r)]:e}return o.domain=function(e){return arguments.length?(t=So.call(e),r=Math.min(t.length,n.length-1),o):t.slice()},o.range=function(e){return arguments.length?(n=So.call(e),r=Math.min(t.length,n.length-1),o):n.slice()},o.invertExtent=function(e){var r=n.indexOf(e);return[t[r-1],t[r]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return va().domain(t).range(n).unknown(e)},_o.apply(o,arguments)}var xa=n(107),wa=n(227),_a=n(30),ka=n(168),Oa=n(228),Ea=n(229),Sa=n(159),Ca=n(160),Ta=n(77),ja=1e3,Aa=6e4,Ma=36e5,Pa=864e5,Na=2592e6,Da=31536e6;function Ra(e){return new Date(e)}function Ia(e){return e instanceof Date?+e:+new Date(+e)}function La(e,t,n,r,o,a,s,c,u){var l=Ho(Ro,Ro),f=l.invert,d=l.domain,h=u(".%L"),p=u(":%S"),g=u("%I:%M"),y=u("%I %p"),m=u("%a %d"),b=u("%b %d"),v=u("%B"),x=u("%Y"),w=[[s,1,ja],[s,5,5e3],[s,15,15e3],[s,30,3e4],[a,1,Aa],[a,5,3e5],[a,15,9e5],[a,30,18e5],[o,1,Ma],[o,3,108e5],[o,6,216e5],[o,12,432e5],[r,1,Pa],[r,2,1728e5],[n,1,6048e5],[t,1,Na],[t,3,7776e6],[e,1,Da]];function _(i){return(s(i)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return Oc.h=360*e-100,Oc.s=1.5-1.5*t,Oc.l=.8-.9*t,Oc+""},Sc=Object(_t.g)(),Cc=Math.PI/3,Tc=2*Math.PI/3,jc=function(e){var t;return e=(.5-e)*Math.PI,Sc.r=255*(t=Math.sin(e))*t,Sc.g=255*(t=Math.sin(e+Cc))*t,Sc.b=255*(t=Math.sin(e+Tc))*t,Sc+""},Ac=function(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+e*(1172.33-e*(10793.56-e*(33300.12-e*(38394.49-14825.05*e)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+e*(557.33+e*(1225.33-e*(3574.96-e*(1073.77+707.56*e)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+e*(3211.1-e*(15327.97-e*(27814-e*(22569.18-6838.66*e)))))))+")"};function Mc(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Pc=Mc(as("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Nc=Mc(as("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Dc=Mc(as("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Rc=Mc(as("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),Ic=function(e){return Ie(ye(e).call(document.documentElement))},Lc=0;function Bc(){return new Fc}function Fc(){this._="@"+(++Lc).toString(36)}Fc.prototype=Bc.prototype={constructor:Fc,get:function(e){for(var t=this._;!(t in e);)if(!(e=e.parentNode))return;return e[t]},set:function(e,t){return e[this._]=t},remove:function(e){return this._ in e&&delete e[this._]},toString:function(){return this._}};var zc=function(e){return"string"===typeof e?new Ne([document.querySelectorAll(e)],[document.documentElement]):new Ne([null==e?[]:e],Pe)},Uc=function(e,t){null==t&&(t=Ye().touches);for(var n=0,r=t?t.length:0,i=new Array(r);nr?(r+i)/2:Math.min(0,r)||Math.max(0,i),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}var su=function(){var e,t,n=tu,r=nu,i=au,o=iu,a=ou,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=$c.a,f=O("start","zoom","end"),d=500,h=0;function p(e){e.property("__zoom",ru).on("wheel.zoom",w).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(a).on("touchstart.zoom",E).on("touchmove.zoom",S).on("touchend.zoom touchcancel.zoom",C).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function g(e,t){return(t=Math.max(s[0],Math.min(s[1],t)))===e.k?e:new Kc(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new Kc(e.k,r,i)}function m(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function b(e,t,n){e.on("start.zoom",(function(){v(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){v(this,arguments).end()})).tween("zoom",(function(){var e=this,i=arguments,o=v(e,i),a=r.apply(e,i),s=null==n?m(a):"function"===typeof n?n.apply(e,i):n,c=Math.max(a[1][0]-a[0][0],a[1][1]-a[0][1]),u=e.__zoom,f="function"===typeof t?t.apply(e,i):t,d=l(u.invert(s).concat(c/u.k),f.invert(s).concat(c/f.k));return function(e){if(1===e)e=f;else{var t=d(e),n=c/t[2];e=new Kc(n,s[0]-t[0]*n,s[1]-t[1]*n)}o.zoom(null,e)}}))}function v(e,t,n){return!n&&e.__zooming||new x(e,t)}function x(e,t){this.that=e,this.args=t,this.active=0,this.extent=r.apply(e,t),this.taps=0}function w(){if(n.apply(this,arguments)){var e=v(this,arguments),t=this.__zoom,r=Math.max(s[0],Math.min(s[1],t.k*Math.pow(2,o.apply(this,arguments)))),a=$e(this);if(e.wheel)e.mouse[0][0]===a[0]&&e.mouse[0][1]===a[1]||(e.mouse[1]=t.invert(e.mouse[0]=a)),clearTimeout(e.wheel);else{if(t.k===r)return;e.mouse=[a,t.invert(a)],mt(this),e.start()}eu(),e.wheel=setTimeout(u,150),e.zoom("mouse",i(y(g(t,r),e.mouse[0],e.mouse[1]),e.extent,c))}function u(){e.wheel=null,e.end()}}function _(){if(!t&&n.apply(this,arguments)){var e=v(this,arguments,!0),r=Ie(_e.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),o=$e(this),a=_e.clientX,s=_e.clientY;Fe(_e.view),Qc(),e.mouse=[o,this.__zoom.invert(o)],mt(this),e.start()}function u(){if(eu(),!e.moved){var t=_e.clientX-a,n=_e.clientY-s;e.moved=t*t+n*n>h}e.zoom("mouse",i(y(e.that.__zoom,e.mouse[0]=$e(e.that),e.mouse[1]),e.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),ze(_e.view,e.moved),eu(),e.end()}}function k(){if(n.apply(this,arguments)){var e=this.__zoom,t=$e(this),o=e.invert(t),a=e.k*(_e.shiftKey?.5:2),s=i(y(g(e,a),t,o),r.apply(this,arguments),c);eu(),u>0?Ie(this).transition().duration(u).call(b,s,t):Ie(this).call(p.transform,s)}}function E(){if(n.apply(this,arguments)){var t,r,i,o,a=_e.touches,s=a.length,c=v(this,arguments,_e.changedTouches.length===s);for(Qc(),r=0;re?1:t>=e?0:NaN},o=function(e){return e},a=n(14);t.a=function(){var e=o,t=i,n=null,s=Object(r.a)(0),c=Object(r.a)(a.m),u=Object(r.a)(0);function l(r){var i,o,l,f,d,h=r.length,p=0,g=new Array(h),y=new Array(h),m=+s.apply(this,arguments),b=Math.min(a.m,Math.max(-a.m,c.apply(this,arguments)-m)),v=Math.min(Math.abs(b)/h,u.apply(this,arguments)),x=v*(b<0?-1:1);for(i=0;i0&&(p+=d);for(null!=t?g.sort((function(e,n){return t(y[e],y[n])})):null!=n&&g.sort((function(e,t){return n(r[e],r[t])})),i=0,l=p?(b-h*x)/p:0;i0?d*l:0)+x,y[o]={data:r[o],index:i,value:d,startAngle:m,endAngle:f,padAngle:v};return y}return l.value=function(t){return arguments.length?(e="function"===typeof t?t:Object(r.a)(+t),l):e},l.sortValues=function(e){return arguments.length?(t=e,n=null,l):t},l.sort=function(e){return arguments.length?(n=e,t=null,l):n},l.startAngle=function(e){return arguments.length?(s="function"===typeof e?e:Object(r.a)(+e),l):s},l.endAngle=function(e){return arguments.length?(c="function"===typeof e?e:Object(r.a)(+e),l):c},l.padAngle=function(e){return arguments.length?(u="function"===typeof e?e:Object(r.a)(+e),l):u},l}},function(e,t,n){"use strict";var r=n(23),i=n.n(r),o=function(){function e(e){var t=void 0===e?{}:e,n=t.locale,r=t.instance,o=t.moment;this.yearFormat="YYYY",this.yearMonthFormat="MMMM YYYY",this.dateTime12hFormat="MMMM Do hh:mm a",this.dateTime24hFormat="MMMM Do HH:mm",this.time12hFormat="hh:mm A",this.time24hFormat="HH:mm",this.dateFormat="MMMM Do",this.moment=r||o||i.a,this.locale=n}return e.prototype.parse=function(e,t){return""===e?null:this.moment(e,t,!0)},e.prototype.date=function(e){if(null===e)return null;var t=this.moment(e);return t.locale(this.locale),t},e.prototype.isValid=function(e){return this.moment(e).isValid()},e.prototype.isNull=function(e){return null===e},e.prototype.getDiff=function(e,t){return e.diff(t)},e.prototype.isAfter=function(e,t){return e.isAfter(t)},e.prototype.isBefore=function(e,t){return e.isBefore(t)},e.prototype.isAfterDay=function(e,t){return e.isAfter(t,"day")},e.prototype.isBeforeDay=function(e,t){return e.isBefore(t,"day")},e.prototype.isBeforeYear=function(e,t){return e.isBefore(t,"year")},e.prototype.isAfterYear=function(e,t){return e.isAfter(t,"year")},e.prototype.startOfDay=function(e){return e.clone().startOf("day")},e.prototype.endOfDay=function(e){return e.clone().endOf("day")},e.prototype.format=function(e,t){return e.locale(this.locale),e.format(t)},e.prototype.formatNumber=function(e){return e},e.prototype.getHours=function(e){return e.get("hours")},e.prototype.addDays=function(e,t){return t<0?e.clone().subtract(Math.abs(t),"days"):e.clone().add(t,"days")},e.prototype.setHours=function(e,t){return e.clone().hours(t)},e.prototype.getMinutes=function(e){return e.get("minutes")},e.prototype.setMinutes=function(e,t){return e.clone().minutes(t)},e.prototype.getSeconds=function(e){return e.get("seconds")},e.prototype.setSeconds=function(e,t){return e.clone().seconds(t)},e.prototype.getMonth=function(e){return e.get("month")},e.prototype.isSameDay=function(e,t){return e.isSame(t,"day")},e.prototype.isSameMonth=function(e,t){return e.isSame(t,"month")},e.prototype.isSameYear=function(e,t){return e.isSame(t,"year")},e.prototype.isSameHour=function(e,t){return e.isSame(t,"hour")},e.prototype.setMonth=function(e,t){return e.clone().month(t)},e.prototype.getMeridiemText=function(e){return"am"===e?"AM":"PM"},e.prototype.startOfMonth=function(e){return e.clone().startOf("month")},e.prototype.endOfMonth=function(e){return e.clone().endOf("month")},e.prototype.getNextMonth=function(e){return e.clone().add(1,"month")},e.prototype.getPreviousMonth=function(e){return e.clone().subtract(1,"month")},e.prototype.getMonthArray=function(e){for(var t=[e.clone().startOf("year")];t.length<12;){var n=t[t.length-1];t.push(this.getNextMonth(n))}return t},e.prototype.getYear=function(e){return e.get("year")},e.prototype.setYear=function(e,t){return e.clone().set("year",t)},e.prototype.mergeDateAndTime=function(e,t){return this.setMinutes(this.setHours(e,this.getHours(t)),this.getMinutes(t))},e.prototype.getWeekdays=function(){return this.moment.weekdaysShort(!0)},e.prototype.isEqual=function(e,t){return null===e&&null===t||this.moment(e).isSame(t)},e.prototype.getWeekArray=function(e){for(var t=e.clone().startOf("month").startOf("week"),n=e.clone().endOf("month").endOf("week"),r=0,i=t,o=[];i.isBefore(n);){var a=Math.floor(r/7);o[a]=o[a]||[],o[a].push(i),i=i.clone().add(1,"day"),r+=1}return o},e.prototype.getYearRange=function(e,t){for(var n=this.moment(e).startOf("year"),r=this.moment(t).endOf("year"),i=[],o=n;o.isBefore(r);)i.push(o),o=o.clone().add(1,"year");return i},e.prototype.getCalendarHeaderText=function(e){return this.format(e,this.yearMonthFormat)},e.prototype.getYearText=function(e){return this.format(e,"YYYY")},e.prototype.getDatePickerHeaderText=function(e){return this.format(e,"ddd, MMM D")},e.prototype.getDateTimePickerHeaderText=function(e){return this.format(e,"MMM D")},e.prototype.getMonthText=function(e){return this.format(e,"MMMM")},e.prototype.getDayText=function(e){return this.format(e,"D")},e.prototype.getHourText=function(e,t){return this.format(e,t?"hh":"HH")},e.prototype.getMinuteText=function(e){return this.format(e,"mm")},e.prototype.getSecondText=function(e){return this.format(e,"ss")},e}();t.a=o},function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";(function(e){var n="undefined"!==typeof window&&"undefined"!==typeof document&&"undefined"!==typeof navigator,r=function(){for(var e=["Edge","Trident","Firefox"],t=0;t=0)return 1;return 0}();var i=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),r))}};function o(e){return e&&"[object Function]"==={}.toString.call(e)}function a(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function s(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function c(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=a(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/(auto|scroll|overlay)/.test(n+i+r)?e:c(s(e))}function u(e){return e&&e.referenceNode?e.referenceNode:e}var l=n&&!(!window.MSInputMethodContext||!document.documentMode),f=n&&/MSIE 10/.test(navigator.userAgent);function d(e){return 11===e?l:10===e?f:l||f}function h(e){if(!e)return document.documentElement;for(var t=d(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var r=n&&n.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?h(n):n:e?e.ownerDocument.documentElement:document.documentElement}function p(e){return null!==e.parentNode?p(e.parentNode):e}function g(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,r=n?e:t,i=n?t:e,o=document.createRange();o.setStart(r,0),o.setEnd(i,0);var a=o.commonAncestorContainer;if(e!==a&&t!==a||r.contains(i))return function(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||h(e.firstElementChild)===e)}(a)?a:h(a);var s=p(e);return s.host?g(s.host,t):g(e,p(t).host)}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",r=e.nodeName;if("BODY"===r||"HTML"===r){var i=e.ownerDocument.documentElement,o=e.ownerDocument.scrollingElement||i;return o[n]}return e[n]}function m(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=y(t,"top"),i=y(t,"left"),o=n?-1:1;return e.top+=r*o,e.bottom+=r*o,e.left+=i*o,e.right+=i*o,e}function b(e,t){var n="x"===t?"Left":"Top",r="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"])+parseFloat(e["border"+r+"Width"])}function v(e,t,n,r){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],d(10)?parseInt(n["offset"+e])+parseInt(r["margin"+("Height"===e?"Top":"Left")])+parseInt(r["margin"+("Height"===e?"Bottom":"Right")]):0)}function x(e){var t=e.body,n=e.documentElement,r=d(10)&&getComputedStyle(n);return{height:v("Height",t,n,r),width:v("Width",t,n,r)}}var w=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},_=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r=d(10),i="HTML"===t.nodeName,o=S(e),s=S(t),u=c(e),l=a(t),f=parseFloat(l.borderTopWidth),h=parseFloat(l.borderLeftWidth);n&&i&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var p=E({top:o.top-s.top-f,left:o.left-s.left-h,width:o.width,height:o.height});if(p.marginTop=0,p.marginLeft=0,!r&&i){var g=parseFloat(l.marginTop),y=parseFloat(l.marginLeft);p.top-=f-g,p.bottom-=f-g,p.left-=h-y,p.right-=h-y,p.marginTop=g,p.marginLeft=y}return(r&&!n?t.contains(u):t===u&&"BODY"!==u.nodeName)&&(p=m(p,t)),p}function T(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,r=C(e,n),i=Math.max(n.clientWidth,window.innerWidth||0),o=Math.max(n.clientHeight,window.innerHeight||0),a=t?0:y(n),s=t?0:y(n,"left"),c={top:a-r.top+r.marginTop,left:s-r.left+r.marginLeft,width:i,height:o};return E(c)}function j(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===a(e,"position"))return!0;var n=s(e);return!!n&&j(n)}function A(e){if(!e||!e.parentElement||d())return document.documentElement;for(var t=e.parentElement;t&&"none"===a(t,"transform");)t=t.parentElement;return t||document.documentElement}function M(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o={top:0,left:0},a=i?A(e):g(e,u(t));if("viewport"===r)o=T(a,i);else{var l=void 0;"scrollParent"===r?"BODY"===(l=c(s(t))).nodeName&&(l=e.ownerDocument.documentElement):l="window"===r?e.ownerDocument.documentElement:r;var f=C(l,a,i);if("HTML"!==l.nodeName||j(a))o=f;else{var d=x(e.ownerDocument),h=d.height,p=d.width;o.top+=f.top-f.marginTop,o.bottom=h+f.top,o.left+=f.left-f.marginLeft,o.right=p+f.left}}var y="number"===typeof(n=n||0);return o.left+=y?n:n.left||0,o.top+=y?n:n.top||0,o.right-=y?n:n.right||0,o.bottom-=y?n:n.bottom||0,o}function P(e){return e.width*e.height}function N(e,t,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=M(n,r,o,i),s={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},c=Object.keys(s).map((function(e){return O({key:e},s[e],{area:P(s[e])})})).sort((function(e,t){return t.area-e.area})),u=c.filter((function(e){var t=e.width,r=e.height;return t>=n.clientWidth&&r>=n.clientHeight})),l=u.length>0?u[0].key:c[0].key,f=e.split("-")[1];return l+(f?"-"+f:"")}function D(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,i=r?A(t):g(t,u(n));return C(n,i,r)}function R(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),r=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+r,height:e.offsetHeight+n}}function I(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function L(e,t,n){n=n.split("-")[0];var r=R(e),i={width:r.width,height:r.height},o=-1!==["right","left"].indexOf(n),a=o?"top":"left",s=o?"left":"top",c=o?"height":"width",u=o?"width":"height";return i[a]=t[a]+t[c]/2-r[c]/2,i[s]=n===s?t[s]-r[u]:t[I(s)],i}function B(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function F(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var r=B(e,(function(e){return e[t]===n}));return e.indexOf(r)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&o(n)&&(t.offsets.popper=E(t.offsets.popper),t.offsets.reference=E(t.offsets.reference),t=n(t,e))})),t}function z(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=D(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=N(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=L(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=F(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function U(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function H(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),r=0;r1&&void 0!==arguments[1]&&arguments[1],n=ee.indexOf(e),r=ee.slice(n+1).concat(ee.slice(0,n));return t?r.reverse():r}var ne="flip",re="clockwise",ie="counterclockwise";function oe(e,t,n,r){var i=[0,0],o=-1!==["right","left"].indexOf(r),a=e.split(/(\+|\-)/).map((function(e){return e.trim()})),s=a.indexOf(B(a,(function(e){return-1!==e.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var c=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(c)[0]]),[a[s].split(c)[1]].concat(a.slice(s+1))]:[a];return u=u.map((function(e,r){var i=(1===r?!o:o)?"height":"width",a=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,a=!0,e):a?(e[e.length-1]+=t,a=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,r){var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),o=+i[1],a=i[2];if(!o)return e;if(0===a.indexOf("%")){return E("%p"===a?n:r)[t]/100*o}if("vh"===a||"vw"===a)return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*o;return o}(e,i,t,n)}))})),u.forEach((function(e,t){e.forEach((function(n,r){X(n)&&(i[t]+=n*("-"===e[r-1]?-1:1))}))})),i}var ae={shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],r=t.split("-")[1];if(r){var i=e.offsets,o=i.reference,a=i.popper,s=-1!==["bottom","top"].indexOf(n),c=s?"left":"top",u=s?"width":"height",l={start:k({},c,o[c]),end:k({},c,o[c]+o[u]-a[u])};e.offsets.popper=O({},a,l[r])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,r=e.placement,i=e.offsets,o=i.popper,a=i.reference,s=r.split("-")[0],c=void 0;return c=X(+n)?[+n,0]:oe(n,o,a,s),"left"===s?(o.top+=c[0],o.left-=c[1]):"right"===s?(o.top+=c[0],o.left+=c[1]):"top"===s?(o.left+=c[0],o.top-=c[1]):"bottom"===s&&(o.left+=c[0],o.top+=c[1]),e.popper=o,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||h(e.instance.popper);e.instance.reference===n&&(n=h(n));var r=H("transform"),i=e.instance.popper.style,o=i.top,a=i.left,s=i[r];i.top="",i.left="",i[r]="";var c=M(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);i.top=o,i.left=a,i[r]=s,t.boundaries=c;var u=t.priority,l=e.offsets.popper,f={primary:function(e){var n=l[e];return l[e]c[e]&&!t.escapeWithReference&&(r=Math.min(l[n],c[e]-("right"===e?l.width:l.height))),k({},n,r)}};return u.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";l=O({},l,f[t](e))})),e.offsets.popper=l,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,i=e.placement.split("-")[0],o=Math.floor,a=-1!==["top","bottom"].indexOf(i),s=a?"right":"bottom",c=a?"left":"top",u=a?"width":"height";return n[s]o(r[s])&&(e.offsets.popper[c]=o(r[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!J(e.instance.modifiers,"arrow","keepTogether"))return e;var r=t.element;if("string"===typeof r){if(!(r=e.instance.popper.querySelector(r)))return e}else if(!e.instance.popper.contains(r))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var i=e.placement.split("-")[0],o=e.offsets,s=o.popper,c=o.reference,u=-1!==["left","right"].indexOf(i),l=u?"height":"width",f=u?"Top":"Left",d=f.toLowerCase(),h=u?"left":"top",p=u?"bottom":"right",g=R(r)[l];c[p]-gs[p]&&(e.offsets.popper[d]+=c[d]+g-s[p]),e.offsets.popper=E(e.offsets.popper);var y=c[d]+c[l]/2-g/2,m=a(e.instance.popper),b=parseFloat(m["margin"+f]),v=parseFloat(m["border"+f+"Width"]),x=y-e.offsets.popper[d]-b-v;return x=Math.max(Math.min(s[l]-g,x),0),e.arrowElement=r,e.offsets.arrow=(k(n={},d,Math.round(x)),k(n,h,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(U(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=M(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),r=e.placement.split("-")[0],i=I(r),o=e.placement.split("-")[1]||"",a=[];switch(t.behavior){case ne:a=[r,i];break;case re:a=te(r);break;case ie:a=te(r,!0);break;default:a=t.behavior}return a.forEach((function(s,c){if(r!==s||a.length===c+1)return e;r=e.placement.split("-")[0],i=I(r);var u=e.offsets.popper,l=e.offsets.reference,f=Math.floor,d="left"===r&&f(u.right)>f(l.left)||"right"===r&&f(u.left)f(l.top)||"bottom"===r&&f(u.top)f(n.right),g=f(u.top)f(n.bottom),m="left"===r&&h||"right"===r&&p||"top"===r&&g||"bottom"===r&&y,b=-1!==["top","bottom"].indexOf(r),v=!!t.flipVariations&&(b&&"start"===o&&h||b&&"end"===o&&p||!b&&"start"===o&&g||!b&&"end"===o&&y),x=!!t.flipVariationsByContent&&(b&&"start"===o&&p||b&&"end"===o&&h||!b&&"start"===o&&y||!b&&"end"===o&&g),w=v||x;(d||m||w)&&(e.flipped=!0,(d||m)&&(r=a[c+1]),w&&(o=function(e){return"end"===e?"start":"start"===e?"end":e}(o)),e.placement=r+(o?"-"+o:""),e.offsets.popper=O({},e.offsets.popper,L(e.instance.popper,e.offsets.reference,e.placement)),e=F(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],r=e.offsets,i=r.popper,o=r.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return i[a?"left":"top"]=o[n]-(s?i[a?"width":"height"]:0),e.placement=I(t),e.offsets.popper=E(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!J(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=B(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right2&&void 0!==arguments[2]?arguments[2]:{};w(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=i(this.update.bind(this)),this.options=O({},e.Defaults,a),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(O({},e.Defaults.modifiers,a.modifiers)).forEach((function(t){r.options.modifiers[t]=O({},e.Defaults.modifiers[t]||{},a.modifiers?a.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return O({name:e},r.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&o(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return _(e,[{key:"update",value:function(){return z.call(this)}},{key:"destroy",value:function(){return W.call(this)}},{key:"enableEventListeners",value:function(){return $.call(this)}},{key:"disableEventListeners",value:function(){return G.call(this)}}]),e}();ce.Utils=("undefined"!==typeof window?window:e).PopperUtils,ce.placements=Q,ce.Defaults=se,t.a=ce}).call(this,n(113))},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n(0)),o=(0,r(n(75)).default)(i.default.createElement("path",{d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"}),"Menu");t.default=o},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n(0)),o=(0,r(n(75)).default)(i.default.createElement("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}),"Error");t.default=o},function(e,t,n){var r=n(371),i=n(679),o=n(680),a=n(687),s=n(688),c=n(692),u=Date.prototype.getTime;function l(e,t,n){var h=n||{};return!!(h.strict?o(e,t):e===t)||(!e||!t||"object"!==typeof e&&"object"!==typeof t?h.strict?o(e,t):e==t:function(e,t,n){var o,h;if(typeof e!==typeof t)return!1;if(f(e)||f(t))return!1;if(e.prototype!==t.prototype)return!1;if(i(e)!==i(t))return!1;var p=a(e),g=a(t);if(p!==g)return!1;if(p||g)return e.source===t.source&&s(e)===s(t);if(c(e)&&c(t))return u.call(e)===u.call(t);var y=d(e),m=d(t);if(y!==m)return!1;if(y||m){if(e.length!==t.length)return!1;for(o=0;o=0;o--)if(b[o]!=v[o])return!1;for(o=b.length-1;o>=0;o--)if(!l(e[h=b[o]],t[h],n))return!1;return!0}(e,t,h))}function f(e){return null===e||void 0===e}function d(e){return!(!e||"object"!==typeof e||"number"!==typeof e.length)&&("function"===typeof e.copy&&"function"===typeof e.slice&&!(e.length>0&&"number"!==typeof e[0]))}e.exports=l},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n(0)),o=(0,r(n(75)).default)(i.default.createElement("path",{d:"M7 10l5 5 5-5z"}),"ArrowDropDown");t.default=o},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n(0)),o=(0,r(n(75)).default)(i.default.createElement("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"}),"Check");t.default=o},function(e,t,n){"use strict";var r=n(70);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n(0)),o=(0,r(n(75)).default)(i.default.createElement("path",{d:"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zm-6 .67l2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z"}),"SaveAlt");t.default=o},function(e,t,n){"use strict";var r=n(18),i=n(7),o=n(396),a=n(3),s=["xs","sm","md","lg","xl"];function c(e){var t=e.values,n=void 0===t?{xs:0,sm:600,md:960,lg:1280,xl:1920}:t,r=e.unit,o=void 0===r?"px":r,c=e.step,u=void 0===c?5:c,l=Object(i.a)(e,["values","unit","step"]);function f(e){var t="number"===typeof n[e]?n[e]:e;return"@media (min-width:".concat(t).concat(o,")")}function d(e,t){var r=s.indexOf(t);return r===s.length-1?f(e):"@media (min-width:".concat("number"===typeof n[e]?n[e]:e).concat(o,") and ")+"(max-width:".concat((-1!==r&&"number"===typeof n[s[r+1]]?n[s[r+1]]:t)-u/100).concat(o,")")}return Object(a.a)({keys:s,values:n,up:f,down:function(e){var t=s.indexOf(e)+1,r=n[s[t]];return t===s.length?f("xs"):"@media (max-width:".concat(("number"===typeof r&&t>0?r:e)-u/100).concat(o,")")},between:d,only:function(e){return d(e,e)},width:function(e){return n[e]}},l)}function u(e,t,n){var i;return Object(a.a)({gutters:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(a.a)({paddingLeft:t(2),paddingRight:t(2)},n,Object(r.a)({},e.up("sm"),Object(a.a)({paddingLeft:t(3),paddingRight:t(3)},n[e.up("sm")])))},toolbar:(i={minHeight:56},Object(r.a)(i,"".concat(e.up("xs")," and (orientation: landscape)"),{minHeight:48}),Object(r.a)(i,e.up("sm"),{minHeight:64}),i)},n)}var l=n(395),f={black:"#000",white:"#fff"},d={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#d5d5d5",A200:"#aaaaaa",A400:"#303030",A700:"#616161"},h={50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e",A100:"#8c9eff",A200:"#536dfe",A400:"#3d5afe",A700:"#304ffe"},p={50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f",A100:"#ff80ab",A200:"#ff4081",A400:"#f50057",A700:"#c51162"},g={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},y={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},m={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},b={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},v=n(19),x={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.54)",disabled:"rgba(0, 0, 0, 0.38)",hint:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:f.white,default:d[50]},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},w={text:{primary:f.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",hint:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:d[800],default:"#303030"},action:{active:f.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function _(e,t,n,r){var i=r.light||r,o=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=Object(v.e)(e.main,i):"dark"===t&&(e.dark=Object(v.a)(e.main,o)))}function k(e){var t=e.primary,n=void 0===t?{light:h[300],main:h[500],dark:h[700]}:t,r=e.secondary,s=void 0===r?{light:p.A200,main:p.A400,dark:p.A700}:r,c=e.error,u=void 0===c?{light:g[300],main:g[500],dark:g[700]}:c,k=e.warning,O=void 0===k?{light:y[300],main:y[500],dark:y[700]}:k,E=e.info,S=void 0===E?{light:m[300],main:m[500],dark:m[700]}:E,C=e.success,T=void 0===C?{light:b[300],main:b[500],dark:b[700]}:C,j=e.type,A=void 0===j?"light":j,M=e.contrastThreshold,P=void 0===M?3:M,N=e.tonalOffset,D=void 0===N?.2:N,R=Object(i.a)(e,["primary","secondary","error","warning","info","success","type","contrastThreshold","tonalOffset"]);function I(e){return Object(v.d)(e,w.text.primary)>=P?w.text.primary:x.text.primary}var L=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:700;if(!(e=Object(a.a)({},e)).main&&e[t]&&(e.main=e[t]),!e.main)throw new Error(Object(l.a)(4,t));if("string"!==typeof e.main)throw new Error(Object(l.a)(5,JSON.stringify(e.main)));return _(e,"light",n,D),_(e,"dark",r,D),e.contrastText||(e.contrastText=I(e.main)),e},B={dark:w,light:x};return Object(o.a)(Object(a.a)({common:f,type:A,primary:L(n),secondary:L(s,"A400","A200","A700"),error:L(u),warning:L(O),info:L(S),success:L(T),grey:d,contrastThreshold:P,getContrastText:I,augmentColor:L,tonalOffset:D},B[A]),R)}function O(e){return Math.round(1e5*e)/1e5}var E={textTransform:"uppercase"},S='"Roboto", "Helvetica", "Arial", sans-serif';function C(e,t){var n="function"===typeof t?t(e):t,r=n.fontFamily,s=void 0===r?S:r,c=n.fontSize,u=void 0===c?14:c,l=n.fontWeightLight,f=void 0===l?300:l,d=n.fontWeightRegular,h=void 0===d?400:d,p=n.fontWeightMedium,g=void 0===p?500:p,y=n.fontWeightBold,m=void 0===y?700:y,b=n.htmlFontSize,v=void 0===b?16:b,x=n.allVariants,w=n.pxToRem,_=Object(i.a)(n,["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"]);var k=u/14,C=w||function(e){return"".concat(e/v*k,"rem")},T=function(e,t,n,r,i){return Object(a.a)({fontFamily:s,fontWeight:e,fontSize:C(t),lineHeight:n},s===S?{letterSpacing:"".concat(O(r/t),"em")}:{},i,x)},j={h1:T(f,96,1.167,-1.5),h2:T(f,60,1.2,-.5),h3:T(h,48,1.167,0),h4:T(h,34,1.235,.25),h5:T(h,24,1.334,0),h6:T(g,20,1.6,.15),subtitle1:T(h,16,1.75,.15),subtitle2:T(g,14,1.57,.1),body1:T(h,16,1.5,.15),body2:T(h,14,1.43,.15),button:T(g,14,1.75,.4,E),caption:T(h,12,1.66,.4),overline:T(h,12,2.66,1,E)};return Object(o.a)(Object(a.a)({htmlFontSize:v,pxToRem:C,round:O,fontFamily:s,fontSize:u,fontWeightLight:f,fontWeightRegular:h,fontWeightMedium:g,fontWeightBold:m},j),_,{clone:!1})}function T(){return["".concat(arguments.length<=0?void 0:arguments[0],"px ").concat(arguments.length<=1?void 0:arguments[1],"px ").concat(arguments.length<=2?void 0:arguments[2],"px ").concat(arguments.length<=3?void 0:arguments[3],"px rgba(0,0,0,").concat(.2,")"),"".concat(arguments.length<=4?void 0:arguments[4],"px ").concat(arguments.length<=5?void 0:arguments[5],"px ").concat(arguments.length<=6?void 0:arguments[6],"px ").concat(arguments.length<=7?void 0:arguments[7],"px rgba(0,0,0,").concat(.14,")"),"".concat(arguments.length<=8?void 0:arguments[8],"px ").concat(arguments.length<=9?void 0:arguments[9],"px ").concat(arguments.length<=10?void 0:arguments[10],"px ").concat(arguments.length<=11?void 0:arguments[11],"px rgba(0,0,0,").concat(.12,")")].join(",")}var j=["none",T(0,2,1,-1,0,1,1,0,0,1,3,0),T(0,3,1,-2,0,2,2,0,0,1,5,0),T(0,3,3,-2,0,3,4,0,0,1,8,0),T(0,2,4,-1,0,4,5,0,0,1,10,0),T(0,3,5,-1,0,5,8,0,0,1,14,0),T(0,3,5,-1,0,6,10,0,0,1,18,0),T(0,4,5,-2,0,7,10,1,0,2,16,1),T(0,5,5,-3,0,8,10,1,0,3,14,2),T(0,5,6,-3,0,9,12,1,0,3,16,2),T(0,6,6,-3,0,10,14,1,0,4,18,3),T(0,6,7,-4,0,11,15,1,0,4,20,3),T(0,7,8,-4,0,12,17,2,0,5,22,4),T(0,7,8,-4,0,13,19,2,0,5,24,4),T(0,7,9,-4,0,14,21,2,0,5,26,4),T(0,8,9,-5,0,15,22,2,0,6,28,5),T(0,8,10,-5,0,16,24,2,0,6,30,5),T(0,8,11,-5,0,17,26,2,0,6,32,5),T(0,9,11,-5,0,18,28,2,0,7,34,6),T(0,9,12,-6,0,19,29,2,0,7,36,6),T(0,10,13,-6,0,20,31,3,0,8,38,7),T(0,10,13,-6,0,21,33,3,0,8,40,7),T(0,10,14,-6,0,22,35,3,0,8,42,7),T(0,11,14,-7,0,23,36,3,0,9,44,8),T(0,11,15,-7,0,24,38,3,0,9,46,8)],A={borderRadius:4},M=n(790);function P(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:8;if(e.mui)return e;var t=Object(M.a)({spacing:e}),n=function(){for(var e=arguments.length,n=new Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=e.breakpoints,n=void 0===t?{}:t,r=e.mixins,a=void 0===r?{}:r,s=e.palette,l=void 0===s?{}:s,f=e.spacing,d=e.typography,h=void 0===d?{}:d,p=Object(i.a)(e,["breakpoints","mixins","palette","spacing","typography"]),g=k(l),y=c(n),m=P(f),b=Object(o.a)({breakpoints:y,direction:"ltr",mixins:u(y,m,a),overrides:{},palette:g,props:{},shadows:j,typography:C(g,h),spacing:m,shape:A,transitions:N.a,zIndex:D.a},p),v=arguments.length,x=new Array(v>1?v-1:0),w=1;w0&&(a-i.lastTime>500?(i.keys=[],i.repeating=!0,i.previousKeyMatched=!0):i.repeating&&o!==i.keys[0]&&(i.repeating=!1)),i.lastTime=a,i.keys.push(o);var s=r&&!i.repeating&&y(r,i);i.previousKeyMatched&&(s||m(t,r,!1,k,p,i))?e.preventDefault():i.previousKeyMatched=!1}S&&S(e)},tabIndex:s?0:-1},j),R)})),x=n(69),w=n(52),_={vertical:"top",horizontal:"right"},k={vertical:"top",horizontal:"left"},O=o.forwardRef((function(e,t){var n=e.autoFocus,s=void 0===n||n,l=e.children,f=e.classes,d=e.disableAutoFocusItem,h=void 0!==d&&d,p=e.MenuListProps,g=void 0===p?{}:p,y=e.onClose,m=e.onEntering,b=e.open,O=e.PaperProps,E=void 0===O?{}:O,S=e.PopoverClasses,C=e.transitionDuration,T=void 0===C?"auto":C,j=e.variant,A=void 0===j?"selectedMenu":j,M=Object(i.a)(e,["autoFocus","children","classes","disableAutoFocusItem","MenuListProps","onClose","onEntering","open","PaperProps","PopoverClasses","transitionDuration","variant"]),P=Object(w.a)(),N=s&&!h&&b,D=o.useRef(null),R=o.useRef(null),I=-1;o.Children.map(l,(function(e,t){o.isValidElement(e)&&(e.props.disabled||("menu"!==A&&e.props.selected||-1===I)&&(I=t))}));var L=o.Children.map(l,(function(e,t){return t===I?o.cloneElement(e,{ref:function(t){R.current=u.findDOMNode(t),Object(x.a)(e.ref,t)}}):e}));return o.createElement(c.a,Object(r.a)({getContentAnchorEl:function(){return R.current},classes:S,onClose:y,onEntering:function(e,t){D.current&&D.current.adjustStyleForScrollbar(e,P),m&&m(e,t)},anchorOrigin:"rtl"===P.direction?_:k,transformOrigin:"rtl"===P.direction?_:k,PaperProps:Object(r.a)({},E,{classes:Object(r.a)({},E.classes,{root:f.paper})}),open:b,ref:t,transitionDuration:T},M),o.createElement(v,Object(r.a)({onKeyDown:function(e){"Tab"===e.key&&(e.preventDefault(),y&&y(e,"tabKeyDown"))},actions:D,autoFocus:s&&(-1===I||h),autoFocusItem:N,variant:A},g,{className:Object(a.a)(f.list,g.className)}),L))}));t.a=Object(s.a)({paper:{maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"},list:{outline:0}},{name:"MuiMenu"})(O)},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{clone:!0},i=n.clone?Object(r.a)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((function(r){"__proto__"!==r&&(o(t[r])&&r in e?i[r]=a(e[r],t[r],n):i[r]=t[r])})),i}},function(e,t,n){"use strict";var r=n(3),i=n(32),o=n(7),a=n(0),s=(n(1),n(713)),c=n(52),u=n(109),l=n(22);function f(e){return"scale(".concat(e,", ").concat(Math.pow(e,2),")")}var d={entering:{opacity:1,transform:f(1)},entered:{opacity:1,transform:"none"}},h=a.forwardRef((function(e,t){var n=e.children,h=e.disableStrictModeCompat,p=void 0!==h&&h,g=e.in,y=e.onEnter,m=e.onEntered,b=e.onEntering,v=e.onExit,x=e.onExited,w=e.onExiting,_=e.style,k=e.timeout,O=void 0===k?"auto":k,E=e.TransitionComponent,S=void 0===E?s.a:E,C=Object(o.a)(e,["children","disableStrictModeCompat","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"]),T=a.useRef(),j=a.useRef(),A=Object(c.a)(),M=A.unstable_strictMode&&!p,P=a.useRef(null),N=Object(l.a)(n.ref,t),D=Object(l.a)(M?P:void 0,N),R=function(e){return function(t,n){if(e){var r=M?[P.current,t]:[t,n],o=Object(i.a)(r,2),a=o[0],s=o[1];void 0===s?e(a):e(a,s)}}},I=R(b),L=R((function(e,t){Object(u.b)(e);var n,r=Object(u.a)({style:_,timeout:O},{mode:"enter"}),i=r.duration,o=r.delay;"auto"===O?(n=A.transitions.getAutoHeightDuration(e.clientHeight),j.current=n):n=i,e.style.transition=[A.transitions.create("opacity",{duration:n,delay:o}),A.transitions.create("transform",{duration:.666*n,delay:o})].join(","),y&&y(e,t)})),B=R(m),F=R(w),z=R((function(e){var t,n=Object(u.a)({style:_,timeout:O},{mode:"exit"}),r=n.duration,i=n.delay;"auto"===O?(t=A.transitions.getAutoHeightDuration(e.clientHeight),j.current=t):t=r,e.style.transition=[A.transitions.create("opacity",{duration:t,delay:i}),A.transitions.create("transform",{duration:.666*t,delay:i||.333*t})].join(","),e.style.opacity="0",e.style.transform=f(.75),v&&v(e)})),U=R(x);return a.useEffect((function(){return function(){clearTimeout(T.current)}}),[]),a.createElement(S,Object(r.a)({appear:!0,in:g,nodeRef:M?P:void 0,onEnter:L,onEntered:B,onEntering:I,onExit:z,onExited:U,onExiting:F,addEndListener:function(e,t){var n=M?e:t;"auto"===O&&(T.current=setTimeout(n,j.current||0))},timeout:"auto"===O?null:O},C),(function(e,t){return a.cloneElement(n,Object(r.a)({style:Object(r.a)({opacity:0,transform:f(.75),visibility:"exited"!==e||g?void 0:"hidden"},d[e],_,n.props.style),ref:D},t))}))}));h.muiSupportAuto=!0,t.a=h},function(e,t,n){"use strict";var r=n(7),i=n(3),o=n(395),a=n(0),s=(n(1),n(6)),c=n(68),u=n(83),l=n(8),f=n(17),d=n(22),h=n(90);function p(e,t){return parseInt(e[t],10)||0}var g="undefined"!==typeof window?a.useLayoutEffect:a.useEffect,y={visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"},m=a.forwardRef((function(e,t){var n=e.onChange,o=e.rows,s=e.rowsMax,c=e.rowsMin,u=void 0===c?1:c,l=e.style,f=e.value,m=Object(r.a)(e,["onChange","rows","rowsMax","rowsMin","style","value"]),b=o||u,v=a.useRef(null!=f).current,x=a.useRef(null),w=Object(d.a)(t,x),_=a.useRef(null),k=a.useRef(0),O=a.useState({}),E=O[0],S=O[1],C=a.useCallback((function(){var t=x.current,n=window.getComputedStyle(t),r=_.current;r.style.width=n.width,r.value=t.value||e.placeholder||"x","\n"===r.value.slice(-1)&&(r.value+=" ");var i=n["box-sizing"],o=p(n,"padding-bottom")+p(n,"padding-top"),a=p(n,"border-bottom-width")+p(n,"border-top-width"),c=r.scrollHeight-o;r.value="x";var u=r.scrollHeight-o,l=c;b&&(l=Math.max(Number(b)*u,l)),s&&(l=Math.min(Number(s)*u,l));var f=(l=Math.max(l,u))+("border-box"===i?o+a:0),d=Math.abs(l-c)<=1;S((function(e){return k.current<20&&(f>0&&Math.abs((e.outerHeightStyle||0)-f)>1||e.overflow!==d)?(k.current+=1,{overflow:d,outerHeightStyle:f}):e}))}),[s,b,e.placeholder]);a.useEffect((function(){var e=Object(h.a)((function(){k.current=0,C()}));return window.addEventListener("resize",e),function(){e.clear(),window.removeEventListener("resize",e)}}),[C]),g((function(){C()})),a.useEffect((function(){k.current=0}),[f]);return a.createElement(a.Fragment,null,a.createElement("textarea",Object(i.a)({value:f,onChange:function(e){k.current=0,v||C(),n&&n(e)},ref:w,rows:b,style:Object(i.a)({height:E.outerHeightStyle,overflow:E.overflow?"hidden":null},l)},m)),a.createElement("textarea",{"aria-hidden":!0,className:e.className,readOnly:!0,ref:_,tabIndex:-1,style:Object(i.a)({},y,l)}))})),b=n(125),v="undefined"===typeof window?a.useEffect:a.useLayoutEffect,x=a.forwardRef((function(e,t){var n=e["aria-describedby"],l=e.autoComplete,h=e.autoFocus,p=e.classes,g=e.className,y=(e.color,e.defaultValue),x=e.disabled,w=e.endAdornment,_=(e.error,e.fullWidth),k=void 0!==_&&_,O=e.id,E=e.inputComponent,S=void 0===E?"input":E,C=e.inputProps,T=void 0===C?{}:C,j=e.inputRef,A=(e.margin,e.multiline),M=void 0!==A&&A,P=e.name,N=e.onBlur,D=e.onChange,R=e.onClick,I=e.onFocus,L=e.onKeyDown,B=e.onKeyUp,F=e.placeholder,z=e.readOnly,U=e.renderSuffix,H=e.rows,W=e.rowsMax,Y=e.rowsMin,V=e.startAdornment,q=e.type,$=void 0===q?"text":q,G=e.value,X=Object(r.a)(e,["aria-describedby","autoComplete","autoFocus","classes","className","color","defaultValue","disabled","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","rowsMax","rowsMin","startAdornment","type","value"]),K=null!=T.value?T.value:G,Z=a.useRef(null!=K).current,J=a.useRef(),Q=a.useCallback((function(e){0}),[]),ee=Object(d.a)(T.ref,Q),te=Object(d.a)(j,ee),ne=Object(d.a)(J,te),re=a.useState(!1),ie=re[0],oe=re[1],ae=Object(u.b)();var se=Object(c.a)({props:e,muiFormControl:ae,states:["color","disabled","error","hiddenLabel","margin","required","filled"]});se.focused=ae?ae.focused:ie,a.useEffect((function(){!ae&&x&&ie&&(oe(!1),N&&N())}),[ae,x,ie,N]);var ce=ae&&ae.onFilled,ue=ae&&ae.onEmpty,le=a.useCallback((function(e){Object(b.b)(e)?ce&&ce():ue&&ue()}),[ce,ue]);v((function(){Z&&le({value:K})}),[K,le,Z]);a.useEffect((function(){le(J.current)}),[]);var fe=S,de=Object(i.a)({},T,{ref:ne});"string"!==typeof fe?de=Object(i.a)({inputRef:ne,type:$},de,{ref:null}):M?!H||W||Y?(de=Object(i.a)({rows:H,rowsMax:W},de),fe=m):fe="textarea":de=Object(i.a)({type:$},de);return a.useEffect((function(){ae&&ae.setAdornedStart(Boolean(V))}),[ae,V]),a.createElement("div",Object(i.a)({className:Object(s.a)(p.root,p["color".concat(Object(f.a)(se.color||"primary"))],g,se.disabled&&p.disabled,se.error&&p.error,k&&p.fullWidth,se.focused&&p.focused,ae&&p.formControl,M&&p.multiline,V&&p.adornedStart,w&&p.adornedEnd,"dense"===se.margin&&p.marginDense),onClick:function(e){J.current&&e.currentTarget===e.target&&J.current.focus(),R&&R(e)},ref:t},X),V,a.createElement(u.a.Provider,{value:null},a.createElement(fe,Object(i.a)({"aria-invalid":se.error,"aria-describedby":n,autoComplete:l,autoFocus:h,defaultValue:y,disabled:se.disabled,id:O,onAnimationStart:function(e){le("mui-auto-fill-cancel"===e.animationName?J.current:{value:"x"})},name:P,placeholder:F,readOnly:z,required:se.required,rows:H,value:K,onKeyDown:L,onKeyUp:B},de,{className:Object(s.a)(p.input,T.className,se.disabled&&p.disabled,M&&p.inputMultiline,se.hiddenLabel&&p.inputHiddenLabel,V&&p.inputAdornedStart,w&&p.inputAdornedEnd,"search"===$&&p.inputTypeSearch,"dense"===se.margin&&p.inputMarginDense),onBlur:function(e){N&&N(e),T.onBlur&&T.onBlur(e),ae&&ae.onBlur?ae.onBlur(e):oe(!1)},onChange:function(e){if(!Z){var t=e.target||J.current;if(null==t)throw new Error(Object(o.a)(1));le({value:t.value})}for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;iM.length&&M.push(e)}function D(e,t,n,r){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var s=!1;if(null===e)s=!0;else switch(i){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return n(r,e,""===t?"."+I(e,0):t),1;if(s=0,t=""===t?".":t+":",Array.isArray(e))for(var c=0;c