diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..a3c99933 --- /dev/null +++ b/404.html @@ -0,0 +1,31 @@ + + + + + + + ExoKomodo + + + + + + + + + + + + + + ExoKomodo is rising + +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..0273b6dc --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +www.exokomodo.com diff --git a/_framework/Client.dll b/_framework/Client.dll new file mode 100644 index 00000000..fa326023 Binary files /dev/null and b/_framework/Client.dll differ diff --git a/_framework/Client.dll.br b/_framework/Client.dll.br new file mode 100644 index 00000000..1836b241 Binary files /dev/null and b/_framework/Client.dll.br differ diff --git a/_framework/Client.dll.gz b/_framework/Client.dll.gz new file mode 100644 index 00000000..633402d4 Binary files /dev/null and b/_framework/Client.dll.gz differ diff --git a/_framework/Client.pdb.gz b/_framework/Client.pdb.gz new file mode 100644 index 00000000..7e43a9be Binary files /dev/null and b/_framework/Client.pdb.gz differ diff --git a/_framework/Microsoft.AspNetCore.Components.Web.dll b/_framework/Microsoft.AspNetCore.Components.Web.dll new file mode 100644 index 00000000..1164a1d3 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.Web.dll differ diff --git a/_framework/Microsoft.AspNetCore.Components.Web.dll.br b/_framework/Microsoft.AspNetCore.Components.Web.dll.br new file mode 100644 index 00000000..b14b6080 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.Web.dll.br differ diff --git a/_framework/Microsoft.AspNetCore.Components.Web.dll.gz b/_framework/Microsoft.AspNetCore.Components.Web.dll.gz new file mode 100644 index 00000000..337af294 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.Web.dll.gz differ diff --git a/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll b/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll new file mode 100644 index 00000000..2713f978 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll differ diff --git a/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll.br b/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll.br new file mode 100644 index 00000000..ed7edd1c Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll.br differ diff --git a/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll.gz b/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll.gz new file mode 100644 index 00000000..95ff94f6 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll.gz differ diff --git a/_framework/Microsoft.AspNetCore.Components.dll b/_framework/Microsoft.AspNetCore.Components.dll new file mode 100644 index 00000000..363ae179 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.dll differ diff --git a/_framework/Microsoft.AspNetCore.Components.dll.br b/_framework/Microsoft.AspNetCore.Components.dll.br new file mode 100644 index 00000000..8b9f4d0d Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.dll.br differ diff --git a/_framework/Microsoft.AspNetCore.Components.dll.gz b/_framework/Microsoft.AspNetCore.Components.dll.gz new file mode 100644 index 00000000..68bbb2fb Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Configuration.Abstractions.dll b/_framework/Microsoft.Extensions.Configuration.Abstractions.dll new file mode 100644 index 00000000..108959c6 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Abstractions.dll differ diff --git a/_framework/Microsoft.Extensions.Configuration.Abstractions.dll.br b/_framework/Microsoft.Extensions.Configuration.Abstractions.dll.br new file mode 100644 index 00000000..87575aa0 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Abstractions.dll.br differ diff --git a/_framework/Microsoft.Extensions.Configuration.Abstractions.dll.gz b/_framework/Microsoft.Extensions.Configuration.Abstractions.dll.gz new file mode 100644 index 00000000..4610b093 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Abstractions.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Configuration.Json.dll b/_framework/Microsoft.Extensions.Configuration.Json.dll new file mode 100644 index 00000000..ceca193f Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Json.dll differ diff --git a/_framework/Microsoft.Extensions.Configuration.Json.dll.br b/_framework/Microsoft.Extensions.Configuration.Json.dll.br new file mode 100644 index 00000000..2cdf6b46 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Json.dll.br differ diff --git a/_framework/Microsoft.Extensions.Configuration.Json.dll.gz b/_framework/Microsoft.Extensions.Configuration.Json.dll.gz new file mode 100644 index 00000000..a44a423f Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Json.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Configuration.dll b/_framework/Microsoft.Extensions.Configuration.dll new file mode 100644 index 00000000..c6cbe667 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.dll differ diff --git a/_framework/Microsoft.Extensions.Configuration.dll.br b/_framework/Microsoft.Extensions.Configuration.dll.br new file mode 100644 index 00000000..fff0283c Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.dll.br differ diff --git a/_framework/Microsoft.Extensions.Configuration.dll.gz b/_framework/Microsoft.Extensions.Configuration.dll.gz new file mode 100644 index 00000000..ad6c2c45 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.dll.gz differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll new file mode 100644 index 00000000..f9bb294e Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll.br b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll.br new file mode 100644 index 00000000..9a03e161 Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll.br differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll.gz b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll.gz new file mode 100644 index 00000000..e4d3fd2f Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll.gz differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.dll b/_framework/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 00000000..af3869a3 Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.dll.br b/_framework/Microsoft.Extensions.DependencyInjection.dll.br new file mode 100644 index 00000000..6e933538 Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.dll.br differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.dll.gz b/_framework/Microsoft.Extensions.DependencyInjection.dll.gz new file mode 100644 index 00000000..5cc41c2b Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Http.dll b/_framework/Microsoft.Extensions.Http.dll new file mode 100644 index 00000000..68677d2f Binary files /dev/null and b/_framework/Microsoft.Extensions.Http.dll differ diff --git a/_framework/Microsoft.Extensions.Http.dll.br b/_framework/Microsoft.Extensions.Http.dll.br new file mode 100644 index 00000000..aea14e3c Binary files /dev/null and b/_framework/Microsoft.Extensions.Http.dll.br differ diff --git a/_framework/Microsoft.Extensions.Http.dll.gz b/_framework/Microsoft.Extensions.Http.dll.gz new file mode 100644 index 00000000..cfe7b9d0 Binary files /dev/null and b/_framework/Microsoft.Extensions.Http.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Logging.Abstractions.dll b/_framework/Microsoft.Extensions.Logging.Abstractions.dll new file mode 100644 index 00000000..7936a845 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/_framework/Microsoft.Extensions.Logging.Abstractions.dll.br b/_framework/Microsoft.Extensions.Logging.Abstractions.dll.br new file mode 100644 index 00000000..45884dc6 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.Abstractions.dll.br differ diff --git a/_framework/Microsoft.Extensions.Logging.Abstractions.dll.gz b/_framework/Microsoft.Extensions.Logging.Abstractions.dll.gz new file mode 100644 index 00000000..1bdcd637 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.Abstractions.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Logging.dll b/_framework/Microsoft.Extensions.Logging.dll new file mode 100644 index 00000000..0651c4c0 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.dll differ diff --git a/_framework/Microsoft.Extensions.Logging.dll.br b/_framework/Microsoft.Extensions.Logging.dll.br new file mode 100644 index 00000000..16c27893 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.dll.br differ diff --git a/_framework/Microsoft.Extensions.Logging.dll.gz b/_framework/Microsoft.Extensions.Logging.dll.gz new file mode 100644 index 00000000..ef1223e9 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Options.dll b/_framework/Microsoft.Extensions.Options.dll new file mode 100644 index 00000000..15d90507 Binary files /dev/null and b/_framework/Microsoft.Extensions.Options.dll differ diff --git a/_framework/Microsoft.Extensions.Options.dll.br b/_framework/Microsoft.Extensions.Options.dll.br new file mode 100644 index 00000000..1f373697 Binary files /dev/null and b/_framework/Microsoft.Extensions.Options.dll.br differ diff --git a/_framework/Microsoft.Extensions.Options.dll.gz b/_framework/Microsoft.Extensions.Options.dll.gz new file mode 100644 index 00000000..b8a3a801 Binary files /dev/null and b/_framework/Microsoft.Extensions.Options.dll.gz differ diff --git a/_framework/Microsoft.Extensions.Primitives.dll b/_framework/Microsoft.Extensions.Primitives.dll new file mode 100644 index 00000000..3a457286 Binary files /dev/null and b/_framework/Microsoft.Extensions.Primitives.dll differ diff --git a/_framework/Microsoft.Extensions.Primitives.dll.br b/_framework/Microsoft.Extensions.Primitives.dll.br new file mode 100644 index 00000000..5db5b785 Binary files /dev/null and b/_framework/Microsoft.Extensions.Primitives.dll.br differ diff --git a/_framework/Microsoft.Extensions.Primitives.dll.gz b/_framework/Microsoft.Extensions.Primitives.dll.gz new file mode 100644 index 00000000..1669fe5a Binary files /dev/null and b/_framework/Microsoft.Extensions.Primitives.dll.gz differ diff --git a/_framework/Microsoft.JSInterop.WebAssembly.dll b/_framework/Microsoft.JSInterop.WebAssembly.dll new file mode 100644 index 00000000..00c9b78c Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.dll differ diff --git a/_framework/Microsoft.JSInterop.WebAssembly.dll.br b/_framework/Microsoft.JSInterop.WebAssembly.dll.br new file mode 100644 index 00000000..137e9374 Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.dll.br differ diff --git a/_framework/Microsoft.JSInterop.WebAssembly.dll.gz b/_framework/Microsoft.JSInterop.WebAssembly.dll.gz new file mode 100644 index 00000000..dfa91f83 Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.dll.gz differ diff --git a/_framework/Microsoft.JSInterop.dll b/_framework/Microsoft.JSInterop.dll new file mode 100644 index 00000000..1cd0c294 Binary files /dev/null and b/_framework/Microsoft.JSInterop.dll differ diff --git a/_framework/Microsoft.JSInterop.dll.br b/_framework/Microsoft.JSInterop.dll.br new file mode 100644 index 00000000..b66ffc49 Binary files /dev/null and b/_framework/Microsoft.JSInterop.dll.br differ diff --git a/_framework/Microsoft.JSInterop.dll.gz b/_framework/Microsoft.JSInterop.dll.gz new file mode 100644 index 00000000..3c1e50da Binary files /dev/null and b/_framework/Microsoft.JSInterop.dll.gz differ diff --git a/_framework/System.Collections.Concurrent.dll b/_framework/System.Collections.Concurrent.dll new file mode 100644 index 00000000..f7fbcff4 Binary files /dev/null and b/_framework/System.Collections.Concurrent.dll differ diff --git a/_framework/System.Collections.Concurrent.dll.br b/_framework/System.Collections.Concurrent.dll.br new file mode 100644 index 00000000..79c0555a Binary files /dev/null and b/_framework/System.Collections.Concurrent.dll.br differ diff --git a/_framework/System.Collections.Concurrent.dll.gz b/_framework/System.Collections.Concurrent.dll.gz new file mode 100644 index 00000000..84918e7d Binary files /dev/null and b/_framework/System.Collections.Concurrent.dll.gz differ diff --git a/_framework/System.Collections.dll b/_framework/System.Collections.dll new file mode 100644 index 00000000..ce8ed03b Binary files /dev/null and b/_framework/System.Collections.dll differ diff --git a/_framework/System.Collections.dll.br b/_framework/System.Collections.dll.br new file mode 100644 index 00000000..4f3b1bb7 Binary files /dev/null and b/_framework/System.Collections.dll.br differ diff --git a/_framework/System.Collections.dll.gz b/_framework/System.Collections.dll.gz new file mode 100644 index 00000000..baae67c8 Binary files /dev/null and b/_framework/System.Collections.dll.gz differ diff --git a/_framework/System.ComponentModel.Primitives.dll b/_framework/System.ComponentModel.Primitives.dll new file mode 100644 index 00000000..76eef465 Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.dll differ diff --git a/_framework/System.ComponentModel.Primitives.dll.br b/_framework/System.ComponentModel.Primitives.dll.br new file mode 100644 index 00000000..51948349 Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.dll.br differ diff --git a/_framework/System.ComponentModel.Primitives.dll.gz b/_framework/System.ComponentModel.Primitives.dll.gz new file mode 100644 index 00000000..144309e1 Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.dll.gz differ diff --git a/_framework/System.ComponentModel.TypeConverter.dll b/_framework/System.ComponentModel.TypeConverter.dll new file mode 100644 index 00000000..93e5df45 Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.dll differ diff --git a/_framework/System.ComponentModel.TypeConverter.dll.br b/_framework/System.ComponentModel.TypeConverter.dll.br new file mode 100644 index 00000000..bebe8cce Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.dll.br differ diff --git a/_framework/System.ComponentModel.TypeConverter.dll.gz b/_framework/System.ComponentModel.TypeConverter.dll.gz new file mode 100644 index 00000000..86cb2d21 Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.dll.gz differ diff --git a/_framework/System.ComponentModel.dll b/_framework/System.ComponentModel.dll new file mode 100644 index 00000000..4010aba5 Binary files /dev/null and b/_framework/System.ComponentModel.dll differ diff --git a/_framework/System.ComponentModel.dll.br b/_framework/System.ComponentModel.dll.br new file mode 100644 index 00000000..fc91b8cf Binary files /dev/null and b/_framework/System.ComponentModel.dll.br differ diff --git a/_framework/System.ComponentModel.dll.gz b/_framework/System.ComponentModel.dll.gz new file mode 100644 index 00000000..0501b92e Binary files /dev/null and b/_framework/System.ComponentModel.dll.gz differ diff --git a/_framework/System.Console.dll b/_framework/System.Console.dll new file mode 100644 index 00000000..1049d54e Binary files /dev/null and b/_framework/System.Console.dll differ diff --git a/_framework/System.Console.dll.br b/_framework/System.Console.dll.br new file mode 100644 index 00000000..8a9c93fa Binary files /dev/null and b/_framework/System.Console.dll.br differ diff --git a/_framework/System.Console.dll.gz b/_framework/System.Console.dll.gz new file mode 100644 index 00000000..a9885eb8 Binary files /dev/null and b/_framework/System.Console.dll.gz differ diff --git a/_framework/System.Drawing.Primitives.dll b/_framework/System.Drawing.Primitives.dll new file mode 100644 index 00000000..38b293df Binary files /dev/null and b/_framework/System.Drawing.Primitives.dll differ diff --git a/_framework/System.Drawing.Primitives.dll.br b/_framework/System.Drawing.Primitives.dll.br new file mode 100644 index 00000000..ec1254cc Binary files /dev/null and b/_framework/System.Drawing.Primitives.dll.br differ diff --git a/_framework/System.Drawing.Primitives.dll.gz b/_framework/System.Drawing.Primitives.dll.gz new file mode 100644 index 00000000..d0958e76 Binary files /dev/null and b/_framework/System.Drawing.Primitives.dll.gz differ diff --git a/_framework/System.Drawing.dll b/_framework/System.Drawing.dll new file mode 100644 index 00000000..6dd7702c Binary files /dev/null and b/_framework/System.Drawing.dll differ diff --git a/_framework/System.Drawing.dll.br b/_framework/System.Drawing.dll.br new file mode 100644 index 00000000..1d63ebaa Binary files /dev/null and b/_framework/System.Drawing.dll.br differ diff --git a/_framework/System.Drawing.dll.gz b/_framework/System.Drawing.dll.gz new file mode 100644 index 00000000..eab0afa0 Binary files /dev/null and b/_framework/System.Drawing.dll.gz differ diff --git a/_framework/System.Linq.Expressions.dll b/_framework/System.Linq.Expressions.dll new file mode 100644 index 00000000..e8d4e1dc Binary files /dev/null and b/_framework/System.Linq.Expressions.dll differ diff --git a/_framework/System.Linq.Expressions.dll.br b/_framework/System.Linq.Expressions.dll.br new file mode 100644 index 00000000..eb057098 Binary files /dev/null and b/_framework/System.Linq.Expressions.dll.br differ diff --git a/_framework/System.Linq.Expressions.dll.gz b/_framework/System.Linq.Expressions.dll.gz new file mode 100644 index 00000000..900f5907 Binary files /dev/null and b/_framework/System.Linq.Expressions.dll.gz differ diff --git a/_framework/System.Linq.dll b/_framework/System.Linq.dll new file mode 100644 index 00000000..63a4f101 Binary files /dev/null and b/_framework/System.Linq.dll differ diff --git a/_framework/System.Linq.dll.br b/_framework/System.Linq.dll.br new file mode 100644 index 00000000..af5ad59f Binary files /dev/null and b/_framework/System.Linq.dll.br differ diff --git a/_framework/System.Linq.dll.gz b/_framework/System.Linq.dll.gz new file mode 100644 index 00000000..c33492f7 Binary files /dev/null and b/_framework/System.Linq.dll.gz differ diff --git a/_framework/System.Memory.dll b/_framework/System.Memory.dll new file mode 100644 index 00000000..640b22b2 Binary files /dev/null and b/_framework/System.Memory.dll differ diff --git a/_framework/System.Memory.dll.br b/_framework/System.Memory.dll.br new file mode 100644 index 00000000..11a94432 Binary files /dev/null and b/_framework/System.Memory.dll.br differ diff --git a/_framework/System.Memory.dll.gz b/_framework/System.Memory.dll.gz new file mode 100644 index 00000000..1cb39cca Binary files /dev/null and b/_framework/System.Memory.dll.gz differ diff --git a/_framework/System.Net.Http.Json.dll b/_framework/System.Net.Http.Json.dll new file mode 100644 index 00000000..3b4cf377 Binary files /dev/null and b/_framework/System.Net.Http.Json.dll differ diff --git a/_framework/System.Net.Http.Json.dll.br b/_framework/System.Net.Http.Json.dll.br new file mode 100644 index 00000000..d595664d Binary files /dev/null and b/_framework/System.Net.Http.Json.dll.br differ diff --git a/_framework/System.Net.Http.Json.dll.gz b/_framework/System.Net.Http.Json.dll.gz new file mode 100644 index 00000000..62287d30 Binary files /dev/null and b/_framework/System.Net.Http.Json.dll.gz differ diff --git a/_framework/System.Net.Http.dll b/_framework/System.Net.Http.dll new file mode 100644 index 00000000..74650710 Binary files /dev/null and b/_framework/System.Net.Http.dll differ diff --git a/_framework/System.Net.Http.dll.br b/_framework/System.Net.Http.dll.br new file mode 100644 index 00000000..47650cb7 Binary files /dev/null and b/_framework/System.Net.Http.dll.br differ diff --git a/_framework/System.Net.Http.dll.gz b/_framework/System.Net.Http.dll.gz new file mode 100644 index 00000000..380bf8fa Binary files /dev/null and b/_framework/System.Net.Http.dll.gz differ diff --git a/_framework/System.Net.Primitives.dll b/_framework/System.Net.Primitives.dll new file mode 100644 index 00000000..5575f9e8 Binary files /dev/null and b/_framework/System.Net.Primitives.dll differ diff --git a/_framework/System.Net.Primitives.dll.br b/_framework/System.Net.Primitives.dll.br new file mode 100644 index 00000000..5b3ddd88 Binary files /dev/null and b/_framework/System.Net.Primitives.dll.br differ diff --git a/_framework/System.Net.Primitives.dll.gz b/_framework/System.Net.Primitives.dll.gz new file mode 100644 index 00000000..6ec4d411 Binary files /dev/null and b/_framework/System.Net.Primitives.dll.gz differ diff --git a/_framework/System.Numerics.Vectors.dll b/_framework/System.Numerics.Vectors.dll new file mode 100644 index 00000000..af546eb4 Binary files /dev/null and b/_framework/System.Numerics.Vectors.dll differ diff --git a/_framework/System.Numerics.Vectors.dll.br b/_framework/System.Numerics.Vectors.dll.br new file mode 100644 index 00000000..cff29f89 Binary files /dev/null and b/_framework/System.Numerics.Vectors.dll.br differ diff --git a/_framework/System.Numerics.Vectors.dll.gz b/_framework/System.Numerics.Vectors.dll.gz new file mode 100644 index 00000000..8336f090 Binary files /dev/null and b/_framework/System.Numerics.Vectors.dll.gz differ diff --git a/_framework/System.ObjectModel.dll b/_framework/System.ObjectModel.dll new file mode 100644 index 00000000..745071e4 Binary files /dev/null and b/_framework/System.ObjectModel.dll differ diff --git a/_framework/System.ObjectModel.dll.br b/_framework/System.ObjectModel.dll.br new file mode 100644 index 00000000..dc0f82fa Binary files /dev/null and b/_framework/System.ObjectModel.dll.br differ diff --git a/_framework/System.ObjectModel.dll.gz b/_framework/System.ObjectModel.dll.gz new file mode 100644 index 00000000..86522a37 Binary files /dev/null and b/_framework/System.ObjectModel.dll.gz differ diff --git a/_framework/System.Private.CoreLib.dll b/_framework/System.Private.CoreLib.dll new file mode 100644 index 00000000..58eadfea Binary files /dev/null and b/_framework/System.Private.CoreLib.dll differ diff --git a/_framework/System.Private.CoreLib.dll.br b/_framework/System.Private.CoreLib.dll.br new file mode 100644 index 00000000..2ca56e8b Binary files /dev/null and b/_framework/System.Private.CoreLib.dll.br differ diff --git a/_framework/System.Private.CoreLib.dll.gz b/_framework/System.Private.CoreLib.dll.gz new file mode 100644 index 00000000..f8eb735d Binary files /dev/null and b/_framework/System.Private.CoreLib.dll.gz differ diff --git a/_framework/System.Private.Uri.dll b/_framework/System.Private.Uri.dll new file mode 100644 index 00000000..05f919a4 Binary files /dev/null and b/_framework/System.Private.Uri.dll differ diff --git a/_framework/System.Private.Uri.dll.br b/_framework/System.Private.Uri.dll.br new file mode 100644 index 00000000..b3dd15fe Binary files /dev/null and b/_framework/System.Private.Uri.dll.br differ diff --git a/_framework/System.Private.Uri.dll.gz b/_framework/System.Private.Uri.dll.gz new file mode 100644 index 00000000..0da807ff Binary files /dev/null and b/_framework/System.Private.Uri.dll.gz differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.dll b/_framework/System.Runtime.InteropServices.JavaScript.dll new file mode 100644 index 00000000..5ecedfb0 Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.dll differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.dll.br b/_framework/System.Runtime.InteropServices.JavaScript.dll.br new file mode 100644 index 00000000..19660b8e Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.dll.br differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.dll.gz b/_framework/System.Runtime.InteropServices.JavaScript.dll.gz new file mode 100644 index 00000000..5500bf26 Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.dll.gz differ diff --git a/_framework/System.Runtime.dll b/_framework/System.Runtime.dll new file mode 100644 index 00000000..ba130f42 Binary files /dev/null and b/_framework/System.Runtime.dll differ diff --git a/_framework/System.Runtime.dll.br b/_framework/System.Runtime.dll.br new file mode 100644 index 00000000..7979dc92 Binary files /dev/null and b/_framework/System.Runtime.dll.br differ diff --git a/_framework/System.Runtime.dll.gz b/_framework/System.Runtime.dll.gz new file mode 100644 index 00000000..e16a6736 Binary files /dev/null and b/_framework/System.Runtime.dll.gz differ diff --git a/_framework/System.Text.Encodings.Web.dll b/_framework/System.Text.Encodings.Web.dll new file mode 100644 index 00000000..f20870a9 Binary files /dev/null and b/_framework/System.Text.Encodings.Web.dll differ diff --git a/_framework/System.Text.Encodings.Web.dll.br b/_framework/System.Text.Encodings.Web.dll.br new file mode 100644 index 00000000..4890867a Binary files /dev/null and b/_framework/System.Text.Encodings.Web.dll.br differ diff --git a/_framework/System.Text.Encodings.Web.dll.gz b/_framework/System.Text.Encodings.Web.dll.gz new file mode 100644 index 00000000..e38aba85 Binary files /dev/null and b/_framework/System.Text.Encodings.Web.dll.gz differ diff --git a/_framework/System.Text.Json.dll b/_framework/System.Text.Json.dll new file mode 100644 index 00000000..ca7871a8 Binary files /dev/null and b/_framework/System.Text.Json.dll differ diff --git a/_framework/System.Text.Json.dll.br b/_framework/System.Text.Json.dll.br new file mode 100644 index 00000000..254ca51c Binary files /dev/null and b/_framework/System.Text.Json.dll.br differ diff --git a/_framework/System.Text.Json.dll.gz b/_framework/System.Text.Json.dll.gz new file mode 100644 index 00000000..a0b730d5 Binary files /dev/null and b/_framework/System.Text.Json.dll.gz differ diff --git a/_framework/System.Threading.dll b/_framework/System.Threading.dll new file mode 100644 index 00000000..9269edde Binary files /dev/null and b/_framework/System.Threading.dll differ diff --git a/_framework/System.Threading.dll.br b/_framework/System.Threading.dll.br new file mode 100644 index 00000000..696042fb Binary files /dev/null and b/_framework/System.Threading.dll.br differ diff --git a/_framework/System.Threading.dll.gz b/_framework/System.Threading.dll.gz new file mode 100644 index 00000000..05238d44 Binary files /dev/null and b/_framework/System.Threading.dll.gz differ diff --git a/_framework/blazor.boot.json b/_framework/blazor.boot.json new file mode 100644 index 00000000..77a1833c --- /dev/null +++ b/_framework/blazor.boot.json @@ -0,0 +1,71 @@ +{ + "cacheBootResources": true, + "config": [ ], + "debugBuild": false, + "entryAssembly": "Client", + "icuDataMode": 0, + "linkerEnabled": true, + "resources": { + "assembly": { + "Client.dll": "sha256-01Kmpkkg3G1OvIS0uOOfY5vD3aGOahtqQqJVeft0Zts=", + "Microsoft.AspNetCore.Components.dll": "sha256-G\/y1aIEOueA8T6QLwQEvSQGd92KpKO1TSHePX407vNs=", + "Microsoft.AspNetCore.Components.Web.dll": "sha256-RZ3kyisgkmhkAw8zQzFk3oA4cZAh+edQ3H0F+c+eh+w=", + "Microsoft.AspNetCore.Components.WebAssembly.dll": "sha256-VAzPu2AFQIrDCOlA70SDi2zvly9W\/UJzmOzlC7CeCUA=", + "Microsoft.Extensions.Configuration.Abstractions.dll": "sha256-X\/f4fDl2cuIRXeWHhK\/f2UqQbFioD+RU4a4CEh0zrrQ=", + "Microsoft.Extensions.Configuration.dll": "sha256-DBOKSPriP2JDxVbbWrLXyD3K4\/x3RBifNBWk\/q1I39M=", + "Microsoft.Extensions.Configuration.Json.dll": "sha256-Q5AqJneA2TZnzC0IYzBx6j\/tHRhWAeMbpH3BsV7KgWg=", + "Microsoft.Extensions.DependencyInjection.Abstractions.dll": "sha256-GIG75ZqN+MhCg0NdaZVmrJJGiDZFQZNiImVHVb1rJOk=", + "Microsoft.Extensions.DependencyInjection.dll": "sha256-qi0kE7rp0kdsNqdL6DyPZEeimjUGvcLT4iWQX0YnRus=", + "Microsoft.Extensions.Http.dll": "sha256-aAVXBd5KJPQUoNirOFqO\/0xkIqKpTJR7xU7z556uoq4=", + "Microsoft.Extensions.Logging.Abstractions.dll": "sha256-ycwic3FSnBTXmNXGJb\/GzmgWNUOiTKyLvUSE3cPW1ks=", + "Microsoft.Extensions.Logging.dll": "sha256-Sezvu1SpB+vPfYWMQ+LQtRpFvN9Ym3AvPDnKYCKxL14=", + "Microsoft.Extensions.Options.dll": "sha256-Ejg2oJ16fe1dfujkKQsdP1z1KU6remJ04GT21mm\/LI4=", + "Microsoft.Extensions.Primitives.dll": "sha256-eXvGx2jcjpTPEJoAHBsW\/VuMPbNyyU+AsuhPmkzSSRY=", + "Microsoft.JSInterop.dll": "sha256-mN9NRjCix+WoB4T5gP2gNXLioxZJp+0st1wi6zcIABc=", + "Microsoft.JSInterop.WebAssembly.dll": "sha256-LIeei4\/JFd3TBbtpEc1rneu+zOw4UNmSksghADw1m1I=", + "System.Collections.Concurrent.dll": "sha256-0cXl85VYsX6CyilionriYUAaj8DqqEVh7+VRmkXcLRA=", + "System.Collections.dll": "sha256-lkt4URp\/PLbN0JfCFRSoZyBz6VXfR1XzrHQg2CD27qY=", + "System.ComponentModel.dll": "sha256-pGP1Cnq1M\/2Hkyb2tJWqyVXzPDBaqoWBi3pBs4L1Cbg=", + "System.ComponentModel.Primitives.dll": "sha256-3FzuIJzrxZ1tSb0xQWLbiUZpXaXxI2VVnB8t32cEGjI=", + "System.ComponentModel.TypeConverter.dll": "sha256-HvgUACTn7Dkx\/sZ45n47VrERNEKDfpHNuDbiJTGCJ34=", + "System.Console.dll": "sha256-QJS987x0DO3eCNJgYOm1sGEdxgL3PIz+H\/Akny67TQ8=", + "System.Drawing.dll": "sha256-rkEqaTDDnAq8CQ6pRX0UrmCSREZUtp+tbYp0QGGTRNQ=", + "System.Drawing.Primitives.dll": "sha256-c8BCxpMoJ29HejZ5+TMeUWPJuOfAE8TekRdNbaOJ7kw=", + "System.Linq.dll": "sha256-V37nzuCQDbjlYDzjin0BCckdJ3cWuSv8MuqN9Jtkj4Q=", + "System.Linq.Expressions.dll": "sha256-1iHvHgjNIum1IaikPK7bNSgTTHYBBTk3UueCM\/74A4s=", + "System.Memory.dll": "sha256-A8ZjLMsxjsCFbd7DQ93yvfy4MmJKGtzEV2LkUuICi1M=", + "System.Net.Http.dll": "sha256-cd1iiqCBs2kxju+CSr0NKhMhialW\/R5HCHwa51evbCk=", + "System.Net.Http.Json.dll": "sha256-eQd6G0uwKIB\/KzOrUNs1XXAH8iuNg\/XVj+SPg73hgvU=", + "System.Net.Primitives.dll": "sha256-nOoLJh4+suOf3q43JBSknW99ybub9wjOpNW1tKX4V2I=", + "System.Numerics.Vectors.dll": "sha256-5kYY4dqeZTIBWWjxW4Px+8SqOGtYkOd4QatyoU3X7oo=", + "System.ObjectModel.dll": "sha256-P6kAFEDizjrUe8Tw0lEIPTktedLphNJ4gz8zcMaLTtE=", + "System.Private.CoreLib.dll": "sha256-apnEJTv7usAxuqAp0ief0R+CR1RYOTFFVll0vUEhiuc=", + "System.Private.Uri.dll": "sha256-9zUqdqdncmq4guO\/0AT2C9uWbU2qPEI5\/xuu6EngxtM=", + "System.Runtime.dll": "sha256-e+jHfCoViO0bW8WU+SwxPsGxFSdsntW8BVxLZbNJvUA=", + "System.Runtime.InteropServices.JavaScript.dll": "sha256-V6M5CXR+JpCjLiC7yftWX0J58hkjLibTP7jbc1e+sL8=", + "System.Text.Encodings.Web.dll": "sha256-bOs2gamD3eRmuwPs45F7UWWjRzRCriJxq1eZcdFogwk=", + "System.Text.Json.dll": "sha256-F4K6IGA7FOIIMuepeRDsx6Dnnyejz2CYsNsOQWgUKIM=", + "System.Threading.dll": "sha256-3iW2uXCAH35MEfs2Gu4a0xTV3vGgQliM3sRA4ljArZc=" + }, + "extensions": null, + "lazyAssembly": null, + "libraryInitializers": null, + "pdb": null, + "runtime": { + "dotnet.7.0.14.mikshhdjmu.js": "sha256-YWGUknGRzP\/fgO6YjvCJKPVQNZAPEd6ll+rHfQEIW+I=", + "dotnet.timezones.blat": "sha256-t5xviiOQTfAsF0UDhmcyalKiaehUmf\/sqJl97tmPM0M=", + "dotnet.wasm": "sha256-Oyo\/i3KkRvFfEKDQqn9DjK1HWx19Z6eCVCNsUFQPSJU=", + "icudt_CJK.dat": "sha256-SZLtQnRc0JkwqHab0VUVP7T3uBPSeYzxzDnpxPpUnHk=", + "icudt_EFIGS.dat": "sha256-8fItetYY8kQ0ww6oxwTLiT3oXlBwHKumbeP2pRF4yTc=", + "icudt_no_CJK.dat": "sha256-L7sV7NEYP37\/Qr2FPCePo5cJqRgTXRwGHuwF5Q+0Nfs=", + "icudt.dat": "sha256-tO5O5YzMTVSaKBboxAqezOQL9ewmupzV2JrB5Rkc8a4=" + }, + "runtimeAssets": { + "dotnet.wasm": { + "behavior": "dotnetwasm", + "hash": "sha256-Oyo\/i3KkRvFfEKDQqn9DjK1HWx19Z6eCVCNsUFQPSJU=" + } + }, + "satelliteResources": null + } +} \ No newline at end of file diff --git a/_framework/blazor.boot.json.br b/_framework/blazor.boot.json.br new file mode 100644 index 00000000..9f3d7a81 Binary files /dev/null and b/_framework/blazor.boot.json.br differ diff --git a/_framework/blazor.boot.json.gz b/_framework/blazor.boot.json.gz new file mode 100644 index 00000000..4bedbf21 Binary files /dev/null and b/_framework/blazor.boot.json.gz differ diff --git a/_framework/blazor.webassembly.js b/_framework/blazor.webassembly.js new file mode 100755 index 00000000..3262acbb --- /dev/null +++ b/_framework/blazor.webassembly.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,t,n;!function(e){window.DotNet=e;const t=[],n=new Map,r=new Map,o="__jsObjectId",s="__byte[]";class a{constructor(e){this._jsObject=e,this._cachedFunctions=new Map}findFunction(e){const t=this._cachedFunctions.get(e);if(t)return t;let n,r=this._jsObject;if(e.split(".").forEach((t=>{if(!(t in r))throw new Error(`Could not find '${e}' ('${t}' was undefined).`);n=r,r=r[t]})),r instanceof Function)return r=r.bind(n),this._cachedFunctions.set(e,r),r;throw new Error(`The value '${e}' is not a function.`)}getWrappedObject(){return this._jsObject}}const i={},c={0:new a(window)};c[0]._cachedFunctions.set("import",(e=>("string"==typeof e&&e.startsWith("./")&&(e=document.baseURI+e.substr(2)),import(e))));let l,u=1,d=1,f=null;function m(e){t.push(e)}function h(e){if(e&&"object"==typeof e){c[d]=new a(e);const t={[o]:d};return d++,t}throw new Error(`Cannot create a JSObjectReference from the value '${e}'.`)}function p(e){let t=-1;if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Blob)t=e.size;else{if(!(e.buffer instanceof ArrayBuffer))throw new Error("Supplied value is not a typed array or blob.");if(void 0===e.byteLength)throw new Error(`Cannot create a JSStreamReference from the value '${e}' as it doesn't have a byteLength.`);t=e.byteLength}const n={__jsStreamReferenceLength:t};try{const t=h(e);n.__jsObjectId=t.__jsObjectId}catch(t){throw new Error(`Cannot create a JSStreamReference from the value '${e}'.`)}return n}function y(e){return e?JSON.parse(e,((e,n)=>t.reduce(((t,n)=>n(e,t)),n))):null}function g(e,t,n,r){const o=w();if(o.invokeDotNetFromJS){const s=k(r),a=o.invokeDotNetFromJS(e,t,n,s);return a?y(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function b(e,t,n,r){if(e&&n)throw new Error(`For instance method calls, assemblyName should be null. Received '${e}'.`);const o=u++,s=new Promise(((e,t)=>{i[o]={resolve:e,reject:t}}));try{const s=k(r);w().beginInvokeDotNetFromJS(o,e,t,n,s)}catch(e){v(o,!1,e)}return s}function w(){if(null!==f)return f;throw new Error("No .NET call dispatcher has been set.")}function v(e,t,n){if(!i.hasOwnProperty(e))throw new Error(`There is no pending async call with ID ${e}.`);const r=i[e];delete i[e],t?r.resolve(n):r.reject(n)}function E(e){return e instanceof Error?`${e.message}\n${e.stack}`:e?e.toString():"null"}function _(e,t){const n=c[t];if(n)return n.findFunction(e);throw new Error(`JS object instance with ID ${t} does not exist (has it been disposed?).`)}function C(e){delete c[e]}e.attachDispatcher=function(e){f=e},e.attachReviver=m,e.invokeMethod=function(e,t,...n){return g(e,t,null,n)},e.invokeMethodAsync=function(e,t,...n){return b(e,t,null,n)},e.createJSObjectReference=h,e.createJSStreamReference=p,e.disposeJSObjectReference=function(e){const t=e&&e.__jsObjectId;"number"==typeof t&&C(t)},function(e){e[e.Default=0]="Default",e[e.JSObjectReference=1]="JSObjectReference",e[e.JSStreamReference=2]="JSStreamReference",e[e.JSVoidResult=3]="JSVoidResult"}(l=e.JSCallResultType||(e.JSCallResultType={})),e.jsCallDispatcher={findJSFunction:_,disposeJSObjectReferenceById:C,invokeJSFromDotNet:(e,t,n,r)=>{const o=R(_(e,r).apply(null,y(t)),n);return null==o?null:k(o)},beginInvokeJSFromDotNet:(e,t,n,r,o)=>{const s=new Promise((e=>{e(_(t,o).apply(null,y(n)))}));e&&s.then((t=>k([e,!0,R(t,r)]))).then((t=>w().endInvokeJSFromDotNet(e,!0,t)),(t=>w().endInvokeJSFromDotNet(e,!1,JSON.stringify([e,!1,E(t)]))))},endInvokeDotNetFromJS:(e,t,n)=>{const r=t?y(n):new Error(n);v(parseInt(e,10),t,r)},receiveByteArray:(e,t)=>{n.set(e,t)},supplyDotNetStream:(e,t)=>{if(r.has(e)){const n=r.get(e);r.delete(e),n.resolve(t)}else{const n=new S;n.resolve(t),r.set(e,n)}}};class A{constructor(e){this._id=e}invokeMethod(e,...t){return g(null,e,this._id,t)}invokeMethodAsync(e,...t){return b(null,e,this._id,t)}dispose(){b(null,"__Dispose",this._id,null).catch((e=>console.error(e)))}serializeAsArg(){return{__dotNetObject:this._id}}}e.DotNetObject=A,m((function(e,t){if(t&&"object"==typeof t){if(t.hasOwnProperty("__dotNetObject"))return new A(t.__dotNetObject);if(t.hasOwnProperty(o)){const e=t.__jsObjectId,n=c[e];if(n)return n.getWrappedObject();throw new Error(`JS object instance with Id '${e}' does not exist. It may have been disposed.`)}if(t.hasOwnProperty(s)){const e=t["__byte[]"],r=n.get(e);if(void 0===r)throw new Error(`Byte array index '${e}' does not exist.`);return n.delete(e),r}if(t.hasOwnProperty("__dotNetStream"))return new I(t.__dotNetStream)}return t}));class I{constructor(e){if(r.has(e))this._streamPromise=r.get(e).streamPromise,r.delete(e);else{const t=new S;r.set(e,t),this._streamPromise=t.streamPromise}}stream(){return this._streamPromise}async arrayBuffer(){return new Response(await this.stream()).arrayBuffer()}}class S{constructor(){this.streamPromise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}function R(e,t){switch(t){case l.Default:return e;case l.JSObjectReference:return h(e);case l.JSStreamReference:return p(e);case l.JSVoidResult:return null;default:throw new Error(`Invalid JS call result type '${t}'.`)}}let N=0;function k(e){return N=0,JSON.stringify(e,O)}function O(e,t){if(t instanceof A)return t.serializeAsArg();if(t instanceof Uint8Array){f.sendByteArray(N,t);const e={[s]:N};return N++,e}return t}}(e||(e={})),function(e){e[e.prependFrame=1]="prependFrame",e[e.removeFrame=2]="removeFrame",e[e.setAttribute=3]="setAttribute",e[e.removeAttribute=4]="removeAttribute",e[e.updateText=5]="updateText",e[e.stepIn=6]="stepIn",e[e.stepOut=7]="stepOut",e[e.updateMarkup=8]="updateMarkup",e[e.permutationListEntry=9]="permutationListEntry",e[e.permutationListEnd=10]="permutationListEnd"}(t||(t={})),function(e){e[e.element=1]="element",e[e.text=2]="text",e[e.attribute=3]="attribute",e[e.component=4]="component",e[e.region=5]="region",e[e.elementReferenceCapture=6]="elementReferenceCapture",e[e.markup=8]="markup"}(n||(n={}));class r{constructor(e,t){this.componentId=e,this.fieldValue=t}static fromEvent(e,t){const n=t.target;if(n instanceof Element){const t=function(e){return e instanceof HTMLInputElement?e.type&&"checkbox"===e.type.toLowerCase()?{value:e.checked}:{value:e.value}:e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement?{value:e.value}:null}(n);if(t)return new r(e,t.value)}return null}}const o=new Map,s=new Map,a=[];function i(e){return o.get(e)}function c(e){const t=o.get(e);return(null==t?void 0:t.browserEventName)||e}function l(e,t){e.forEach((e=>o.set(e,t)))}function u(e){const t=[];for(let n=0;ne.selected)).map((e=>e.value))}}{const e=function(e){return!!e&&"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")}(t);return{value:e?!!t.checked:t.value}}}}),l(["copy","cut","paste"],{createEventArgs:e=>({type:e.type})}),l(["drag","dragend","dragenter","dragleave","dragover","dragstart","drop"],{createEventArgs:e=>{return{...d(t=e),dataTransfer:t.dataTransfer?{dropEffect:t.dataTransfer.dropEffect,effectAllowed:t.dataTransfer.effectAllowed,files:Array.from(t.dataTransfer.files).map((e=>e.name)),items:Array.from(t.dataTransfer.items).map((e=>({kind:e.kind,type:e.type}))),types:t.dataTransfer.types}:null};var t}}),l(["focus","blur","focusin","focusout"],{createEventArgs:e=>({type:e.type})}),l(["keydown","keyup","keypress"],{createEventArgs:e=>{return{key:(t=e).key,code:t.code,location:t.location,repeat:t.repeat,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,type:t.type};var t}}),l(["contextmenu","click","mouseover","mouseout","mousemove","mousedown","mouseup","mouseleave","mouseenter","dblclick"],{createEventArgs:e=>d(e)}),l(["error"],{createEventArgs:e=>{return{message:(t=e).message,filename:t.filename,lineno:t.lineno,colno:t.colno,type:t.type};var t}}),l(["loadstart","timeout","abort","load","loadend","progress"],{createEventArgs:e=>{return{lengthComputable:(t=e).lengthComputable,loaded:t.loaded,total:t.total,type:t.type};var t}}),l(["touchcancel","touchend","touchmove","touchenter","touchleave","touchstart"],{createEventArgs:e=>{return{detail:(t=e).detail,touches:u(t.touches),targetTouches:u(t.targetTouches),changedTouches:u(t.changedTouches),ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,type:t.type};var t}}),l(["gotpointercapture","lostpointercapture","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"],{createEventArgs:e=>{return{...d(t=e),pointerId:t.pointerId,width:t.width,height:t.height,pressure:t.pressure,tiltX:t.tiltX,tiltY:t.tiltY,pointerType:t.pointerType,isPrimary:t.isPrimary};var t}}),l(["wheel","mousewheel"],{createEventArgs:e=>{return{...d(t=e),deltaX:t.deltaX,deltaY:t.deltaY,deltaZ:t.deltaZ,deltaMode:t.deltaMode};var t}}),l(["toggle"],{createEventArgs:()=>({})});const f=["date","datetime-local","month","time","week"],m=new Map;let h,p,y=0;const g={async add(e,t,n){if(!n)throw new Error("initialParameters must be an object, even if empty.");const r="__bl-dynamic-root:"+(++y).toString();m.set(r,e);const o=await v().invokeMethodAsync("AddRootComponent",t,r),s=new w(o,p[t]);return await s.setParameters(n),s}};class b{invoke(e){return this._callback(e)}setCallback(t){this._selfJSObjectReference||(this._selfJSObjectReference=e.createJSObjectReference(this)),this._callback=t}getJSObjectReference(){return this._selfJSObjectReference}dispose(){this._selfJSObjectReference&&e.disposeJSObjectReference(this._selfJSObjectReference)}}class w{constructor(e,t){this._jsEventCallbackWrappers=new Map,this._componentId=e;for(const e of t)"eventcallback"===e.type&&this._jsEventCallbackWrappers.set(e.name.toLowerCase(),new b)}setParameters(e){const t={},n=Object.entries(e||{}),r=n.length;for(const[e,r]of n){const n=this._jsEventCallbackWrappers.get(e.toLowerCase());n&&r?(n.setCallback(r),t[e]=n.getJSObjectReference()):t[e]=r}return v().invokeMethodAsync("SetRootComponentParameters",this._componentId,r,t)}async dispose(){if(null!==this._componentId){await v().invokeMethodAsync("RemoveRootComponent",this._componentId),this._componentId=null;for(const e of this._jsEventCallbackWrappers.values())e.dispose()}}}function v(){if(!h)throw new Error("Dynamic root components have not been enabled in this application.");return h}const E=new Map;let _;const C=new Promise((e=>{_=e}));function A(e,t,n){return S(e,t.eventHandlerId,(()=>I(e).invokeMethodAsync("DispatchEventAsync",t,n)))}function I(e){const t=E.get(e);if(!t)throw new Error(`No interop methods are registered for renderer ${e}`);return t}let S=(e,t,n)=>n();const R=j(["abort","blur","canplay","canplaythrough","change","cuechange","durationchange","emptied","ended","error","focus","load","loadeddata","loadedmetadata","loadend","loadstart","mouseenter","mouseleave","pointerenter","pointerleave","pause","play","playing","progress","ratechange","reset","scroll","seeked","seeking","stalled","submit","suspend","timeupdate","toggle","unload","volumechange","waiting","DOMNodeInsertedIntoDocument","DOMNodeRemovedFromDocument"]),N={submit:!0},k=j(["click","dblclick","mousedown","mousemove","mouseup"]);class O{constructor(e){this.browserRendererId=e,this.afterClickCallbacks=[];const t=++O.nextEventDelegatorId;this.eventsCollectionKey=`_blazorEvents_${t}`,this.eventInfoStore=new F(this.onGlobalEvent.bind(this))}setListener(e,t,n,r){const o=this.getEventHandlerInfosForElement(e,!0),s=o.getHandler(t);if(s)this.eventInfoStore.update(s.eventHandlerId,n);else{const s={element:e,eventName:t,eventHandlerId:n,renderingComponentId:r};this.eventInfoStore.add(s),o.setHandler(t,s)}}getHandler(e){return this.eventInfoStore.get(e)}removeListener(e){const t=this.eventInfoStore.remove(e);if(t){const e=t.element,n=this.getEventHandlerInfosForElement(e,!1);n&&n.removeHandler(t.eventName)}}notifyAfterClick(e){this.afterClickCallbacks.push(e),this.eventInfoStore.addGlobalListener("click")}setStopPropagation(e,t,n){this.getEventHandlerInfosForElement(e,!0).stopPropagation(t,n)}setPreventDefault(e,t,n){this.getEventHandlerInfosForElement(e,!0).preventDefault(t,n)}onGlobalEvent(e){if(!(e.target instanceof Element))return;this.dispatchGlobalEventToAllElements(e.type,e);const t=(n=e.type,s.get(n));var n;t&&t.forEach((t=>this.dispatchGlobalEventToAllElements(t,e))),"click"===e.type&&this.afterClickCallbacks.forEach((t=>t(e)))}dispatchGlobalEventToAllElements(e,t){const n=t.composedPath();let o=n.shift(),s=null,a=!1;const c=Object.prototype.hasOwnProperty.call(R,e);let l=!1;for(;o;){const f=o,m=this.getEventHandlerInfosForElement(f,!1);if(m){const n=m.getHandler(e);if(n&&(u=f,d=t.type,!((u instanceof HTMLButtonElement||u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLSelectElement)&&Object.prototype.hasOwnProperty.call(k,d)&&u.disabled))){if(!a){const n=i(e);s=(null==n?void 0:n.createEventArgs)?n.createEventArgs(t):{},a=!0}Object.prototype.hasOwnProperty.call(N,t.type)&&t.preventDefault(),A(this.browserRendererId,{eventHandlerId:n.eventHandlerId,eventName:e,eventFieldInfo:r.fromEvent(n.renderingComponentId,t)},s)}m.stopPropagation(e)&&(l=!0),m.preventDefault(e)&&t.preventDefault()}o=c||l?void 0:n.shift()}var u,d}getEventHandlerInfosForElement(e,t){return Object.prototype.hasOwnProperty.call(e,this.eventsCollectionKey)?e[this.eventsCollectionKey]:t?e[this.eventsCollectionKey]=new T:null}}O.nextEventDelegatorId=0;class F{constructor(e){this.globalListener=e,this.infosByEventHandlerId={},this.countByEventName={},a.push(this.handleEventNameAliasAdded.bind(this))}add(e){if(this.infosByEventHandlerId[e.eventHandlerId])throw new Error(`Event ${e.eventHandlerId} is already tracked`);this.infosByEventHandlerId[e.eventHandlerId]=e,this.addGlobalListener(e.eventName)}get(e){return this.infosByEventHandlerId[e]}addGlobalListener(e){if(e=c(e),Object.prototype.hasOwnProperty.call(this.countByEventName,e))this.countByEventName[e]++;else{this.countByEventName[e]=1;const t=Object.prototype.hasOwnProperty.call(R,e);document.addEventListener(e,this.globalListener,t)}}update(e,t){if(Object.prototype.hasOwnProperty.call(this.infosByEventHandlerId,t))throw new Error(`Event ${t} is already tracked`);const n=this.infosByEventHandlerId[e];delete this.infosByEventHandlerId[e],n.eventHandlerId=t,this.infosByEventHandlerId[t]=n}remove(e){const t=this.infosByEventHandlerId[e];if(t){delete this.infosByEventHandlerId[e];const n=c(t.eventName);0==--this.countByEventName[n]&&(delete this.countByEventName[n],document.removeEventListener(n,this.globalListener))}return t}handleEventNameAliasAdded(e,t){if(Object.prototype.hasOwnProperty.call(this.countByEventName,e)){const n=this.countByEventName[e];delete this.countByEventName[e],document.removeEventListener(e,this.globalListener),this.addGlobalListener(t),this.countByEventName[t]+=n-1}}}class T{constructor(){this.handlers={},this.preventDefaultFlags=null,this.stopPropagationFlags=null}getHandler(e){return Object.prototype.hasOwnProperty.call(this.handlers,e)?this.handlers[e]:null}setHandler(e,t){this.handlers[e]=t}removeHandler(e){delete this.handlers[e]}preventDefault(e,t){return void 0!==t&&(this.preventDefaultFlags=this.preventDefaultFlags||{},this.preventDefaultFlags[e]=t),!!this.preventDefaultFlags&&this.preventDefaultFlags[e]}stopPropagation(e,t){return void 0!==t&&(this.stopPropagationFlags=this.stopPropagationFlags||{},this.stopPropagationFlags[e]=t),!!this.stopPropagationFlags&&this.stopPropagationFlags[e]}}function j(e){const t={};return e.forEach((e=>{t[e]=!0})),t}const D=Y("_blazorLogicalChildren"),L=Y("_blazorLogicalParent"),B=Y("_blazorLogicalEnd");function P(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return D in e||(e[D]=[]),e}function M(e,t){const n=document.createComment("!");return x(n,e,t),n}function x(e,t,n){const r=e;if(e instanceof Comment&&U(r)&&U(r).length>0)throw new Error("Not implemented: inserting non-empty logical container");if(H(r))throw new Error("Not implemented: moving existing logical children");const o=U(t);if(n0;)$(n,0)}const r=n;r.parentNode.removeChild(r)}function H(e){return e[L]||null}function J(e,t){return U(e)[t]}function z(e){const t=K(e);return"http://www.w3.org/2000/svg"===t.namespaceURI&&"foreignObject"!==t.tagName}function U(e){return e[D]}function W(e,t){const n=U(e);t.forEach((e=>{e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=X(e.moveRangeStart)})),t.forEach((t=>{const r=document.createComment("marker");t.moveToBeforeMarker=r;const o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):G(r,e)})),t.forEach((e=>{const t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd;let s=r;for(;s;){const e=s.nextSibling;if(n.insertBefore(s,t),s===o)break;s=e}n.removeChild(t)})),t.forEach((e=>{n[e.toSiblingIndex]=e.moveRangeStart}))}function K(e){if(e instanceof Element||e instanceof DocumentFragment)return e;if(e instanceof Comment)return e.parentNode;throw new Error("Not a valid logical element")}function V(e){const t=U(H(e));return t[Array.prototype.indexOf.call(t,e)+1]||null}function G(e,t){if(t instanceof Element||t instanceof DocumentFragment)t.appendChild(e);else{if(!(t instanceof Comment))throw new Error(`Cannot append node because the parent is not a valid logical element. Parent: ${t}`);{const n=V(t);n?n.parentNode.insertBefore(e,n):G(e,H(t))}}}function X(e){if(e instanceof Element||e instanceof DocumentFragment)return e;const t=V(e);if(t)return t.previousSibling;{const t=H(e);return t instanceof Element||t instanceof DocumentFragment?t.lastChild:X(t)}}function Y(e){return"function"==typeof Symbol?Symbol():e}function q(e){return`_bl_${e}`}e.attachReviver(((e,t)=>t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,"__internalId")&&"string"==typeof t.__internalId?function(e){const t=`[${q(e)}]`;return document.querySelector(t)}(t.__internalId):t));const Z="_blazorDeferredValue",Q=document.createElement("template"),ee=document.createElementNS("http://www.w3.org/2000/svg","g"),te={},ne="__internal_",re="preventDefault_",oe="stopPropagation_";class se{constructor(e){this.rootComponentIds=new Set,this.childComponentLocations={},this.eventDelegator=new O(e),this.eventDelegator.notifyAfterClick((e=>{if(!he)return;if(0!==e.button||function(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}(e))return;if(e.defaultPrevented)return;const t=function(e){const t=!window._blazorDisableComposedPath&&e.composedPath&&e.composedPath();if(t){for(let e=0;edocument.baseURI,getLocationHref:()=>location.href};function Ae(e,t,n=!1){const r=Te(e);!t.forceLoad&&De(r)?Ie(r,!1,t.replaceHistoryEntry,t.historyEntryState,n):function(e,t){if(location.href===e){const t=e+"?";history.replaceState(null,"",t),location.replace(e)}else t?location.replace(e):location.href=e}(e,t.replaceHistoryEntry)}async function Ie(e,t,n,r,o=!1){Re(),(o||!ye||await Ne(e,r,t))&&(fe=!0,n?history.replaceState({userState:r,_index:ge},"",e):(ge++,history.pushState({userState:r,_index:ge},"",e)),await ke(t))}function Se(e){return new Promise((t=>{const n=Ee;Ee=()=>{Ee=n,t()},history.go(e)}))}function Re(){_e&&(_e(!1),_e=null)}function Ne(e,t,n){return new Promise((r=>{Re(),ve?(be++,_e=r,ve(be,e,t,n)):r(!1)}))}async function ke(e){var t;we&&await we(location.href,null===(t=history.state)||void 0===t?void 0:t.userState,e)}async function Oe(e){var t,n;Ee&&await Ee(e),ge=null!==(n=null===(t=history.state)||void 0===t?void 0:t._index)&&void 0!==n?n:0}let Fe;function Te(e){return Fe=Fe||document.createElement("a"),Fe.href=e,Fe.href}function je(e,t){return e?e.tagName===t?e:je(e.parentElement,t):null}function De(e){const t=(n=document.baseURI).substring(0,n.lastIndexOf("/"));var n;const r=e.charAt(t.length);return e.startsWith(t)&&(""===r||"/"===r||"?"===r||"#"===r)}const Le={focus:function(e,t){if(e instanceof HTMLElement)e.focus({preventScroll:t});else{if(!(e instanceof SVGElement))throw new Error("Unable to focus an invalid element.");if(!e.hasAttribute("tabindex"))throw new Error("Unable to focus an SVG element that does not have a tabindex.");e.focus({preventScroll:t})}},focusBySelector:function(e){const t=document.querySelector(e);t&&(t.hasAttribute("tabindex")||(t.tabIndex=-1),t.focus())}},Be={init:function(e,t,n,r=50){const o=Me(t);(o||document.documentElement).style.overflowAnchor="none";const s=document.createRange();u(n.parentElement)&&(t.style.display="table-row",n.style.display="table-row");const a=new IntersectionObserver((function(r){r.forEach((r=>{var o;if(!r.isIntersecting)return;s.setStartAfter(t),s.setEndBefore(n);const a=s.getBoundingClientRect().height,i=null===(o=r.rootBounds)||void 0===o?void 0:o.height;r.target===t?e.invokeMethodAsync("OnSpacerBeforeVisible",r.intersectionRect.top-r.boundingClientRect.top,a,i):r.target===n&&n.offsetHeight>0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,a,i)}))}),{root:o,rootMargin:`${r}px`});a.observe(t),a.observe(n);const i=l(t),c=l(n);function l(e){const t={attributes:!0},n=new MutationObserver(((n,r)=>{u(e.parentElement)&&(r.disconnect(),e.style.display="table-row",r.observe(e,t)),a.unobserve(e),a.observe(e)}));return n.observe(e,t),n}function u(e){return null!==e&&(e instanceof HTMLTableElement&&""===e.style.display||"table"===e.style.display||e instanceof HTMLTableSectionElement&&""===e.style.display||"table-row-group"===e.style.display)}Pe[e._id]={intersectionObserver:a,mutationObserverBefore:i,mutationObserverAfter:c}},dispose:function(e){const t=Pe[e._id];t&&(t.intersectionObserver.disconnect(),t.mutationObserverBefore.disconnect(),t.mutationObserverAfter.disconnect(),e.dispose(),delete Pe[e._id])}},Pe={};function Me(e){return e&&e!==document.body&&e!==document.documentElement?"visible"!==getComputedStyle(e).overflowY?e:Me(e.parentElement):null}const xe={getAndRemoveExistingTitle:function(){var e;const t=document.head?document.head.getElementsByTagName("title"):[];if(0===t.length)return null;let n=null;for(let r=t.length-1;r>=0;r--){const o=t[r],s=o.previousSibling;s instanceof Comment&&null!==H(s)||(null===n&&(n=o.textContent),null===(e=o.parentNode)||void 0===e||e.removeChild(o))}return n}},$e={init:function(e,t){t._blazorInputFileNextFileId=0,t.addEventListener("click",(function(){t.value=""})),t.addEventListener("change",(function(){t._blazorFilesById={};const n=Array.prototype.map.call(t.files,(function(e){const n={id:++t._blazorInputFileNextFileId,lastModified:new Date(e.lastModified).toISOString(),name:e.name,size:e.size,contentType:e.type,readPromise:void 0,arrayBuffer:void 0,blob:e};return t._blazorFilesById[n.id]=n,n}));e.invokeMethodAsync("NotifyChange",n)}))},toImageFile:async function(e,t,n,r,o){const s=He(e,t),a=await new Promise((function(e){const t=new Image;t.onload=function(){URL.revokeObjectURL(t.src),e(t)},t.onerror=function(){t.onerror=null,URL.revokeObjectURL(t.src)},t.src=URL.createObjectURL(s.blob)})),i=await new Promise((function(e){var t;const s=Math.min(1,r/a.width),i=Math.min(1,o/a.height),c=Math.min(s,i),l=document.createElement("canvas");l.width=Math.round(a.width*c),l.height=Math.round(a.height*c),null===(t=l.getContext("2d"))||void 0===t||t.drawImage(a,0,0,l.width,l.height),l.toBlob(e,n)})),c={id:++e._blazorInputFileNextFileId,lastModified:s.lastModified,name:s.name,size:(null==i?void 0:i.size)||0,contentType:n,blob:i||s.blob};return e._blazorFilesById[c.id]=c,c},readFileData:async function(e,t){return He(e,t).blob}};function He(e,t){const n=e._blazorFilesById[t];if(!n)throw new Error(`There is no file with ID ${t}. The file list may have changed. See https://aka.ms/aspnet/blazor-input-file-multiple-selections.`);return n}const Je=new Set,ze={enableNavigationPrompt:function(e){0===Je.size&&window.addEventListener("beforeunload",Ue),Je.add(e)},disableNavigationPrompt:function(e){Je.delete(e),0===Je.size&&window.removeEventListener("beforeunload",Ue)}};function Ue(e){e.preventDefault(),e.returnValue=!0}const We=new Map,Ke={navigateTo:function(e,t,n=!1){Ae(e,t instanceof Object?t:{forceLoad:t,replaceHistoryEntry:n})},registerCustomEventType:function(e,t){if(!t)throw new Error("The options parameter is required.");if(o.has(e))throw new Error(`The event '${e}' is already registered.`);if(t.browserEventName){const n=s.get(t.browserEventName);n?n.push(e):s.set(t.browserEventName,[e]),a.forEach((n=>n(e,t.browserEventName)))}o.set(e,t)},rootComponents:g,_internal:{navigationManager:Ce,domWrapper:Le,Virtualize:Be,PageTitle:xe,InputFile:$e,NavigationLock:ze,getJSDataStreamChunk:async function(e,t,n){return e instanceof Blob?await async function(e,t,n){const r=e.slice(t,t+n),o=await r.arrayBuffer();return new Uint8Array(o)}(e,t,n):function(e,t,n){return new Uint8Array(e.buffer,e.byteOffset+t,n)}(e,t,n)},receiveDotNetDataStream:function(t,n,r,o){let s=We.get(t);if(!s){const n=new ReadableStream({start(e){We.set(t,e),s=e}});e.jsCallDispatcher.supplyDotNetStream(t,n)}o?(s.error(o),We.delete(t)):0===r?(s.close(),We.delete(t)):s.enqueue(n.length===r?n:n.subarray(0,r))},attachWebRendererInterop:function(t,n,r,o){if(E.has(t))throw new Error(`Interop methods are already registered for renderer ${t}`);E.set(t,n),Object.keys(r).length>0&&function(t,n,r){if(h)throw new Error("Dynamic root components have already been enabled.");h=t,p=n;for(const[t,o]of Object.entries(r)){const r=e.jsCallDispatcher.findJSFunction(t,0);for(const e of o)r(e,n[e])}}(I(t),r,o),_()}}};let Ve;function Ge(e){return Ve=e,Ve}var Xe,Ye;window.Blazor=Ke;const qe=navigator,Ze=qe.userAgentData&&qe.userAgentData.brands,Qe=Ze?Ze.some((e=>"Google Chrome"===e.brand||"Microsoft Edge"===e.brand||"Chromium"===e.brand)):window.chrome,et=null!==(Ye=null===(Xe=qe.userAgentData)||void 0===Xe?void 0:Xe.platform)&&void 0!==Ye?Ye:navigator.platform;let tt=!1,nt=!1;function rt(){return(tt||nt)&&Qe}let ot=!1;function st(){const e=document.querySelector("#blazor-error-ui");e&&(e.style.display="block"),ot||(ot=!0,document.querySelectorAll("#blazor-error-ui .reload").forEach((e=>{e.onclick=function(e){location.reload(),e.preventDefault()}})),document.querySelectorAll("#blazor-error-ui .dismiss").forEach((e=>{e.onclick=function(e){const t=document.querySelector("#blazor-error-ui");t&&(t.style.display="none"),e.preventDefault()}})))}class at{constructor(e,t){this.bootConfig=e,this.applicationEnvironment=t}static async initAsync(e,t){const n=void 0!==e?e("manifest","blazor.boot.json","_framework/blazor.boot.json",""):a("_framework/blazor.boot.json");let r;r=n?"string"==typeof n?await a(n):await n:await a("_framework/blazor.boot.json");const o=t||r.headers.get("Blazor-Environment")||"Production",s=await r.json();return s.modifiableAssemblies=r.headers.get("DOTNET-MODIFIABLE-ASSEMBLIES"),s.aspnetCoreBrowserTools=r.headers.get("ASPNETCORE-BROWSER-TOOLS"),new at(s,o);function a(e){return fetch(e,{method:"GET",credentials:"include",cache:"no-cache"})}}}var it;let ct,lt,ut,dt;!function(e){e[e.Sharded=0]="Sharded",e[e.All=1]="All",e[e.Invariant=2]="Invariant"}(it||(it={}));const ft=Math.pow(2,32),mt=Math.pow(2,21)-1;let ht=null;function pt(e){return lt.getI32(e)}const yt={start:async function(t){(function(e){tt=!!e.bootConfig.resources.pdb,nt=e.bootConfig.debugBuild;const t=et.match(/^Mac/i)?"Cmd":"Alt";rt()&&console.info(`Debugging hotkey: Shift+${t}+D (when application has focus)`),document.addEventListener("keydown",(e=>{e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(nt||tt?Qe?function(){const e=document.createElement("a");e.href=`_framework/debug?url=${encodeURIComponent(location.href)}`,e.target="_blank",e.rel="noopener noreferrer",e.click()}():console.error("Currently, only Microsoft Edge (80+), Google Chrome, or Chromium, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))})(t),await async function(t){let n,r;const o=new Promise(((e,t)=>{n=e,r=t})),s=async function(e){if("undefined"==typeof WebAssembly||!WebAssembly.validate)throw new Error("This browser does not support WebAssembly.");const t=Object.keys(e.bootConfig.resources.runtime).filter((e=>e.startsWith("dotnet.")&&e.endsWith(".js")))[0],n=e.bootConfig.resources.runtime[t];let r,o=`_framework/${t}`;if(e.startOptions.loadBootResource){const r="dotnetjs",s=e.startOptions.loadBootResource(r,t,o,n);if("string"==typeof s)o=s;else if(s)throw new Error(`For a ${r} resource, custom loaders must supply a URI string.`)}if(e.bootConfig.cacheBootResources){const e=document.createElement("link");e.rel="modulepreload",e.href=o,e.crossOrigin="anonymous",e.integrity=n,document.head.appendChild(e)}const s=new Promise((e=>{r=e}));globalThis.__onDotnetRuntimeLoaded=e=>{delete globalThis.__onDotnetRuntimeLoaded,r(e)};const a=new URL(o,document.baseURI).toString(),{default:i}=await import(a);return i?(delete globalThis.__onDotnetRuntimeLoaded,i):await s}(t),a=t.bootConfig.resources,i=window.Module||{},c=["DEBUGGING ENABLED"],l=e=>c.indexOf(e)<0&&console.log(e),u=e=>{console.error(e),st()},d=i.preRun||[],f=i.postRun||[];i.preloadPlugins=[];let m=0;function h(){m++;const e=m/b.length*100;document.documentElement.style.setProperty("--blazor-load-percentage",`${e}%`),document.documentElement.style.setProperty("--blazor-load-percentage-text",`"${Math.floor(e)}%"`)}const p=t.loadResources(a.assembly,(e=>`_framework/${e}`),"assembly"),y=t.loadResources(a.pdb||{},(e=>`_framework/${e}`),"pdb"),g=t.loadResource("dotnet.wasm","_framework/dotnet.wasm",t.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm"),b=p.concat(y,g);b.forEach((e=>e.response.then((e=>h()))));const w="dotnet.timezones.blat";let v,E;if(t.bootConfig.resources.runtime.hasOwnProperty(w)&&(v=t.loadResource(w,"_framework/dotnet.timezones.blat",t.bootConfig.resources.runtime["dotnet.timezones.blat"],"globalization"),b.push(v),v.response.then((e=>h()))),t.bootConfig.icuDataMode!==it.Invariant){const e=t.startOptions.applicationCulture||navigator.languages&&navigator.languages[0],n=function(e,t){if(!t||e.icuDataMode===it.All)return"icudt.dat";const n=t.split("-")[0];return["en","fr","it","de","es"].includes(n)?"icudt_EFIGS.dat":["zh","ko","ja"].includes(n)?"icudt_CJK.dat":"icudt_no_CJK.dat"}(t.bootConfig,e);E=t.loadResource(n,`_framework/${n}`,t.bootConfig.resources.runtime[n],"globalization"),b.push(E),E.response.then((e=>h()))}const _=await s;return await _((o=>{const{MONO:s,BINDING:a,Module:c,IMPORTS:m}=o;async function h(e,t){const n=`blazor:${e.name}`;ut.addRunDependency(n);try{const n=await e.response.then((e=>e.arrayBuffer())),r=new Uint8Array(n),s=ut._malloc(r.length);new Uint8Array(ut.HEAPU8.buffer,s,r.length).set(r),lt.mono_wasm_add_assembly(t,s,r.length),lt.loaded_files.push((o=e.url,gt.href=o,gt.href))}catch(e){return void r(e)}var o;ut.removeRunDependency(n)}return ut=c,ct=a,lt=s,dt=m,{...i,disableDotnet6Compatibility:!1,preRun:[()=>{v&&async function(e){const t="blazor:timezonedata";ut.addRunDependency(t);const n=await e.response,r=await n.arrayBuffer();ut.FS_createPath("/","usr",!0,!0),ut.FS_createPath("/usr/","share",!0,!0),ut.FS_createPath("/usr/share/","zoneinfo",!0,!0),lt.mono_wasm_load_data_archive(new Uint8Array(r),"/usr/share/zoneinfo/"),ut.removeRunDependency(t)}(v),E&&async function(e){const t="blazor:icudata";ut.addRunDependency(t);const n=await e.response,r=new Uint8Array(await n.arrayBuffer()),o=lt.mono_wasm_load_bytes_into_heap(r);if(!lt.mono_wasm_load_icu_data(o))throw new Error("Error loading ICU asset.");ut.removeRunDependency(t)}(E),p.forEach((e=>h(e,Et(e.name,".dll")))),y.forEach((e=>h(e,e.name))),Ke._internal.dotNetCriticalError=e=>u(e||"(null)"),Ke._internal.getSatelliteAssemblies=e=>{const n=ct.mono_array_to_js_array(e),r=t.bootConfig.resources.satelliteResources;if(r){const e=Promise.all(n.filter((e=>r.hasOwnProperty(e))).map((e=>t.loadResources(r[e],(e=>`_framework/${e}`),"assembly"))).reduce(((e,t)=>e.concat(t)),new Array).map((async e=>(await e.response).arrayBuffer())));return ct.js_to_mono_obj(e.then((e=>(e.length&&(Ke._internal.readSatelliteAssemblies=()=>{const t=ct.mono_obj_array_new(e.length);for(let n=0;n{const r=ct.mono_array_to_js_array(n),o=t.bootConfig.resources.lazyAssembly;if(!o)throw new Error("No assemblies have been marked as lazy-loadable. Use the 'BlazorWebAssemblyLazyLoad' item group in your project file to enable lazy loading an assembly.");const s=r.filter((e=>o.hasOwnProperty(e)));if(s.length!==r.length){const e=r.filter((e=>!s.includes(e)));throw new Error(`${e.join()} must be marked with 'BlazorWebAssemblyLazyLoad' item group in your project file to allow lazy-loading.`)}let a;if(rt()){const e=t.bootConfig.resources.pdb,n=s.map((e=>Et(e,".pdb")));e&&(a=Promise.all(n.map((e=>o.hasOwnProperty(e)?t.loadResource(e,`_framework/${e}`,o[e],"pdb"):null)).map((async e=>e?(await e.response).arrayBuffer():null))))}const i=Promise.all(s.map((e=>t.loadResource(e,`_framework/${e}`,o[e],"assembly"))).map((async e=>(await e.response).arrayBuffer())));return ct.js_to_mono_obj(Promise.all([i,a]).then((t=>(e.assemblies=t[0],e.pdbs=t[1],e.assemblies.length&&(Ke._internal.readLazyAssemblies=()=>{const{assemblies:t}=e;if(!t)return ct.mono_obj_array_new(0);const n=ct.mono_obj_array_new(t.length);for(let e=0;e{const{assemblies:t,pdbs:n}=e;if(!t)return ct.mono_obj_array_new(0);const r=ct.mono_obj_array_new(t.length);for(let e=0;e{t.bootConfig.debugBuild&&t.bootConfig.cacheBootResources&&t.logToConsole(),t.purgeUnusedCacheEntriesAsync(),t.bootConfig.icuDataMode===it.Sharded&&(lt.mono_wasm_setenv("__BLAZOR_SHARDED_ICU","1"),t.startOptions.applicationCulture&<.mono_wasm_setenv("LANG",`${t.startOptions.applicationCulture}.UTF-8`));let r="UTC";try{r=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}lt.mono_wasm_setenv("TZ",r||"UTC"),t.bootConfig.modifiableAssemblies&<.mono_wasm_setenv("DOTNET_MODIFIABLE_ASSEMBLIES",t.bootConfig.modifiableAssemblies),t.bootConfig.aspnetCoreBrowserTools&<.mono_wasm_setenv("__ASPNETCORE_BROWSER_TOOLS",t.bootConfig.aspnetCoreBrowserTools),lt.mono_wasm_load_runtime("appBinDir",rt()?-1:0),lt.mono_wasm_runtime_ready();try{ct.bind_static_method("invalid-fqn","")}catch(e){}dt.Blazor={_internal:Ke._internal},function(){const t=wt("Microsoft.AspNetCore.Components.WebAssembly","Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime","InvokeDotNet"),n=wt("Microsoft.AspNetCore.Components.WebAssembly","Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime","BeginInvokeDotNet"),r=wt("Microsoft.AspNetCore.Components.WebAssembly","Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime","EndInvokeJS"),o=wt("Microsoft.AspNetCore.Components.WebAssembly","Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime","NotifyByteArrayAvailable");e.attachDispatcher({beginInvokeDotNetFromJS:(e,t,r,o,s)=>{if(_t(),!o&&!t)throw new Error("Either assemblyName or dotNetObjectId must have a non null value.");const a=o?o.toString():t;n(e?e.toString():null,a,r,s)},endInvokeJSFromDotNet:(e,t,n)=>{r(n)},sendByteArray:(e,t)=>{vt=t,o(e)},invokeDotNetFromJS:(e,n,r,o)=>(_t(),t(e||null,n,r?r.toString():null,o))})}(),n(o)},...f],print:l,printErr:u,instantiateWasm:(e,t)=>((async()=>{let n;try{const t=await g;n=await async function(e,t){var n;const r=await e.response,o="application/wasm"===(null===(n=r.headers)||void 0===n?void 0:n.get("content-type"));if(o&&"function"==typeof WebAssembly.instantiateStreaming)return(await WebAssembly.instantiateStreaming(r,t)).instance;{o||console.warn('WebAssembly resource does not have the expected content type "application/wasm", so falling back to slower ArrayBuffer instantiation.');const e=await r.arrayBuffer();return(await WebAssembly.instantiate(e,t)).instance}}(t,e)}catch(e){throw u(e.toString()),e}t(n)})(),[]),onRuntimeInitialized:()=>{E||lt.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT","1")}}})),await o}(t)},callEntryPoint:async function(e){const t=[[]];try{await ct.call_assembly_entry_point(e,t,"m")}catch(e){console.error(e),st()}},toUint8Array:function(e){const t=bt(e),n=pt(t),r=new Uint8Array(n);return r.set(ut.HEAPU8.subarray(t+4,t+4+n)),r},getArrayLength:function(e){return pt(bt(e))},getArrayEntryPtr:function(e,t,n){return bt(e)+4+t*n},getObjectFieldsBaseAddress:function(e){return e+8},readInt16Field:function(e,t){return n=e+(t||0),lt.getI16(n);var n},readInt32Field:function(e,t){return pt(e+(t||0))},readUint64Field:function(e,t){return function(e){const t=e>>2,n=ut.HEAPU32[t+1];if(n>mt)throw new Error(`Cannot read uint64 with high order part ${n}, because the result would exceed Number.MAX_SAFE_INTEGER.`);return n*ft+ut.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),lt.getF32(n);var n},readObjectField:function(e,t){return pt(e+(t||0))},readStringField:function(e,t,n){const r=pt(e+(t||0));if(0===r)return null;if(n){const e=ct.unbox_mono_obj(r);return"boolean"==typeof e?e?"":null:e}let o;return ht?(o=ht.stringCache.get(r),void 0===o&&(o=ct.conv_string(r),ht.stringCache.set(r,o))):o=ct.conv_string(r),o},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return _t(),ht=new Ct,ht},invokeWhenHeapUnlocked:function(e){ht?ht.enqueuePostReleaseAction(e):e()}},gt=document.createElement("a");function bt(e){return e+12}function wt(e,t,n){const r=`[${e}] ${t}:${n}`;return ct.bind_static_method(r)}let vt=null;function Et(e,t){const n=e.lastIndexOf(".");if(n<0)throw new Error(`No extension to replace in '${e}'`);return e.substr(0,n)+t}function _t(){if(ht)throw new Error("Assertion failed - heap is currently locked")}class Ct{constructor(){this.stringCache=new Map}enqueuePostReleaseAction(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)}release(){var e;if(ht!==this)throw new Error("Trying to release a lock which isn't current");for(ht=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;)this.postReleaseActions.shift()(),_t()}}class At{constructor(e){this.batchAddress=e,this.arrayRangeReader=It,this.arrayBuilderSegmentReader=St,this.diffReader=Rt,this.editReader=Nt,this.frameReader=kt}updatedComponents(){return Ve.readStructField(this.batchAddress,0)}referenceFrames(){return Ve.readStructField(this.batchAddress,It.structLength)}disposedComponentIds(){return Ve.readStructField(this.batchAddress,2*It.structLength)}disposedEventHandlerIds(){return Ve.readStructField(this.batchAddress,3*It.structLength)}updatedComponentsEntry(e,t){return Ot(e,t,Rt.structLength)}referenceFramesEntry(e,t){return Ot(e,t,kt.structLength)}disposedComponentIdsEntry(e,t){const n=Ot(e,t,4);return Ve.readInt32Field(n)}disposedEventHandlerIdsEntry(e,t){const n=Ot(e,t,8);return Ve.readUint64Field(n)}}const It={structLength:8,values:e=>Ve.readObjectField(e,0),count:e=>Ve.readInt32Field(e,4)},St={structLength:12,values:e=>{const t=Ve.readObjectField(e,0),n=Ve.getObjectFieldsBaseAddress(t);return Ve.readObjectField(n,0)},offset:e=>Ve.readInt32Field(e,4),count:e=>Ve.readInt32Field(e,8)},Rt={structLength:4+St.structLength,componentId:e=>Ve.readInt32Field(e,0),edits:e=>Ve.readStructField(e,4),editsEntry:(e,t)=>Ot(e,t,Nt.structLength)},Nt={structLength:20,editType:e=>Ve.readInt32Field(e,0),siblingIndex:e=>Ve.readInt32Field(e,4),newTreeIndex:e=>Ve.readInt32Field(e,8),moveToSiblingIndex:e=>Ve.readInt32Field(e,8),removedAttributeName:e=>Ve.readStringField(e,16)},kt={structLength:36,frameType:e=>Ve.readInt16Field(e,4),subtreeLength:e=>Ve.readInt32Field(e,8),elementReferenceCaptureId:e=>Ve.readStringField(e,16),componentId:e=>Ve.readInt32Field(e,12),elementName:e=>Ve.readStringField(e,16),textContent:e=>Ve.readStringField(e,16),markupContent:e=>Ve.readStringField(e,16),attributeName:e=>Ve.readStringField(e,16),attributeValue:e=>Ve.readStringField(e,24,!0),attributeEventHandlerId:e=>Ve.readUint64Field(e,8)};function Ot(e,t,n){return Ve.getArrayEntryPtr(e,t,n)}class Ft{constructor(e,t,n){this.bootConfig=e,this.cacheIfUsed=t,this.startOptions=n,this.usedCacheKeys={},this.networkLoads={},this.cacheLoads={}}static async initAsync(e,t){const n=await async function(e){if(!e.cacheBootResources||"undefined"==typeof caches)return null;if(!1===window.isSecureContext)return null;const t=`blazor-resources-${document.baseURI.substring(document.location.origin.length)}`;try{return await caches.open(t)||null}catch{return null}}(e);return new Ft(e,n,t)}loadResources(e,t,n){return Object.keys(e).map((r=>this.loadResource(r,t(r),e[r],n)))}loadResource(e,t,n,r){return{name:e,url:t,response:this.cacheIfUsed?this.loadResourceWithCaching(this.cacheIfUsed,e,t,n,r):this.loadResourceWithoutCaching(e,t,n,r)}}logToConsole(){const e=Object.values(this.cacheLoads),t=Object.values(this.networkLoads),n=Tt(e),r=Tt(t),o=n+r;if(0===o)return;const s=this.bootConfig.linkerEnabled?"%c":"\n%cThis application was built with linking (tree shaking) disabled. Published applications will be significantly smaller.";console.groupCollapsed(`%cblazor%c Loaded ${jt(o)} resources${s}`,"background: purple; color: white; padding: 1px 3px; border-radius: 3px;","font-weight: bold;","font-weight: normal;"),e.length&&(console.groupCollapsed(`Loaded ${jt(n)} resources from cache`),console.table(this.cacheLoads),console.groupEnd()),t.length&&(console.groupCollapsed(`Loaded ${jt(r)} resources from network`),console.table(this.networkLoads),console.groupEnd()),console.groupEnd()}async purgeUnusedCacheEntriesAsync(){const e=this.cacheIfUsed;if(e){const t=(await e.keys()).map((async t=>{t.url in this.usedCacheKeys||await e.delete(t)}));await Promise.all(t)}}async loadResourceWithCaching(e,t,n,r,o){if(!r||0===r.length)throw new Error("Content hash is required");const s=Te(`${n}.${r}`);let a;this.usedCacheKeys[s]=!0;try{a=await e.match(s)}catch{}if(a){const e=parseInt(a.headers.get("content-length")||"0");return this.cacheLoads[t]={responseBytes:e},a}{const a=await this.loadResourceWithoutCaching(t,n,r,o);return this.addToCacheAsync(e,t,s,a),a}}loadResourceWithoutCaching(e,t,n,r){if(this.startOptions.loadBootResource){const o=this.startOptions.loadBootResource(r,e,t,n);if(o instanceof Promise)return o;"string"==typeof o&&(t=o)}return fetch(t,{cache:"no-cache",integrity:this.bootConfig.cacheBootResources?n:void 0})}async addToCacheAsync(e,t,n,r){const o=await r.clone().arrayBuffer(),s=function(e){if("undefined"!=typeof performance)return performance.getEntriesByName(e)[0]}(r.url),a=s&&s.encodedBodySize||void 0;this.networkLoads[t]={responseBytes:a};const i=new Response(o,{headers:{"content-type":r.headers.get("content-type")||"","content-length":(a||r.headers.get("content-length")||"").toString()}});try{await e.put(n,i)}catch{}}}function Tt(e){return e.reduce(((e,t)=>e+(t.responseBytes||0)),0)}function jt(e){return`${(e/1048576).toFixed(2)} MB`}class Dt{static async initAsync(e){Ke._internal.getApplicationEnvironment=()=>ct.js_string_to_mono_string(e.applicationEnvironment);const t=await Promise.all((e.bootConfig.config||[]).filter((t=>"appsettings.json"===t||t===`appsettings.${e.applicationEnvironment}.json`)).map((async e=>({name:e,content:await n(e)}))));async function n(e){const t=await fetch(e,{method:"GET",credentials:"include",cache:"no-cache"});return new Uint8Array(await t.arrayBuffer())}Ke._internal.getConfig=e=>{const n=ct.conv_string(e),r=t.find((e=>e.name===n));return r?ct.js_typed_array_to_array(r.content):void 0}}}class Lt{constructor(e){this.preregisteredComponents=e;const t={};for(let n=0;no.push(e))),e[L]=r,t&&(e[B]=t,P(t)),P(e)}(this.componentsById[t].start,this.componentsById[t].end)}getParameterValues(e){return this.componentsById[e].parameterValues}getParameterDefinitions(e){return this.componentsById[e].parameterDefinitions}getTypeName(e){return this.componentsById[e].typeName}getAssembly(e){return this.componentsById[e].assembly}getId(e){return this.preregisteredComponents[e].id}getCount(){return this.preregisteredComponents.length}}const Bt=/^\s*Blazor-Component-State:(?[a-zA-Z0-9+/=]+)$/;function Pt(e){var t;if(e.nodeType===Node.COMMENT_NODE){const n=e.textContent||"",r=Bt.exec(n),o=r&&r.groups&&r.groups.state;return o&&(null===(t=e.parentNode)||void 0===t||t.removeChild(e)),o}if(!e.hasChildNodes())return;const n=e.childNodes;for(let e=0;e.*)$/);function $t(e,t){const n=e.currentElement;if(n&&n.nodeType===Node.COMMENT_NODE&&n.textContent){const r=xt.exec(n.textContent),o=r&&r.groups&&r.groups.descriptor;if(!o)return;try{const r=function(e){const t=JSON.parse(e),{type:n}=t;if("server"!==n&&"webassembly"!==n)throw new Error(`Invalid component type '${n}'.`);return t}(o);switch(t){case"webassembly":return function(e,t,n){const{type:r,assembly:o,typeName:s,parameterDefinitions:a,parameterValues:i,prerenderId:c}=e;if("webassembly"===r){if(!o)throw new Error("assembly must be defined when using a descriptor.");if(!s)throw new Error("typeName must be defined when using a descriptor.");if(c){const e=Ht(c,n);if(!e)throw new Error(`Could not find an end component comment for '${t}'`);return{type:r,assembly:o,typeName:s,parameterDefinitions:a&&atob(a),parameterValues:i&&atob(i),start:t,prerenderId:c,end:e}}return{type:r,assembly:o,typeName:s,parameterDefinitions:a&&atob(a),parameterValues:i&&atob(i),start:t}}}(r,n,e);case"server":return function(e,t,n){const{type:r,descriptor:o,sequence:s,prerenderId:a}=e;if("server"===r){if(!o)throw new Error("descriptor must be defined when using a descriptor.");if(void 0===s)throw new Error("sequence must be defined when using a descriptor.");if(!Number.isInteger(s))throw new Error(`Error parsing the sequence '${s}' for component '${JSON.stringify(e)}'`);if(a){const e=Ht(a,n);if(!e)throw new Error(`Could not find an end component comment for '${t}'`);return{type:r,sequence:s,descriptor:o,start:t,prerenderId:a,end:e}}return{type:r,sequence:s,descriptor:o,start:t}}}(r,n,e)}}catch(e){throw new Error(`Found malformed component comment at ${n.textContent}`)}}}function Ht(e,t){for(;t.next()&&t.currentElement;){const n=t.currentElement;if(n.nodeType!==Node.COMMENT_NODE)continue;if(!n.textContent)continue;const r=xt.exec(n.textContent),o=r&&r[1];if(o)return Jt(o,e),n}}function Jt(e,t){const n=JSON.parse(e);if(1!==Object.keys(n).length)throw new Error(`Invalid end of component comment: '${e}'`);const r=n.prerenderId;if(!r)throw new Error(`End of component comment must have a value for the prerendered property: '${e}'`);if(r!==t)throw new Error(`End of component comment prerendered property must match the start comment prerender id: '${t}', '${r}'`)}class zt{constructor(e){this.childNodes=e,this.currentIndex=-1,this.length=e.length}next(){return this.currentIndex++,this.currentIndexasync function(e,n){const r=function(e){const t=document.baseURI;return t.endsWith("/")?`${t}${e}`:`${t}/${e}`}(n),o=await import(r);if(void 0===o)return;const{beforeStart:s,afterStarted:a}=o;return a&&e.afterStartedCallbacks.push(a),s?s(...t):void 0}(this,e))))}async invokeAfterStartedCallbacks(e){await C,await Promise.all(this.afterStartedCallbacks.map((t=>t(e))))}}let Kt=!1;async function Vt(t){if(Kt)throw new Error("Blazor has already started.");Kt=!0,function(){if(window.parent!==window&&!window.opener&&window.frameElement){const e=window.sessionStorage&&window.sessionStorage["Microsoft.AspNetCore.Components.WebAssembly.Authentication.CachedAuthSettings"],t=e&&JSON.parse(e);return t&&t.redirect_uri&&location.href.startsWith(t.redirect_uri)}return!1}()&&await new Promise((()=>{})),S=(e,t,n)=>{const r=function(e){return de[e]}(e);r.eventDelegator.getHandler(t)&&yt.invokeWhenHeapUnlocked(n)},Ke._internal.applyHotReload=(t,n,r,o)=>{e.invokeMethod("Microsoft.AspNetCore.Components.WebAssembly","ApplyHotReloadDelta",t,n,r,o)},Ke._internal.getApplyUpdateCapabilities=()=>e.invokeMethod("Microsoft.AspNetCore.Components.WebAssembly","GetApplyUpdateCapabilities"),Ke._internal.invokeJSFromDotNet=Gt,Ke._internal.endInvokeDotNetFromJS=Xt,Ke._internal.receiveByteArray=Yt,Ke._internal.retrieveByteArray=qt;const n=Ge(yt);Ke.platform=n,Ke._internal.renderBatch=(e,t)=>{const n=yt.beginHeapLock();try{!function(e,t){const n=de[e];if(!n)throw new Error(`There is no browser renderer with ID ${e}.`);const r=t.arrayRangeReader,o=t.updatedComponents(),s=r.values(o),a=r.count(o),i=t.referenceFrames(),c=r.values(i),l=t.diffReader;for(let e=0;ect.js_string_to_mono_string(r()),Ke._internal.navigationManager.getUnmarshalledLocationHref=()=>ct.js_string_to_mono_string(o()),Ke._internal.navigationManager.listenForNavigationEvents((async(t,n,r)=>{await e.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",t,n,r)}),(async(t,n,r,o)=>{const s=await e.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChangingAsync",n,r,o);Ke._internal.navigationManager.endLocationChanging(t,s)}));const s=null!=t?t:{},a=s.environment,i=at.initAsync(s.loadBootResource,a),c=function(e,t){return function(e){const t=Mt(e,"webassembly"),n=[];for(let e=0;ee.id-t.id))}(e)}(document),l=new Lt(c);Ke._internal.registeredComponents={getRegisteredComponentsCount:()=>l.getCount(),getId:e=>l.getId(e),getAssembly:e=>ct.js_string_to_mono_string(l.getAssembly(e)),getTypeName:e=>ct.js_string_to_mono_string(l.getTypeName(e)),getParameterDefinitions:e=>ct.js_string_to_mono_string(l.getParameterDefinitions(e)||""),getParameterValues:e=>ct.js_string_to_mono_string(l.getParameterValues(e)||"")},Ke._internal.getPersistedState=()=>ct.js_string_to_mono_string(Pt(document)||""),Ke._internal.attachRootComponentToElement=(e,t,n)=>{const r=l.resolveRegisteredElement(e);r?me(n,r,t,!1):function(e,t,n){const r="::after";let o=!1;if(e.endsWith(r))e=e.slice(0,-r.length),o=!0;else if(e.endsWith("::before"))throw new Error("The '::before' selector is not supported.");const s=function(e){const t=m.get(e);if(t)return m.delete(e),t}(e)||document.querySelector(e);if(!s)throw new Error(`Could not find any element matching selector '${e}'.`);me(n||0,P(s,!0),t,o)}(e,t,n)};const u=await i,d=await async function(e,t){const n=e.resources.libraryInitializers,r=new Wt;return n&&await r.importInitializersAsync(Object.keys(n),[t,e.resources.extensions]),r}(u.bootConfig,s),[f]=await Promise.all([Ft.initAsync(u.bootConfig,s||{}),Dt.initAsync(u)]);try{await n.start(f)}catch(e){throw new Error(`Failed to start platform. Reason: ${e}`)}n.callEntryPoint(f.bootConfig.entryAssembly),d.invokeAfterStartedCallbacks(Ke)}function Gt(t,n,r,o){const s=yt.readStringField(t,0),a=yt.readInt32Field(t,4),i=yt.readStringField(t,8),c=yt.readUint64Field(t,20);if(null!==i){const n=yt.readUint64Field(t,12);if(0!==n)return e.jsCallDispatcher.beginInvokeJSFromDotNet(n,s,i,a,c),0;{const t=e.jsCallDispatcher.invokeJSFromDotNet(s,i,a,c);return null===t?0:ct.js_string_to_mono_string(t)}}{const t=e.jsCallDispatcher.findJSFunction(s,c).call(null,n,r,o);switch(a){case e.JSCallResultType.Default:return t;case e.JSCallResultType.JSObjectReference:return e.createJSObjectReference(t).__jsObjectId;case e.JSCallResultType.JSStreamReference:{const n=e.createJSStreamReference(t),r=JSON.stringify(n);return ct.js_string_to_mono_string(r)}case e.JSCallResultType.JSVoidResult:return null;default:throw new Error(`Invalid JS call result type '${a}'.`)}}}function Xt(t,n,r){const o=ct.conv_string(t),s=0!==n,a=ct.conv_string(r);e.jsCallDispatcher.endInvokeDotNetFromJS(o,s,a)}function Yt(t,n){const r=t,o=yt.toUint8Array(n);e.jsCallDispatcher.receiveByteArray(r,o)}function qt(){if(null===vt)throw new Error("Byte array not available for transfer");return ct.js_typed_array_to_array(vt)}Ke.start=Vt,document&&document.currentScript&&"false"!==document.currentScript.getAttribute("autostart")&&Vt().catch((e=>{void 0!==ut&&ut.printErr?ut.printErr(e):console.error(e)}))})(); \ No newline at end of file diff --git a/_framework/blazor.webassembly.js.br b/_framework/blazor.webassembly.js.br new file mode 100644 index 00000000..57e8c2cd Binary files /dev/null and b/_framework/blazor.webassembly.js.br differ diff --git a/_framework/blazor.webassembly.js.gz b/_framework/blazor.webassembly.js.gz new file mode 100644 index 00000000..3489e093 Binary files /dev/null and b/_framework/blazor.webassembly.js.gz differ diff --git a/_framework/dotnet.7.0.14.mikshhdjmu.js b/_framework/dotnet.7.0.14.mikshhdjmu.js new file mode 100755 index 00000000..3aba5ab2 --- /dev/null +++ b/_framework/dotnet.7.0.14.mikshhdjmu.js @@ -0,0 +1,33 @@ +//! Licensed to the .NET Foundation under one or more agreements. +//! The .NET Foundation licenses this file to you under the MIT license. +var __dotnet_runtime=function(e){"use strict";var t="7.0.14",n=false,r="Release";let o,s,i,a,c,u,l,f;const _={},d={};let m;function g(e,t){s=t.internal,i=t.marshaled_imports,o=t.module,w(e),a=e.isNode,c=e.isShell,u=e.isWeb,l=e.isWorker,f=e.isPThread,b.quit=e.quit_,b.ExitStatus=e.ExitStatus,b.requirePromise=e.requirePromise}function w(e){a=e.isNode,c=e.isShell,u=e.isWeb,l=e.isWorker,f=e.isPThread}function h(e){m=e}const p=undefined,b={javaScriptExports:{},mono_wasm_load_runtime_done:false,mono_wasm_bindings_is_ready:false,maxParallelDownloads:16,config:{environmentVariables:{}},diagnosticTracing:false},y=0,v=0,E=0,A=0,S=0,O=0,x=-1,j=0,$=0,N=0,k=0;function T(e){return void 0===e||null===e}const R=[[true,"mono_wasm_register_root","number",["number","number","string"]],[true,"mono_wasm_deregister_root",null,["number"]],[true,"mono_wasm_string_get_data",null,["number","number","number","number"]],[true,"mono_wasm_string_get_data_ref",null,["number","number","number","number"]],[true,"mono_wasm_set_is_debugger_attached","void",["bool"]],[true,"mono_wasm_send_dbg_command","bool",["number","number","number","number","number"]],[true,"mono_wasm_send_dbg_command_with_parms","bool",["number","number","number","number","number","number","string"]],[true,"mono_wasm_setenv",null,["string","string"]],[true,"mono_wasm_parse_runtime_options",null,["number","number"]],[true,"mono_wasm_strdup","number",["string"]],[true,"mono_background_exec",null,[]],[true,"mono_set_timeout_exec",null,[]],[true,"mono_wasm_load_icu_data","number",["number"]],[true,"mono_wasm_get_icudt_name","string",["string"]],[false,"mono_wasm_add_assembly","number",["string","number","number"]],[true,"mono_wasm_add_satellite_assembly","void",["string","string","number","number"]],[false,"mono_wasm_load_runtime",null,["string","number"]],[true,"mono_wasm_change_debugger_log_level","void",["number"]],[true,"mono_wasm_get_corlib","number",[]],[true,"mono_wasm_assembly_load","number",["string"]],[true,"mono_wasm_find_corlib_class","number",["string","string"]],[true,"mono_wasm_assembly_find_class","number",["number","string","string"]],[true,"mono_wasm_runtime_run_module_cctor","void",["number"]],[true,"mono_wasm_find_corlib_type","number",["string","string"]],[true,"mono_wasm_assembly_find_type","number",["number","string","string"]],[true,"mono_wasm_assembly_find_method","number",["number","string","number"]],[true,"mono_wasm_invoke_method","number",["number","number","number","number"]],[false,"mono_wasm_invoke_method_ref","void",["number","number","number","number","number"]],[true,"mono_wasm_string_get_utf8","number",["number"]],[true,"mono_wasm_string_from_utf16_ref","void",["number","number","number"]],[true,"mono_wasm_get_obj_type","number",["number"]],[true,"mono_wasm_array_length","number",["number"]],[true,"mono_wasm_array_get","number",["number","number"]],[true,"mono_wasm_array_get_ref","void",["number","number","number"]],[false,"mono_wasm_obj_array_new","number",["number"]],[false,"mono_wasm_obj_array_new_ref","void",["number","number"]],[false,"mono_wasm_obj_array_set","void",["number","number","number"]],[false,"mono_wasm_obj_array_set_ref","void",["number","number","number"]],[true,"mono_wasm_register_bundled_satellite_assemblies","void",[]],[false,"mono_wasm_try_unbox_primitive_and_get_type_ref","number",["number","number","number"]],[true,"mono_wasm_box_primitive_ref","void",["number","number","number","number"]],[true,"mono_wasm_intern_string_ref","void",["number"]],[true,"mono_wasm_assembly_get_entry_point","number",["number"]],[true,"mono_wasm_get_delegate_invoke_ref","number",["number"]],[true,"mono_wasm_string_array_new_ref","void",["number","number"]],[true,"mono_wasm_typed_array_new_ref","void",["number","number","number","number","number"]],[true,"mono_wasm_class_get_type","number",["number"]],[true,"mono_wasm_type_get_class","number",["number"]],[true,"mono_wasm_get_type_name","string",["number"]],[true,"mono_wasm_get_type_aqn","string",["number"]],[true,"mono_wasm_event_pipe_enable","bool",["string","number","number","string","bool","number"]],[true,"mono_wasm_event_pipe_session_start_streaming","bool",["number"]],[true,"mono_wasm_event_pipe_session_disable","bool",["number"]],[true,"mono_wasm_diagnostic_server_create_thread","bool",["string","number"]],[true,"mono_wasm_diagnostic_server_thread_attach_to_runtime","void",[]],[true,"mono_wasm_diagnostic_server_post_resume_runtime","void",[]],[true,"mono_wasm_diagnostic_server_create_stream","number",[]],[true,"mono_wasm_string_from_js","number",["string"]],[false,"mono_wasm_exit","void",["number"]],[true,"mono_wasm_getenv","number",["string"]],[true,"mono_wasm_set_main_args","void",["number","number"]],[false,"mono_wasm_enable_on_demand_gc","void",["number"]],[false,"mono_profiler_init_aot","void",["number"]],[false,"mono_wasm_exec_regression","number",["number","string"]],[false,"mono_wasm_invoke_method_bound","number",["number","number"]],[true,"mono_wasm_write_managed_pointer_unsafe","void",["number","number"]],[true,"mono_wasm_copy_managed_pointer","void",["number","number"]],[true,"mono_wasm_i52_to_f64","number",["number","number"]],[true,"mono_wasm_u52_to_f64","number",["number","number"]],[true,"mono_wasm_f64_to_i52","number",["number","number"]],[true,"mono_wasm_f64_to_u52","number",["number","number"]]],M={};function I(){const e=!!f;for(const t of R){const n=M,[r,s,i,a,c]=t;if(r||e)n[s]=function(...e){const t=o.cwrap(s,i,a,c);return n[s]=t,t(...e)};else{const e=o.cwrap(s,i,a,c);n[s]=e}}}function D(e,t,n){const r=C(e,t,n);let o="",s=0,i=0,a=0,c=0,u=0,l=0;const f=16777215,_=262143,d=4095,m=63,g=18,w=12,h=6,p=0;for(;s=r.read(),i=r.read(),a=r.read(),null!==s;)null===i&&(i=0,u+=1),null===a&&(a=0,u+=1),l=s<<16|i<<8|a<<0,c=(l&f)>>g,o+=U[c],c=(l&_)>>w,o+=U[c],u<2&&(c=(l&d)>>6,o+=U[c]),2===u?o+="==":1===u?o+="=":(c=(l&m)>>0,o+=U[c]);return o}const U=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"];function C(e,t,n){let r="number"===typeof t?t:0,o;o="number"===typeof n?r+n:e.length-r;const s={read:function(){if(r>=o)return null;const t=e[r];return r+=1,t}};return Object.defineProperty(s,"eof",{get:function(){return r>=o},configurable:true,enumerable:true}),s}const P=new Map;P.remove=function(e){const t=this.get(e);return this.delete(e),t};let W={},F=0,B=-1,V,H,z;function mono_wasm_runtime_ready(){if(s.mono_wasm_runtime_is_ready=b.mono_wasm_runtime_is_ready=true,F=0,W={},B=-1,globalThis.dotnetDebugger)debugger;else console.debug("mono_wasm_runtime_ready","fe00e07a-5519-4dfe-b35a-f867dbaf2e28")}function mono_wasm_fire_debugger_agent_message(){debugger}function L(e,t,n,r){const s=undefined,i=undefined,a={res_ok:e,res:{id:t,value:D(new Uint8Array(o.HEAPU8.buffer,n,r))}};P.has(t)&&console.warn(`MONO_WASM: Adding an id (${t}) that already exists in commands_received`),P.set(t,a)}function J(e){e.length>B&&(V&&o._free(V),B=Math.max(e.length,B,256),V=o._malloc(B));const t=atob(e);for(let e=0;e{const t=setInterval((()=>{1==b.waitForDebugger&&(clearInterval(t),e())}),100)}))}function te(){-1==b.waitForDebugger&&(b.waitForDebugger=1),M.mono_wasm_set_is_debugger_attached(true)}function ne(e,t){H=o.UTF8ToString(e).concat(".dll"),z=t,console.assert(true,`Adding an entrypoint breakpoint ${H} at method token ${z}`);debugger}function re(e,t){if(e.startsWith("dotnet:array:")){let e;if(void 0===t.items)return e=t.map((e=>e.value)),e;if(void 0===t.dimensionsDetails||1===t.dimensionsDetails.length)return e=t.items.map((e=>e.value)),e}const n={};return Object.keys(t).forEach((e=>{const r=t[e];void 0!==r.get?Object.defineProperty(n,r.name,{get(){return G(r.get.id,r.get.commandSet,r.get.command,r.get.buffer)},set:function(e){return q(r.set.id,r.set.commandSet,r.set.command,r.set.buffer,r.set.length,r.set.valtype,e),true}}):void 0!==r.set?Object.defineProperty(n,r.name,{get(){return r.value},set:function(e){return q(r.set.id,r.set.commandSet,r.set.command,r.set.buffer,r.set.length,r.set.valtype,e),true}}):n[r.name]=r.value})),n}function oe(e){if(void 0!=e.arguments&&!Array.isArray(e.arguments))throw new Error(`"arguments" should be an array, but was ${e.arguments}`);const t=e.objectId,n=e.details;let r={};if(t.startsWith("dotnet:cfo_res:")){if(!(t in W))throw new Error(`Unknown object id ${t}`);r=W[t]}else r=re(t,n);const o=void 0!=e.arguments?e.arguments.map((e=>JSON.stringify(e.value))):[],s=`const fn = ${e.functionDeclaration}; return fn.apply(proxy, [${o}]);`,i=undefined,a=new Function("proxy",s)(r);if(void 0===a)return{type:"undefined"};if(Object(a)!==a)return"object"==typeof a&&null==a?{type:typeof a,subtype:`${a}`,value:null}:{type:typeof a,description:`${a}`,value:`${a}`};if(e.returnByValue&&void 0==a.subtype)return{type:"object",value:a};if(Object.getPrototypeOf(a)==Array.prototype){const e=ae(a);return{type:"object",subtype:"array",className:"Array",description:`Array(${a.length})`,objectId:e}}if(void 0!==a.value||void 0!==a.subtype)return a;if(a==r)return{type:"object",className:"Object",description:"Object",objectId:t};const c=undefined;return{type:"object",className:"Object",description:"Object",objectId:ae(a)}}function se(e,t){if(!(e in W))throw new Error(`Could not find any object with id ${e}`);const n=W[e],r=Object.getOwnPropertyDescriptors(n);t.accessorPropertiesOnly&&Object.keys(r).forEach((e=>{void 0===r[e].get&&Reflect.deleteProperty(r,e)}));const o=[];return Object.keys(r).forEach((e=>{let t;const n=r[e];t="object"==typeof n.value?Object.assign({name:e},n):void 0!==n.value?{name:e,value:Object.assign({type:typeof n.value,description:""+n.value},n)}:void 0!==n.get?{name:e,get:{className:"Function",description:`get ${e} () {}`,type:"function"}}:{name:e,value:{type:"symbol",value:"",description:""}},o.push(t)})),{__value_as_json_string__:JSON.stringify(o)}}function ie(e,t={}){return se(`dotnet:cfo_res:${e}`,t)}function ae(e){const t="dotnet:cfo_res:"+F++;return W[t]=e,t}function ce(e){e in W&&delete W[e]}function ue(e,t){const n=o.UTF8ToString(t);if(s.logging&&"function"===typeof s.logging.debugger)return s.logging.debugger(e,n),void 0}let le=0;function fe(e){const t=1===M.mono_wasm_load_icu_data(e);return t&&le++,t}function _e(e){return M.mono_wasm_get_icudt_name(e)}function de(){const e=b.config;let t=false;if(e.globalizationMode||(e.globalizationMode="auto"),"invariant"===e.globalizationMode&&(t=true),!t)if(le>0)b.diagnosticTracing&&console.debug("MONO_WASM: ICU data archive(s) loaded, disabling invariant mode");else{if("icu"===e.globalizationMode){const e="invariant globalization mode is inactive and no ICU data archives were loaded";throw o.printErr(`MONO_WASM: ERROR: ${e}`),new Error(e)}b.diagnosticTracing&&console.debug("MONO_WASM: ICU data archive(s) not loaded, using invariant globalization mode"),t=true}t&&M.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT","1"),M.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY","1")}function me(e){null==e&&(e={}),"writeAt"in e||(e.writeAt="System.Runtime.InteropServices.JavaScript.JavaScriptExports::StopProfile"),"sendTo"in e||(e.sendTo="Interop/Runtime::DumpAotProfileData");const t="aot:write-at-method="+e.writeAt+",send-to-method="+e.sendTo;o.ccall("mono_wasm_load_profiler_aot",null,["string"],[t])}function ge(e){null==e&&(e={}),"writeAt"in e||(e.writeAt="WebAssembly.Runtime::StopProfile"),"sendTo"in e||(e.sendTo="WebAssembly.Runtime::DumpCoverageProfileData");const t="coverage:write-at-method="+e.writeAt+",send-to-method="+e.sendTo;o.ccall("mono_wasm_load_profiler_coverage",null,["string"],[t])}const we=new Map,he=new Map;let pe=0;function be(e){if(we.has(e))return we.get(e);const t=M.mono_wasm_assembly_load(e);return we.set(e,t),t}function ye(e,t,n){let r=he.get(e);r||he.set(e,r=new Map);let o=r.get(t);return o||(o=new Map,r.set(t,o)),o.get(n)}function ve(e,t,n,r){const o=he.get(e);if(!o)throw new Error("internal error");const s=o.get(t);if(!s)throw new Error("internal error");s.set(n,r)}function Ee(e,t,n){pe||(pe=M.mono_wasm_get_corlib());let r=ye(pe,e,t);if(void 0!==r)return r;if(r=M.mono_wasm_assembly_find_class(pe,e,t),n&&!r)throw new Error(`Failed to find corlib class ${e}.${t}`);return ve(pe,e,t,r),r} +//! Licensed to the .NET Foundation under one or more agreements. +const Ae=new Map,Se=[];function Oe(e){try{if(0==Ae.size)return e;const t=e;for(let n=0;n{const n=t.find((e=>"object"==typeof e&&void 0!==e.replaceSection));if(void 0===n)return e;const r=n.funcNum,o=n.replaceSection,s=Ae.get(Number(r));return void 0===s?e:e.replace(o,`${s} (${o})`)}));if(r!==t)return r}return t}catch(t){return console.debug(`MONO_WASM: failed to symbolicate: ${t}`),e}}function xe(e){let t=e;return t instanceof Error||(t=new Error(t)),Oe(t.stack)}function je(e,t,n,r,i){const a=o.UTF8ToString(n),c=!!r,u=o.UTF8ToString(e),l=i,f=o.UTF8ToString(t),_=`[MONO] ${a}`;if(s.logging&&"function"===typeof s.logging.trace)return s.logging.trace(u,f,_,c,l),void 0;switch(f){case"critical":case"error":console.error(xe(_));break;case"warning":console.warn(_);break;case"message":console.log(_);break;case"info":console.info(_);break;case"debug":console.debug(_);break;default:console.log(_);break}}let $e;function Ne(e,t,n){const r={log:t.log,error:t.error},o=t;function s(t,n,o){return function(...s){try{let r=s[0];if(void 0===r)r="undefined";else if(null===r)r="null";else if("function"===typeof r)r=r.toString();else if("string"!==typeof r)try{r=JSON.stringify(r)}catch(e){r=r.toString()}"string"===typeof r&&"main"!==e&&(r=`[${e}] ${r}`),n(o?JSON.stringify({method:t,payload:r,arguments:s}):[t+r,...s.slice(1)])}catch(e){r.error(`proxyConsole failed: ${e}`)}}}const i=["debug","trace","warn","info","error"];for(const e of i)"function"!==typeof o[e]&&(o[e]=s(`console.${e}: `,t.log,false));const a=`${n}/console`.replace("https://","wss://").replace("http://","ws://");$e=new WebSocket(a),$e.addEventListener("open",(()=>{r.log(`browser: [${e}] Console websocket connected.`)})),$e.addEventListener("error",(t=>{r.error(`[${e}] websocket error: ${t}`,t)})),$e.addEventListener("close",(t=>{r.error(`[${e}] websocket closed: ${t}`,t)}));const c=e=>{$e.readyState===WebSocket.OPEN?$e.send(e):r.log(e)};for(const e of["log",...i])o[e]=s(`console.${e}`,c,true)}function ke(e){if(!b.mono_wasm_symbols_are_ready){b.mono_wasm_symbols_are_ready=true;try{const t=undefined;o.FS_readFile(e,{flags:"r",encoding:"utf8"}).split(/[\r\n]/).forEach((e=>{const t=e.split(/:/);t.length<2||(t[1]=t.splice(1).join(":"),Ae.set(Number(t[0]),t[1]))}))}catch(t){return 44==t.errno||console.log(`MONO_WASM: Error loading symbol file ${e}: ${JSON.stringify(t)}`),void 0}}}async function Te(e,t){try{const n=await Re(e,t);return De(n),n}catch(e){return e instanceof b.ExitStatus?e.status:(De(1,e),1)}}async function Re(e,t){Ic(e,t),-1==b.waitForDebugger&&(console.log("MONO_WASM: waiting for debugger..."),await ee());const n=Me(e);return b.javaScriptExports.call_entry_point(n,t)}function Me(e){if(!b.mono_wasm_bindings_is_ready)throw new Error("Assert failed: The runtime must be initialized.");const t=be(e);if(!t)throw new Error("Could not find assembly: "+e);let n=0;1==b.waitForDebugger&&(n=1);const r=M.mono_wasm_assembly_get_entry_point(t,n);if(!r)throw new Error("Could not find entry point for assembly: "+e);return r}function Ie(e){bc(e,false),De(1,e)}function De(e,t){if(b.config.asyncFlushOnExit&&0===e)throw(async()=>{try{await Ue()}finally{Ce(e,t)}})(),b.ExitStatus?new b.ExitStatus(e):t||new Error("Stop with exit code "+e);Ce(e,t)}async function Ue(){try{const e=await import("process"),t=e=>new Promise(((t,n)=>{e.on("error",(e=>n(e))),e.write("",(function(){t()}))})),n=t(e.stderr),r=t(e.stdout);await Promise.all([r,n])}catch(e){console.error(`flushing std* streams failed: ${e}`)}}function Ce(e,t){if(b.ExitStatus&&(!t||t instanceof b.ExitStatus?t=new b.ExitStatus(e):t instanceof Error?o.printErr(s.mono_wasm_stringify_as_error_with_stack(t)):"string"==typeof t?o.printErr(t):o.printErr(JSON.stringify(t))),We(e,t),Pe(e),0!==e||!u){if(!b.quit)throw t;b.quit(e,t)}}function Pe(e){if(u&&b.config.appendElementOnExit){const t=document.createElement("label");t.id="tests_done",e&&(t.style.background="red"),t.innerHTML=e.toString(),document.body.appendChild(t)}}function We(e,t){if(b.config.logExitCode)if(0!=e&&t&&(t instanceof Error?console.error(xe(t)):"string"==typeof t?console.error(t):console.error(JSON.stringify(t))),$e){const t=()=>{0==$e.bufferedAmount?console.log("WASM EXIT "+e):setTimeout(t,100)};t()}else console.log("WASM EXIT "+e)}Se.push(/at (?[^:()]+:wasm-function\[(?\d+)\]:0x[a-fA-F\d]+)((?![^)a-fA-F\d])|$)/),Se.push(/(?:WASM \[[\da-zA-Z]+\], (?function #(?[\d]+) \(''\)))/),Se.push(/(?[a-z]+:\/\/[^ )]*:wasm-function\[(?\d+)\]:0x[a-fA-F\d]+)/),Se.push(/(?<[^ >]+>[.:]wasm-function\[(?[0-9]+)\])/);const Fe="function"===typeof globalThis.WeakRef;function Be(e){return Fe?new WeakRef(e):{deref:()=>e}}const Ve="function"===typeof globalThis.FinalizationRegistry;let He;const ze=[],Le=[];let Je=1;const qe=new Map;Ve&&(He=new globalThis.FinalizationRegistry(rt));const Ge=Symbol.for("wasm js_owned_gc_handle"),Ye=Symbol.for("wasm cs_owned_js_handle");function Ze(e){return 0!==e&&e!==x?ze[e]:null}function Xe(e){return 0!==e&&e!==x?Ze(e):null}function Qe(e){if(e[Ye])return e[Ye];const t=Le.length?Le.pop():Je++;return ze[t]=e,Object.isExtensible(e)&&(e[Ye]=t),t}function Ke(e){const t=ze[e];if("undefined"!==typeof t&&null!==t){if(globalThis===t)return;"undefined"!==typeof t[Ye]&&(t[Ye]=void 0),ze[e]=void 0,Le.push(e)}}function et(e,t){e[Ge]=t,Ve&&He.register(e,t,e);const n=Be(e);qe.set(t,n)}function tt(e,t){e&&(t=e[Ge],e[Ge]=0,Ve&&He.unregister(e)),0!==t&&qe.delete(t)&&b.javaScriptExports.release_js_owned_object_by_gc_handle(t)}function nt(e){const t=e[Ge];if(!(0!=t))throw new Error("Assert failed: ObjectDisposedException");return t}function rt(e){tt(null,e)}function ot(e){if(!e)return null;const t=qe.get(e);return t?t.deref():null}const st=Symbol.for("wasm promise_control");function it(e,t){let n=null;const r=new Promise((function(r,o){n={isDone:false,promise:null,resolve:t=>{n.isDone||(n.isDone=true,r(t),e&&e())},reject:e=>{n.isDone||(n.isDone=true,o(e),t&&t())}}}));n.promise=r;const o=r;return o[st]=n,{promise:o,promise_control:n}}function at(e){return e[st]}function ct(e){return void 0!==e[st]}function ut(e){if(!ct(e))throw new Error("Assert failed: Promise is not controllable")}const lt=("object"===typeof Promise||"function"===typeof Promise)&&"function"===typeof Promise.resolve;function ft(e){return Promise.resolve(e)===e||("object"===typeof e||"function"===typeof e)&&"function"===typeof e.then}function _t(e){const{promise:t,promise_control:n}=it(),r=undefined;return e().then((e=>n.resolve(e))).catch((e=>n.reject(e))),t}function dt(e){const t=ot(e);if(!t)return;const n=t.promise;if(!!!n)throw new Error(`Assert failed: Expected Promise for GCHandle ${e}`);ut(n);const r=undefined;at(n).reject("OperationCanceledException")}const mt=[],gt=32768;let wt,ht,pt=null;function bt(){wt||(wt=o._malloc(gt),ht=wt)}const yt="undefined"!==typeof BigInt&&"undefined"!==typeof BigInt64Array;function vt(){bt(),mt.push(ht)}function Et(){if(!mt.length)throw new Error("No temp frames have been created at this point");ht=mt.pop()}function At(e,t,n){if(!Number.isSafeInteger(e))throw new Error(`Assert failed: Value is not an integer: ${e} (${typeof e})`);if(!(e>=t&&e<=n))throw new Error(`Assert failed: Overflow: value ${e} is out of ${t} ${n} range`)}function St(e,t){o.HEAP8.fill(0,e,t+e)}function Ot(e,t){const n=!!t;"number"===typeof t&&At(t,0,1),o.HEAP32[e>>>2]=n?1:0}function xt(e,t){At(t,0,255),o.HEAPU8[e]=t}function jt(e,t){At(t,0,65535),o.HEAPU16[e>>>1]=t}function $t(e,t){o.HEAPU32[e>>>2]=t}function Nt(e,t){At(t,0,4294967295),o.HEAPU32[e>>>2]=t}function kt(e,t){At(t,-128,127),o.HEAP8[e]=t}function Tt(e,t){At(t,-32768,32767),o.HEAP16[e>>>1]=t}function Rt(e,t){o.HEAP32[e>>>2]=t}function Mt(e,t){At(t,-2147483648,2147483647),o.HEAP32[e>>>2]=t}function It(e){if(0!==e)switch(e){case 1:throw new Error("value was not an integer");case 2:throw new Error("value out of range");default:throw new Error("unknown internal error")}}function Dt(e,t){if(!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not a safe integer: ${t} (${typeof t})`);const n=undefined;It(M.mono_wasm_f64_to_i52(e,t))}function Ut(e,t){if(!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not a safe integer: ${t} (${typeof t})`);if(!(t>=0))throw new Error("Assert failed: Can't convert negative Number into UInt64");const n=undefined;It(M.mono_wasm_f64_to_u52(e,t))}function Ct(e,t){if(!yt)throw new Error("Assert failed: BigInt is not supported.");if(!("bigint"===typeof t))throw new Error(`Assert failed: Value is not an bigint: ${t} (${typeof t})`);if(!(t>=Kt&&t<=Qt))throw new Error(`Assert failed: Overflow: value ${t} is out of ${Kt} ${Qt} range`);pt[e>>>3]=t}function Pt(e,t){if(!("number"===typeof t))throw new Error(`Assert failed: Value is not a Number: ${t} (${typeof t})`);o.HEAPF32[e>>>2]=t}function Wt(e,t){if(!("number"===typeof t))throw new Error(`Assert failed: Value is not a Number: ${t} (${typeof t})`);o.HEAPF64[e>>>3]=t}function Ft(e){return!!o.HEAP32[e>>>2]}function Bt(e){return o.HEAPU8[e]}function Vt(e){return o.HEAPU16[e>>>1]}function Ht(e){return o.HEAPU32[e>>>2]}function zt(e){return o.HEAP8[e]}function Lt(e){return o.HEAP16[e>>>1]}function Jt(e){return o.HEAP32[e>>>2]}function qt(e){const t=M.mono_wasm_i52_to_f64(e,b._i52_error_scratch_buffer),n=undefined;return It(Jt(b._i52_error_scratch_buffer)),t}function Gt(e){const t=M.mono_wasm_u52_to_f64(e,b._i52_error_scratch_buffer),n=undefined;return It(Jt(b._i52_error_scratch_buffer)),t}function Yt(e){if(!yt)throw new Error("Assert failed: BigInt is not supported.");return pt[e>>>3]}function Zt(e){return o.HEAPF32[e>>>2]}function Xt(e){return o.HEAPF64[e>>>3]}let Qt,Kt;function en(e){yt&&(Qt=BigInt("9223372036854775807"),Kt=BigInt("-9223372036854775808"),pt=new BigInt64Array(e))}function tn(e){const t=o._malloc(e.length),n=undefined;return new Uint8Array(o.HEAPU8.buffer,t,e.length).set(e),t}const nn=8192;let rn=null,on=null,sn=0;const an=[],cn=[];function un(e,t){if(e<=0)throw new Error("capacity >= 1");const n=4*(e|=0),r=o._malloc(n);if(r%4!==0)throw new Error("Malloc returned an unaligned offset");return St(r,n),new WasmRootBufferImpl(r,e,true,t)}function ln(e){let t;if(!e)throw new Error("address must be a location in the native heap");return cn.length>0?(t=cn.pop(),t._set_address(e)):t=new wn(e),t}function fn(e){let t;if(an.length>0)t=an.pop();else{const e=mn(),n=undefined;t=new gn(rn,e)}if(void 0!==e){if("number"!==typeof e)throw new Error("value must be an address in the managed heap");t.set(e)}else t.set(0);return t}function _n(...e){for(let t=0;t>>2,this.__count=t,this.length=t,this.__handle=M.mono_wasm_register_root(e,o,r||"noname"),this.__ownsAllocation=n}_throw_index_out_of_range(){throw new Error("index out of range")}_check_in_range(e){(e>=this.__count||e<0)&&this._throw_index_out_of_range()}get_address(e){return this._check_in_range(e),this.__offset+4*e}get_address_32(e){return this._check_in_range(e),this.__offset32+e}get(e){this._check_in_range(e);const t=this.get_address_32(e);return o.HEAPU32[t]}set(e,t){const n=this.get_address(e);return M.mono_wasm_write_managed_pointer_unsafe(n,t),t}copy_value_from_address(e,t){const n=this.get_address(e);M.mono_wasm_copy_managed_pointer(n,t)}_unsafe_get(e){return o.HEAPU32[this.__offset32+e]}_unsafe_set(e,t){const n=this.__offset+e;M.mono_wasm_write_managed_pointer_unsafe(n,t)}clear(){this.__offset&&St(this.__offset,4*this.__count)}release(){this.__offset&&this.__ownsAllocation&&(M.mono_wasm_deregister_root(this.__offset),St(this.__offset,4*this.__count),o._free(this.__offset)),this.__handle=this.__offset=this.__count=this.__offset32=0}toString(){return`[root buffer @${this.get_address(0)}, size ${this.__count} ]`}}class gn{constructor(e,t){this.__buffer=e,this.__index=t}get_address(){return this.__buffer.get_address(this.__index)}get_address_32(){return this.__buffer.get_address_32(this.__index)}get address(){return this.__buffer.get_address(this.__index)}get(){const e=undefined;return this.__buffer._unsafe_get(this.__index)}set(e){const t=this.__buffer.get_address(this.__index);return M.mono_wasm_write_managed_pointer_unsafe(t,e),e}copy_from(e){const t=e.address,n=this.address;M.mono_wasm_copy_managed_pointer(n,t)}copy_to(e){const t=this.address,n=e.address;M.mono_wasm_copy_managed_pointer(n,t)}copy_from_address(e){const t=this.address;M.mono_wasm_copy_managed_pointer(t,e)}copy_to_address(e){const t=this.address;M.mono_wasm_copy_managed_pointer(e,t)}get value(){return this.get()}set value(e){this.set(e)}valueOf(){throw new Error("Implicit conversion of roots to pointers is no longer supported. Use .value or .address as appropriate")}clear(){this.set(0)}release(){if(!this.__buffer)throw new Error("No buffer");const e=128;an.length>e?(dn(this.__index),this.__buffer=null,this.__index=0):(this.set(0),an.push(this))}toString(){return`[root @${this.address}]`}}class wn{constructor(e){this.__external_address=0,this.__external_address_32=0,this._set_address(e)}_set_address(e){this.__external_address=e,this.__external_address_32=e>>>2}get address(){return this.__external_address}get_address(){return this.__external_address}get_address_32(){return this.__external_address_32}get(){const e=undefined;return o.HEAPU32[this.__external_address_32]}set(e){return M.mono_wasm_write_managed_pointer_unsafe(this.__external_address,e),e}copy_from(e){const t=e.address,n=this.__external_address;M.mono_wasm_copy_managed_pointer(n,t)}copy_to(e){const t=this.__external_address,n=e.address;M.mono_wasm_copy_managed_pointer(n,t)}copy_from_address(e){const t=this.__external_address;M.mono_wasm_copy_managed_pointer(t,e)}copy_to_address(e){const t=this.__external_address;M.mono_wasm_copy_managed_pointer(e,t)}get value(){return this.get()}set value(e){this.set(e)}valueOf(){throw new Error("Implicit conversion of roots to pointers is no longer supported. Use .value or .address as appropriate")}clear(){this.set(0)}release(){const e=128;cn.length=r&&(vr=null),vr||(vr=un(r,"interned strings"),Er=0);const o=vr,s=Er++;if(n&&(M.mono_wasm_intern_string_ref(t.address),!t.value))throw new Error("mono_wasm_intern_string_ref produced a null pointer");br.set(e,t.value),pr.set(t.value,e),0!==e.length||yr||(yr=t.value),o.copy_value_from_address(s,t.address)}function Nr(e,t){let n;if("symbol"===typeof e?(n=e.description,"string"!==typeof n&&(n=Symbol.keyFor(e)),"string"!==typeof n&&(n="")):"string"===typeof e&&(n=e),"string"!==typeof n)throw new Error(`Argument to js_string_to_mono_string_interned must be a string but was ${e}`);if(0===n.length&&yr)return t.set(yr),void 0;const r=br.get(n);if(r)return t.set(r),void 0;Tr(n,t),$r(n,t,true)}function kr(e,t){if(t.clear(),null!==e)if("symbol"===typeof e)Nr(e,t);else{if("string"!==typeof e)throw new Error("Expected string argument, got "+typeof e);if(0===e.length)Nr(e,t);else{if(e.length<=256){const n=br.get(e);if(n)return t.set(n),void 0}Tr(e,t)}}}function Tr(e,t){const n=o._malloc(2*(e.length+1)),r=n>>>1|0;for(let t=0;t{const n=On(e,0),a=On(e,1),c=On(e,2),u=On(e,3),l=On(e,4);try{let e,n,f;o&&(e=o(c)),s&&(n=s(u)),i&&(f=i(l));const _=t(e,n,f);r&&r(a,_)}catch(e){eo(n,e)}};a[yn]=true;const c=undefined;cr(e,Qe(a)),Cn(e,wr.Function)}class Qr{constructor(e){this.promise=e}dispose(){tt(this,0)}get isDisposed(){return 0===this[Ge]}}function Kr(e,t,n,r){if(null===t||void 0===t)return Cn(e,wr.None),void 0;if(!ft(t))throw new Error("Assert failed: Value is not a Promise");const o=b.javaScriptExports.create_task_callback();lr(e,o),Cn(e,wr.Task);const s=new Qr(t);et(s,o),t.then((e=>{b.javaScriptExports.complete_task(o,null,e,r||no),tt(s,o)})).catch((e=>{b.javaScriptExports.complete_task(o,e,null,void 0),tt(s,o)}))}function eo(e,t){if(null===t||void 0===t)Cn(e,wr.None);else if(t instanceof ManagedError){Cn(e,wr.Exception);const n=undefined;lr(e,nt(t))}else{if(!("object"===typeof t||"string"===typeof t))throw new Error("Assert failed: Value is not an Error "+typeof t);Cn(e,wr.JSException);const n=undefined;Yr(e,t.toString());const r=t[Ye];if(r)cr(e,r);else{const n=undefined;cr(e,Qe(t))}}}function to(e,t){if(void 0===t||null===t)Cn(e,wr.None);else{if(!(void 0===t[Ge]))throw new Error("Assert failed: JSObject proxy of ManagedObject proxy is not supported");if(!("function"===typeof t||"object"===typeof t))throw new Error(`Assert failed: JSObject proxy of ${typeof t} is not supported`);Cn(e,wr.JSObject);const n=undefined;cr(e,Qe(t))}}function no(e,t){if(void 0===t||null===t)Cn(e,wr.None);else{const n=t[Ge],r=typeof t;if(void 0===n)if("string"===r||"symbol"===r)Cn(e,wr.String),Yr(e,t);else if("number"===r)Cn(e,wr.Double),sr(e,t);else{if("bigint"===r)throw new Error("NotImplementedException: bigint");if("boolean"===r)Cn(e,wr.Boolean),Zn(e,t);else if(t instanceof Date)Cn(e,wr.DateTime),or(e,t);else if(t instanceof Error)eo(e,t);else if(t instanceof Uint8Array)oo(e,t,wr.Byte);else if(t instanceof Float64Array)oo(e,t,wr.Double);else if(t instanceof Int32Array)oo(e,t,wr.Int32);else if(Array.isArray(t))oo(e,t,wr.Object);else{if(t instanceof Int16Array||t instanceof Int8Array||t instanceof Uint8ClampedArray||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Float32Array)throw new Error("NotImplementedException: TypedArray");if(ft(t))Kr(e,t);else{if(t instanceof Span)throw new Error("NotImplementedException: Span");if("object"!=r)throw new Error(`JSObject proxy is not supported for ${r} ${t}`);{const n=Qe(t);Cn(e,wr.JSObject),cr(e,n)}}}}else{if(nt(t),t instanceof ArraySegment)throw new Error("NotImplementedException: ArraySegment");if(t instanceof ManagedError)Cn(e,wr.Exception),lr(e,n);else{if(!(t instanceof ManagedObject))throw new Error("NotImplementedException "+r);Cn(e,wr.Object),lr(e,n)}}}}function ro(e,t,n){if(!!!n)throw new Error("Assert failed: Expected valid sig parameter");const r=undefined;oo(e,t,kn(n))}function oo(e,t,n){if(null===t||void 0===t)Cn(e,wr.None);else{const r=mr(n);if(!(-1!=r))throw new Error(`Assert failed: Element type ${wr[n]} not supported`);const s=t.length,i=r*s,a=o._malloc(i);if(n==wr.String){if(!Array.isArray(t))throw new Error("Assert failed: Value is not an Array");St(a,i),M.mono_wasm_register_root(a,i,"marshal_array_to_cs");for(let e=0;e>2,(a>>2)+s).set(t)}else{if(n!=wr.Double)throw new Error("not implemented");{if(!(Array.isArray(t)||t instanceof Float64Array))throw new Error("Assert failed: Value is not an Array or Float64Array");const e=undefined;o.HEAPF64.subarray(a>>3,(a>>3)+s).set(t)}}tr(e,a),Cn(e,wr.Array),Pn(e,n),dr(e,t.length)}}function so(e,t,n){if(!!!n)throw new Error("Assert failed: Expected valid sig parameter");if(!!t.isDisposed)throw new Error("Assert failed: ObjectDisposedException");ao(n,t._viewType),Cn(e,wr.Span),tr(e,t._pointer),dr(e,t.length)}function io(e,t,n){if(!!!n)throw new Error("Assert failed: Expected valid sig parameter");const r=nt(t);if(!r)throw new Error("Assert failed: Only roundtrip of ArraySegment instance created by C#");ao(n,t._viewType),Cn(e,wr.ArraySegment),tr(e,t._pointer),dr(e,t.length),lr(e,r)}function ao(e,t){const n=kn(e);if(n==wr.Byte){if(!(0==t))throw new Error("Assert failed: Expected MemoryViewType.Byte")}else if(n==wr.Int32){if(!(1==t))throw new Error("Assert failed: Expected MemoryViewType.Int32")}else{if(n!=wr.Double)throw new Error(`NotImplementedException ${wr[n]} `);if(!(2==t))throw new Error("Assert failed: Expected MemoryViewType.Double")}}function co(){0==hn.size&&(hn.set(wr.Array,ko),hn.set(wr.Span,Ro),hn.set(wr.ArraySegment,Mo),hn.set(wr.Boolean,lo),hn.set(wr.Byte,fo),hn.set(wr.Char,_o),hn.set(wr.Int16,mo),hn.set(wr.Int32,go),hn.set(wr.Int52,wo),hn.set(wr.BigInt64,ho),hn.set(wr.Single,po),hn.set(wr.IntPtr,yo),hn.set(wr.Double,bo),hn.set(wr.String,xo),hn.set(wr.Exception,jo),hn.set(wr.JSException,jo),hn.set(wr.JSObject,$o),hn.set(wr.Object,No),hn.set(wr.DateTime,Eo),hn.set(wr.DateTimeOffset,Eo),hn.set(wr.Task,So),hn.set(wr.Action,Ao),hn.set(wr.Function,Ao),hn.set(wr.None,vo),hn.set(wr.Void,vo),hn.set(wr.Discard,vo))}function uo(e,t,n,r,o,s){let i="",a="",c="";const u="converter"+t;let l="null",f="null",_="null",d="null",m=$n(e);if(m===wr.None||m===wr.Void)return{converters:i,call_body:c,marshaler_type:m};const g=Nn(e);if(g!==wr.None){const e=hn.get(g);if(!(e&&"function"===typeof e))throw new Error(`Assert failed: Unknow converter for type ${g} at ${t}`);m!=wr.Nullable?(d="converter"+t+"_res",i+=", "+d,a+=" "+wr[g],s[d]=e):m=g}const w=kn(e);if(w!==wr.None){const e=pn.get(w);if(!(e&&"function"===typeof e))throw new Error(`Assert failed: Unknow converter for type ${w} at ${t}`);l="converter"+t+"_arg1",i+=", "+l,a+=" "+wr[w],s[l]=e}const h=Tn(e);if(h!==wr.None){const e=pn.get(h);if(!(e&&"function"===typeof e))throw new Error(`Assert failed: Unknow converter for type ${h} at ${t}`);f="converter"+t+"_arg2",i+=", "+f,a+=" "+wr[h],s[f]=e}const p=Rn(e);if(p!==wr.None){const e=pn.get(p);if(!(e&&"function"===typeof e))throw new Error(`Assert failed: Unknow converter for type ${p} at ${t}`);_="converter"+t+"_arg3",i+=", "+_,a+=" "+wr[p],s[_]=e}const b=hn.get(m);if(!(b&&"function"===typeof b))throw new Error(`Assert failed: Unknow converter for type ${m} at ${t} `);return i+=", "+u,a+=" "+wr[m],s[u]=b,c=m==wr.Task?` const ${o} = ${u}(args + ${n}, signature + ${r}, ${d}); // ${a} \n`:m==wr.Action||m==wr.Function?` const ${o} = ${u}(args + ${n}, signature + ${r}, ${d}, ${l}, ${f}, ${_}); // ${a} \n`:` const ${o} = ${u}(args + ${n}, signature + ${r}); // ${a} \n`,{converters:i,call_body:c,marshaler_type:m}}function lo(e){const t=undefined;return Dn(e)==wr.None?null:Wn(e)}function fo(e){const t=undefined;return Dn(e)==wr.None?null:Fn(e)}function _o(e){const t=undefined;return Dn(e)==wr.None?null:Bn(e)}function mo(e){const t=undefined;return Dn(e)==wr.None?null:Vn(e)}function go(e){const t=undefined;return Dn(e)==wr.None?null:Hn(e)}function wo(e){const t=undefined;return Dn(e)==wr.None?null:Ln(e)}function ho(e){const t=undefined;return Dn(e)==wr.None?null:Jn(e)}function po(e){const t=undefined;return Dn(e)==wr.None?null:Gn(e)}function bo(e){const t=undefined;return Dn(e)==wr.None?null:Yn(e)}function yo(e){const t=undefined;return Dn(e)==wr.None?null:zn(e)}function vo(){return null}function Eo(e){const t=undefined;return Dn(e)===wr.None?null:qn(e)}function Ao(e,t,n,r,o,s){const i=undefined;if(Dn(e)===wr.None)return null;const a=ur(e);let c=ot(a);return null!==c&&void 0!==c||(c=(e,t,i)=>b.javaScriptExports.call_delegate(a,e,t,i,n,r,o,s),et(c,a)),c}function So(e,t,n){const r=Dn(e);if(r===wr.None)return null;if(r!==wr.Task){if(n||(n=hn.get(r)),!n)throw new Error(`Assert failed: Unknow sub_converter for type ${wr[r]} `);const t=n(e);return new Promise((e=>e(t)))}const o=ar(e);if(0==o)return new Promise((e=>e(void 0)));const s=Ze(o);if(!!!s)throw new Error(`Assert failed: ERR28: promise not found for js_handle: ${o} `);ut(s);const i=at(s),a=i.resolve;return i.resolve=e=>{const t=Dn(e);if(t===wr.None)return a(null),void 0;if(n||(n=hn.get(t)),!n)throw new Error(`Assert failed: Unknow sub_converter for type ${wr[t]}`);const r=n(e);a(r)},s}function Oo(e){const t=On(e,0),n=On(e,1),r=On(e,2),o=On(e,3),s=Dn(t),i=Dn(o),a=ar(r);if(0===a){const{promise:e,promise_control:r}=it(),a=undefined;if(cr(n,Qe(e)),s!==wr.None){const e=jo(t);r.reject(e)}else if(i!==wr.Task){const e=hn.get(i);if(!e)throw new Error(`Assert failed: Unknow sub_converter for type ${wr[i]} `);const t=e(o);r.resolve(t)}}else{const e=Ze(a);if(!!!e)throw new Error(`Assert failed: ERR25: promise not found for js_handle: ${a} `);ut(e);const n=at(e);if(s!==wr.None){const e=jo(t);n.reject(e)}else i!==wr.Task&&n.resolve(o)}Cn(n,wr.Task),Cn(t,wr.None)}function xo(e){const t=undefined;if(Dn(e)==wr.None)return null;const n=fr(e);try{const e=undefined;return xr(n)}finally{n.release()}}function jo(e){const t=Dn(e);if(t==wr.None)return null;if(t==wr.JSException){const t=undefined,n=undefined;return Ze(ar(e))}const n=ur(e);let r=ot(n);if(null===r||void 0===r){const t=xo(e);r=new ManagedError(t),et(r,n)}return r}function $o(e){const t=undefined;if(Dn(e)==wr.None)return null;const n=undefined,r=undefined;return Ze(ar(e))}function No(e){const t=Dn(e);if(t==wr.None)return null;if(t==wr.JSObject){const t=undefined,n=undefined;return Ze(ar(e))}if(t==wr.Array){const t=undefined;return To(e,Un(e))}if(t==wr.Object){const t=ur(e);if(0===t)return null;let n=ot(t);return n||(n=new ManagedObject,et(n,t)),n}const n=hn.get(t);if(!n)throw new Error(`Assert failed: Unknow converter for type ${wr[t]}`);return n(e)}function ko(e,t){if(!!!t)throw new Error("Assert failed: Expected valid sig parameter");const n=undefined;return To(e,kn(t))}function To(e,t){const n=undefined;if(Dn(e)==wr.None)return null;const r=undefined;if(!(-1!=mr(t)))throw new Error(`Assert failed: Element type ${wr[t]} not supported`);const s=zn(e),i=_r(e);let a=null;if(t==wr.String){a=new Array(i);for(let e=0;e>2,(s>>2)+i).slice()}else{if(t!=wr.Double)throw new Error(`NotImplementedException ${wr[t]} `);{const e=undefined;a=o.HEAPF64.subarray(s>>3,(s>>3)+i).slice()}}return o._free(s),a}function Ro(e,t){if(!!!t)throw new Error("Assert failed: Expected valid sig parameter");const n=kn(t),r=zn(e),o=_r(e);let s=null;if(n==wr.Byte)s=new Span(r,o,0);else if(n==wr.Int32)s=new Span(r,o,1);else{if(n!=wr.Double)throw new Error(`NotImplementedException ${wr[n]} `);s=new Span(r,o,2)}return s}function Mo(e,t){if(!!!t)throw new Error("Assert failed: Expected valid sig parameter");const n=kn(t),r=zn(e),o=_r(e);let s=null;if(n==wr.Byte)s=new ArraySegment(r,o,0);else if(n==wr.Int32)s=new ArraySegment(r,o,1);else{if(n!=wr.Double)throw new Error(`NotImplementedException ${wr[n]} `);s=new ArraySegment(r,o,2)}const i=undefined;return et(s,ur(e)),s}let Io,Do;const Uo={};function Co(e){Io=e.mono,Do=e.binding}const Po=Symbol.for("wasm type");function Wo(e){return new Promise((t=>setTimeout(t,e)))}const Fo=it(),Bo=it();let Vo=0,Ho=0,zo=0,Lo=0;const Jo=[],qo=Object.create(null);let Go=0,Yo;const Zo={"js-module-threads":true},Xo={dotnetwasm:true},Qo={"js-module-threads":true,dotnetwasm:true};function Ko(e){var t;const n=null===(t=b.config.assets)||void 0===t?void 0:t.find((t=>t.behavior==e));if(!n)throw new Error(`Assert failed: Can't find asset for ${e}`);return n.resolvedUrl||(n.resolvedUrl=os(n,"")),n}async function es(){b.diagnosticTracing&&console.debug("MONO_WASM: mono_download_assets"),b.maxParallelDownloads=b.config.maxParallelDownloads||b.maxParallelDownloads;try{const e=[];for(const t of b.config.assets){const n=t;if(Qo[n.behavior]||Lo++,!Zo[n.behavior]){const t=Xo[n.behavior];if(zo++,n.pendingDownload){n.pendingDownloadInternal=n.pendingDownload;const r=async()=>{const e=await n.pendingDownloadInternal.response;return t||(n.buffer=await e.arrayBuffer()),++Vo,{asset:n,buffer:n.buffer}};e.push(r())}else{const r=async()=>(n.buffer=await ts(n,!t),{asset:n,buffer:n.buffer});e.push(r())}}}Bo.promise_control.resolve();const t=[];for(const n of e)t.push((async()=>{const e=await n,t=e.asset;if(e.buffer){if(!Qo[t.behavior]){const n=t.pendingDownloadInternal.url,r=new Uint8Array(t.buffer);t.pendingDownloadInternal=null,t.pendingDownload=null,t.buffer=null,e.buffer=null,await lc.promise,is(t,n,r)}}else{const e=undefined;if(Xo[t.behavior])Xo[t.behavior]&&++Vo;else{if(!t.isOptional)throw new Error("Assert failed: Expected asset to have the downloaded buffer");Zo[t.behavior]||zo--,Qo[t.behavior]||Lo--}}})());Promise.all(t).then((()=>{Fo.promise_control.resolve()})).catch((e=>{o.printErr("MONO_WASM: Error in mono_download_assets: "+e),bc(e,true)}))}catch(e){throw o.printErr("MONO_WASM: Error in mono_download_assets: "+e),e}}async function ts(e,t){try{return await ns(e,t)}catch(n){if(c||a)throw n;if(e.pendingDownload&&e.pendingDownloadInternal==e.pendingDownload)throw n;if(e.resolvedUrl&&-1!=e.resolvedUrl.indexOf("file://"))throw n;if(n&&404==n.status)throw n;e.pendingDownloadInternal=void 0,await Bo.promise;try{return await ns(e,t)}catch(n){return e.pendingDownloadInternal=void 0,await Wo(100),await ns(e,t)}}}async function ns(e,t){for(;Yo;)await Yo.promise;try{++Go,Go==b.maxParallelDownloads&&(b.diagnosticTracing&&console.debug("MONO_WASM: Throttling further parallel downloads"),Yo=it());const n=await rs(e);if(!t||!n)return;const r=await n.arrayBuffer();return++Vo,r}finally{if(--Go,Yo&&Go==b.maxParallelDownloads-1){b.diagnosticTracing&&console.debug("MONO_WASM: Resuming more parallel downloads");const e=Yo;Yo=void 0,e.promise_control.resolve()}}}async function rs(e){if(e.buffer){const t=e.buffer;return e.buffer=null,e.pendingDownloadInternal={url:"undefined://"+e.name,name:e.name,response:Promise.resolve({arrayBuffer:()=>t,headers:{get:()=>{}}})},e.pendingDownloadInternal.response}if(e.pendingDownloadInternal&&e.pendingDownloadInternal.response){const t=undefined;return await e.pendingDownloadInternal.response}const t=e.loadRemote&&b.config.remoteSources?b.config.remoteSources:[""];let n;for(let r of t){r=r.trim(),"./"===r&&(r="");const t=os(e,r);e.name===t?b.diagnosticTracing&&console.debug(`MONO_WASM: Attempting to download '${t}'`):b.diagnosticTracing&&console.debug(`MONO_WASM: Attempting to download '${t}' for ${e.name}`);try{const r=ss({name:e.name,resolvedUrl:t,hash:e.hash,behavior:e.behavior});if(e.pendingDownloadInternal=r,n=await r.response,!n.ok)continue;return n}catch(e){continue}}const r=e.isOptional||e.name.match(/\.pdb$/)&&b.config.ignorePdbLoadErrors;if(!n)throw new Error(`Assert failed: Response undefined ${e.name}`);if(r)return o.print(`MONO_WASM: optional download '${n.url}' for ${e.name} failed ${n.status} ${n.statusText}`),void 0;{const t=new Error(`MONO_WASM: download '${n.url}' for ${e.name} failed ${n.status} ${n.statusText}`);throw t.status=n.status,t}}function os(e,t){if(!(null!==t&&void 0!==t))throw new Error(`Assert failed: sourcePrefix must be provided for ${e.name}`);let n;const r=b.config.assemblyRootFolder;if(e.resolvedUrl)n=e.resolvedUrl;else{if(""===t)if("assembly"===e.behavior||"pdb"===e.behavior)n=r?r+"/"+e.name:e.name;else if("resource"===e.behavior){const t=e.culture&&""!==e.culture?`${e.culture}/${e.name}`:e.name;n=r?r+"/"+t:t}else n=e.name;else n=t+e.name;n=b.locateFile(n)}if(!(n&&"string"==typeof n))throw new Error("Assert failed: attemptUrl need to be path or url string");return n}function ss(e){try{if("function"===typeof o.downloadResource){const t=o.downloadResource(e);if(t)return t}const t={};e.hash&&(t.integrity=e.hash);const n=b.fetch_like(e.resolvedUrl,t);return{name:e.name,url:e.resolvedUrl,response:n}}catch(t){const n={ok:false,url:e.resolvedUrl,status:500,statusText:"ERR29: "+t,arrayBuffer:()=>{throw t},json:()=>{throw t}};return{name:e.name,url:e.resolvedUrl,response:Promise.resolve(n)}}}function is(e,t,n){b.diagnosticTracing&&console.debug(`MONO_WASM: Loaded:${e.name} as ${e.behavior} size ${n.length} from ${t}`);const r="string"===typeof e.virtualPath?e.virtualPath:e.name;let s=null;switch(e.behavior){case"dotnetwasm":case"js-module-threads":break;case"resource":case"assembly":case"pdb":Jo.push({url:t,file:r});case"heap":case"icu":s=tn(n),qo[r]=[s,n.length];break;case"vfs":{const e=r.lastIndexOf("/");let t=e>0?r.substr(0,e):null,s=e>0?r.substr(e+1):r;s.startsWith("/")&&(s=s.substr(1)),t?(b.diagnosticTracing&&console.debug(`MONO_WASM: Creating directory '${t}'`),o.FS_createPath("/",t,true,true)):t="/",b.diagnosticTracing&&console.debug(`MONO_WASM: Creating file '${s}' in directory '${t}'`),cs(n,t)||o.FS_createDataFile(t,s,n,true,true,true);break}default:throw new Error(`Unrecognized asset behavior:${e.behavior}, for asset ${e.name}`)}if("assembly"===e.behavior){const e=undefined;if(!M.mono_wasm_add_assembly(r,s,n.length)){const e=Jo.findIndex((e=>e.file==r));Jo.splice(e,1)}}else"icu"===e.behavior?fe(s)||o.printErr(`MONO_WASM: Error loading ICU asset ${e.name}`):"resource"===e.behavior&&M.mono_wasm_add_satellite_assembly(r,e.culture||"",s,n.length);++Ho}async function as(e,t,n){if(!(e&&e.pendingDownloadInternal&&e.pendingDownloadInternal.response))throw new Error("Assert failed: Can't load dotnet.wasm");const r=await e.pendingDownloadInternal.response,o=r.headers&&r.headers.get?r.headers.get("Content-Type"):void 0;let s,i;if("function"===typeof WebAssembly.instantiateStreaming&&"application/wasm"===o){b.diagnosticTracing&&console.debug("MONO_WASM: instantiate_wasm_module streaming");const e=await WebAssembly.instantiateStreaming(r,t);s=e.instance,i=e.module}else{u&&"application/wasm"!==o&&console.warn('MONO_WASM: WebAssembly resource does not have the expected content type "application/wasm", so falling back to slower ArrayBuffer instantiation.');const e=await r.arrayBuffer();b.diagnosticTracing&&console.debug("MONO_WASM: instantiate_wasm_module buffered");const n=await WebAssembly.instantiate(e,t);s=n.instance,i=n.module}n(s,i)}function cs(e,t){if(e.length<8)return false;const n=new DataView(e.buffer),r=undefined;if(1651270004!=n.getUint32(0,true))return false;const s=n.getUint32(4,true);if(0==s||e.length{const t=e[0],n=t.lastIndexOf("/"),r=t.slice(0,n+1);a.add(r)})),a.forEach((e=>{o.FS_createPath(t,e,true,true)}));for(const n of i){const r=n[0],s=n[1],i=e.slice(0,s);o.FS_createDataFile(t,r,i,true,true),e=e.slice(s)}return true}async function us(){if(await Fo.promise,b.config.assets){if(!(Vo==zo))throw new Error(`Assert failed: Expected ${zo} assets to be downloaded, but only finished ${Vo}`);if(!(Ho==Lo))throw new Error(`Assert failed: Expected ${Lo} assets to be in memory, but only instantiated ${Ho}`);Jo.forEach((e=>Io.loaded_files.push(e.url))),b.diagnosticTracing&&console.debug("MONO_WASM: all assets are loaded in wasm memory")}}function ls(){return Io.loaded_files}let fs,_s;function ds(e){const t=o;"undefined"===typeof globalThis.performance&&(globalThis.performance=gs),"undefined"===typeof globalThis.URL&&(globalThis.URL=class e{constructor(e){this.url=e}toString(){return this.url}});const n=t.imports=o.imports||{},r=e=>t=>{const n=o.imports[t];return n||e(t)};n.require?b.requirePromise=e.requirePromise=Promise.resolve(r(n.require)):e.require?b.requirePromise=e.requirePromise=Promise.resolve(r(e.require)):e.requirePromise?b.requirePromise=e.requirePromise.then((e=>r(e))):b.requirePromise=e.requirePromise=Promise.resolve(r((e=>{throw new Error(`Please provide Module.imports.${e} or Module.imports.require`)}))),b.scriptDirectory=e.scriptDirectory=bs(e),t.mainScriptUrlOrBlob=e.scriptUrl,t.__locateFile===t.locateFile?t.locateFile=b.locateFile=e=>Es(e)?e:b.scriptDirectory+e:b.locateFile=t.locateFile,n.fetch?e.fetch=b.fetch_like=n.fetch:e.fetch=b.fetch_like=ws,e.noExitRuntime=u;const s=e.updateGlobalBufferAndViews;e.updateGlobalBufferAndViews=e=>{s(e),en(e)}}async function ms(){if(a){if(s.require=await b.requirePromise,globalThis.performance===gs){const{performance:e}=s.require("perf_hooks");globalThis.performance=e}if(globalThis.crypto||(globalThis.crypto={}),!globalThis.crypto.getRandomValues){let e;try{e=s.require("node:crypto")}catch(e){}e?e.webcrypto?globalThis.crypto=e.webcrypto:e.randomBytes&&(globalThis.crypto.getRandomValues=t=>{t&&t.set(e.randomBytes(t.length))}):globalThis.crypto.getRandomValues=()=>{throw new Error("Using node without crypto support. To enable current operation, either provide polyfill for 'globalThis.crypto.getRandomValues' or enable 'node:crypto' module.")}}}}const gs={now:function(){return Date.now()}};async function ws(e,t){try{if(a){if(!fs){const e=await b.requirePromise;_s=e("url"),fs=e("fs")}e.startsWith("file://")&&(e=_s.fileURLToPath(e));const t=await fs.promises.readFile(e);return{ok:true,url:e,arrayBuffer:()=>t,json:()=>JSON.parse(t)}}if("function"===typeof globalThis.fetch)return globalThis.fetch(e,t||{credentials:"same-origin"});if("function"===typeof read){const t=new Uint8Array(read(e,"binary"));return{ok:true,url:e,arrayBuffer:()=>t,json:()=>JSON.parse(o.UTF8ArrayToString(t,0,t.length))}}}catch(t){return{ok:false,url:e,status:500,statusText:"ERR28: "+t,arrayBuffer:()=>{throw t},json:()=>{throw t}}}throw new Error("No fetch implementation available")}function hs(e){return e.replace(/\\/g,"/").replace(/[?#].*/,"")}function ps(e){return e.slice(0,e.lastIndexOf("/"))+"/"}function bs(e){return l&&(e.scriptUrl=self.location.href),e.scriptUrl||(e.scriptUrl="./dotnet.js"),e.scriptUrl=hs(e.scriptUrl),ps(e.scriptUrl)}const ys=/^[a-zA-Z][a-zA-Z\d+\-.]*?:\/\//,vs=/[a-zA-Z]:[\\/]/;function Es(e){return a||c?e.startsWith("/")||e.startsWith("\\")||-1!==e.indexOf("///")||vs.test(e):ys.test(e)}function As(e,t,n,r,o,s){const i=ln(e),a=ln(t),c=ln(s);try{const e=In(n);if(!(1===e))throw new Error(`Assert failed: Signature version ${e} mismatch.`);const t=xr(i),o=xr(a);b.diagnosticTracing&&console.debug(`MONO_WASM: Binding [JSImport] ${t} from ${o}`);const s=xs(t,o),u=Mn(n),l={fn:s,marshal_exception_to_cs:eo,signature:n},f="_bound_js_"+t.replace(/\./g,"_");let _=`//# sourceURL=https://dotnet.generated.invalid/${f} \n`,d="",m="",g="";for(let e=0;e{const o=await n;return r&&(Ms.set(e,o),b.diagnosticTracing&&console.debug(`MONO_WASM: imported ES6 module '${e}' from '${t}'`)),o}))}function Ds(e,t){let n="unknown exception";if(t){n=t.toString();const e=t.stack;e&&(e.startsWith(n)?n=e:n+="\n"+e),n=Oe(n)}return e&&o.setValue(e,1,"i32"),n}function Us(e,t,n){const r=undefined;kr(Ds(e,t),n)}const Cs=new Map;function Ps(e,t,n,r,s){const i=ln(e),a=ln(s),c=o;try{const e=In(n);if(!(1===e))throw new Error(`Assert failed: Signature version ${e} mismatch.`);const r=Mn(n),o=xr(i);if(!o)throw new Error("Assert failed: fully_qualified_name must be string");b.diagnosticTracing&&console.debug(`MONO_WASM: Binding [JSExport] ${o}`);const{assembly:s,namespace:u,classname:l,methodname:f}=Hs(o),_=be(s);if(!_)throw new Error("Could not find assembly: "+s);const d=M.mono_wasm_assembly_find_class(_,u,l);if(!d)throw new Error("Could not find class: "+u+":"+l+" in assembly "+s);const m=`__Wrapper_${f}_${t}`,g=M.mono_wasm_assembly_find_method(d,m,-1);if(!g)throw new Error(`Could not find method: ${m} in ${d} [${s}]`);const w={method:g,signature:n,stackSave:c.stackSave,stackRestore:c.stackRestore,alloc_stack_frame:Sn,invoke_method_and_handle_exception:Ws},h="_bound_cs_"+`${u}_${l}_${f}`.replace(/\./g,"_").replace(/\//g,"_");let p=`//# sourceURL=https://dotnet.generated.invalid/${h} \n`,y="",v="";for(let e=0;e{const o=e.stackSave();try{const s=Sn(4),i=On(s,1),a=On(s,2),c=On(s,3);Lr(a,t),n&&0==n.length&&(n=void 0),oo(c,n,wr.String),Ws(r,s);const u=So(i,void 0,go);return u||Promise.resolve(0)}finally{e.stackRestore(o)}},b.javaScriptExports.release_js_owned_object_by_gc_handle=t=>{if(!t)throw new Error("Assert failed: Must be valid gc_handle");const n=e.stackSave();try{const r=Sn(3),o=On(r,2);Cn(o,wr.Object),lr(o,t),Ws(s,r)}finally{e.stackRestore(n)}},b.javaScriptExports.create_task_callback=()=>{const t=e.stackSave();try{const n=Sn(2);Ws(i,n);const r=undefined;return ur(On(n,1))}finally{e.stackRestore(t)}},b.javaScriptExports.complete_task=(t,n,r,o)=>{const s=e.stackSave();try{const i=Sn(5),c=On(i,2);Cn(c,wr.Object),lr(c,t);const u=On(i,3);if(n)eo(u,n);else{Cn(u,wr.None);const e=On(i,4);if(!o)throw new Error("Assert failed: res_converter missing");o(e,r)}Ws(a,i)}finally{e.stackRestore(s)}},b.javaScriptExports.call_delegate=(t,n,r,o,s,i,a,u)=>{const l=e.stackSave();try{const f=Sn(6),_=On(f,2);if(Cn(_,wr.Object),lr(_,t),i){const e=undefined;i(On(f,3),n)}if(a){const e=undefined;a(On(f,4),r)}if(u){const e=undefined;u(On(f,5),o)}if(Ws(c,f),s){const e=undefined;return s(On(f,1))}}finally{e.stackRestore(l)}},b.javaScriptExports.get_managed_stack_trace=t=>{const n=e.stackSave();try{const r=Sn(3),o=On(r,2);Cn(o,wr.Exception),lr(o,t),Ws(u,r);const s=undefined;return xo(On(r,1))}finally{e.stackRestore(n)}},n&&(b.javaScriptExports.install_synchronization_context=()=>{const t=e.stackSave();try{const r=Sn(2);Ws(n,r)}finally{e.stackRestore(t)}},f||b.javaScriptExports.install_synchronization_context())}function Ls(e){const t=M.mono_wasm_assembly_find_method(b.runtime_interop_exports_class,e,-1);if(!t)throw"Can't find method "+b.runtime_interop_namespace+"."+b.runtime_interop_exports_classname+"."+e;return t}function Js(e,t,n,r,o,s,i){const a=ln(i);try{const s=undefined;Qs(qs(e,t,n,r,o),a,true)}catch(e){Us(s,String(e),a)}finally{a.release()}}function qs(e,t,n,r,o){let s=null;switch(o){case 5:s=new Int8Array(n-t);break;case 6:s=new Uint8Array(n-t);break;case 7:s=new Int16Array(n-t);break;case 8:s=new Uint16Array(n-t);break;case 9:s=new Int32Array(n-t);break;case 10:s=new Uint32Array(n-t);break;case 13:s=new Float32Array(n-t);break;case 14:s=new Float64Array(n-t);break;case 15:s=new Uint8ClampedArray(n-t);break;default:throw new Error("Unknown array type "+o)}return Gs(s,e,t,n,r),s}function Gs(e,t,n,r,s){if(Ys(e)&&e.BYTES_PER_ELEMENT){if(s!==e.BYTES_PER_ELEMENT)throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '"+e.BYTES_PER_ELEMENT+"' sizeof managed element: '"+s+"'");let i=(r-n)*s;const a=e.length*e.BYTES_PER_ELEMENT;i>a&&(i=a);const c=undefined,u=n*s;return new Uint8Array(e.buffer,0,i).set(o.HEAPU8.subarray(t+u,t+u+i)),i}throw new Error("Object '"+e+"' is not a typed array")}function Ys(e){return"undefined"!==typeof SharedArrayBuffer?e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer:e.buffer instanceof ArrayBuffer}function Zs(e,t,n){switch(true){case null===t:case"undefined"===typeof t:return n.clear(),void 0;case"symbol"===typeof t:case"string"===typeof t:return Xi._create_uri_ref(t,n.address),void 0;default:return Ks(e,t,n),void 0}}function Xs(e){const t=fn();try{return Qs(e,t,false),t.value}finally{t.release()}}function Qs(e,t,n){if(T(t))throw new Error("Expected (value, WasmRoot, boolean)");switch(true){case null===e:case"undefined"===typeof e:return t.clear(),void 0;case"number"===typeof e:{let n;return(0|e)===e?(Rt(Uo._box_buffer,e),n=Uo._class_int32):e>>>0===e?($t(Uo._box_buffer,e),n=Uo._class_uint32):(Wt(Uo._box_buffer,e),n=Uo._class_double),M.mono_wasm_box_primitive_ref(n,Uo._box_buffer,8,t.address),void 0}case"string"===typeof e:return kr(e,t),void 0;case"symbol"===typeof e:return Nr(e,t),void 0;case"boolean"===typeof e:return Ot(Uo._box_buffer,e),M.mono_wasm_box_primitive_ref(Uo._class_boolean,Uo._box_buffer,4,t.address),void 0;case true===ft(e):return si(e,t),void 0;case"Date"===e.constructor.name:return Xi._create_date_time_ref(e.getTime(),t.address),void 0;default:return Ks(n,e,t),void 0}}function Ks(e,t,n){if(n.clear(),null!==t&&"undefined"!==typeof t){if(void 0!==t[Ge]){const e=undefined;return Ei(nt(t),n.address),void 0}if(t[Ye]&&(ai(t[Ye],e,n.address),n.value||delete t[Ye]),!n.value){const r=t[Po],o="undefined"===typeof r?0:r,s=Qe(t);Xi._create_cs_owned_proxy_ref(s,o,e?1:0,n.address)}}}function ei(e){const t=e.length*e.BYTES_PER_ELEMENT,n=o._malloc(t),r=new Uint8Array(o.HEAPU8.buffer,n,t);return r.set(new Uint8Array(e.buffer,e.byteOffset,t)),r}function ti(e,t){if(!Ys(e)||!e.BYTES_PER_ELEMENT)throw new Error("Object '"+e+"' is not a typed array");{const n=e[Po],r=ei(e);M.mono_wasm_typed_array_new_ref(r.byteOffset,e.length,e.BYTES_PER_ELEMENT,n,t.address),o._free(r.byteOffset)}}function ni(e){const t=fn();try{return ti(e,t),t.value}finally{t.release()}}function ri(e,t,n){if("number"!==typeof e)throw new Error(`Expected numeric value for enum argument, got '${e}'`);return 0|e}function oi(e,t,n){const r=fn();t?M.mono_wasm_string_array_new_ref(e.length,r.address):M.mono_wasm_obj_array_new_ref(e.length,r.address);const o=fn(0),s=r.address,i=o.address;try{for(let r=0;r{Xi._set_tcs_result_ref(r,e)}),(e=>{Xi._set_tcs_failure(r,e?e.toString():"")})).finally((()=>{Ke(n),tt(o,r)})),Xi._get_tcs_task_ref(r,t.address),{then_js_handle:n}}function ii(e,t,n){const r=ln(n);try{const n=Ze(e);if(T(n))return Us(t,"ERR06: Invalid JS object handle '"+e+"'",r),void 0;ti(n,r)}catch(e){Us(t,String(e),r)}finally{r.release()}}function ai(e,t,n){if(0===e||e===x)return Rt(n,0),void 0;Xi._get_cs_owned_object_by_js_handle_ref(e,t?1:0,n)}const ci=Symbol.for("wasm delegate_invoke");function ui(e){if(0===e)return;const t=fn(e);try{return di(t)}finally{t.release()}}function li(e){const t=undefined,n=undefined;return Ze(Xi._get_cs_owned_object_js_handle_ref(e.address,0))}function fi(e,t,n,r){switch(t){case 0:return null;case 26:case 27:throw new Error("int64 not available");case 3:case 29:return xr(e);case 4:throw new Error("no idea on how to unbox value types");case 5:return hi(e);case 6:return yi(e);case 7:return vi(e);case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:throw new Error("Marshaling of primitive arrays are not supported.");case 20:return new Date(Xi._get_date_value_ref(e.address));case 21:return Xi._object_to_string_ref(e.address);case 22:return Xi._object_to_string_ref(e.address);case 23:return li(e);case 30:return;default:throw new Error(`no idea on how to unbox object of MarshalType ${t} at offset ${e.value} (root address is ${e.address})`)}}function _i(e,t,n){if(t>=512)throw new Error(`Got marshaling error ${t} when attempting to unbox object at address ${e.value} (root located at ${e.address})`);let r=0;if((4===t||7==t)&&(r=Ht(n),r<1024))throw new Error(`Got invalid MonoType ${r} for object at address ${e.value} (root located at ${e.address})`);return fi(e,t)}function di(e){if(0===e.value)return;const t=Uo._unbox_buffer,n=M.mono_wasm_try_unbox_primitive_and_get_type_ref(e.address,t,Uo._unbox_buffer_size);switch(n){case 1:return Jt(t);case 25:return Ht(t);case 32:return Ht(t);case 24:return Zt(t);case 2:return Xt(t);case 8:return 0!==Jt(t);case 28:return String.fromCharCode(Jt(t));case 0:return null;default:return _i(e,n,t)}}function mi(e){if(0===e)return null;const t=fn(e);try{return wi(t)}finally{t.release()}}function gi(e){return Xi._is_simple_array_ref(e.address)}function wi(e){if(0===e.value)return null;const t=e.address,n=fn(),r=n.address;try{const o=M.mono_wasm_array_length(e.value),s=new Array(o);for(let e=0;ett(n,t),{promise:o,promise_control:s}=it(r,r);n=o,Xi._setup_js_cont_ref(e.address,s),et(n,t)}return n}function vi(e){if(0===e.value)return null;const t=Xi._try_get_cs_owned_object_js_handle_ref(e.address,0);if(t){if(t===x)throw new Error("Cannot access a disposed JSObject at "+e.value);return Ze(t)}const n=Xi._get_js_owned_object_gc_handle_ref(e.address);let r=ot(n);return T(r)&&(r=new ManagedObject,et(r,n)),r}function Ei(e,t){if(!e)return Rt(t,0),void 0;Xi._get_js_owned_object_by_gc_handle_ref(e,t)}const Ai=new Map;function Si(e,t,n,r,s,i,a){Et(),o.stackRestore(a),"object"===typeof r&&(r.clear(),null!==t&&null===t.scratchResultRoot?t.scratchResultRoot=r:r.release()),"object"===typeof s&&(s.clear(),null!==t&&null===t.scratchExceptionRoot?t.scratchExceptionRoot=s:s.release()),"object"===typeof i&&(i.clear(),null!==t&&null===t.scratchThisArgRoot?t.scratchThisArgRoot=i:i.release())}function Oi(e,t){if(!b.mono_wasm_bindings_is_ready)throw new Error("Assert failed: The runtime must be initialized.");const n=`${e}-${t}`;let r=Ai.get(n);if(void 0===r){const o=Gi(e);"undefined"===typeof t&&(t=Yi(o,void 0)),r=Li(o,t,false,e),Ai.set(n,r)}return r}function xi(e,t){const n=Me(e);"string"!==typeof t&&(t=Yi(n,void 0));const r=Li(n,t,false,"_"+e+"__entrypoint");return async function(...e){return e.length>0&&Array.isArray(e[0])&&(e[0]=oi(e[0],true,false)),r(...e)}}function ji(e,t,n){if(!b.mono_wasm_bindings_is_ready)throw new Error("Assert failed: The runtime must be initialized.");return t||(t=[[]]),xi(e,n)(...t)}function $i(e,t,n,r,o){const s=ln(n),i=ln(t),a=ln(o);try{const t=xr(i);if(!t||"string"!==typeof t)return Us(r,"ERR12: Invalid method name object @"+i.value,a),void 0;const n=Xe(e);if(T(n))return Us(r,"ERR13: Invalid JS object handle '"+e+"' while invoking '"+t+"'",a),void 0;const o=wi(s);try{const e=n[t];if("undefined"===typeof e)throw new Error("Method: '"+t+"' not found for: '"+Object.prototype.toString.call(n)+"'");const r=undefined;Qs(e.apply(n,o),a,true)}catch(e){Us(r,e,a)}}finally{s.release(),i.release(),a.release()}}function Ni(e,t,n,r){const o=ln(t),s=ln(r);try{const t=xr(o);if(!t)return Us(n,"Invalid property name object '"+o.value+"'",s),void 0;const r=Ze(e);if(T(r))return Us(n,"ERR01: Invalid JS object handle '"+e+"' while geting '"+t+"'",s),void 0;const i=undefined;Qs(r[t],s,true)}catch(e){Us(n,e,s)}finally{s.release(),o.release()}}function ki(e,t,n,r,o,s,i){const a=ln(n),c=ln(t),u=ln(i);try{const n=xr(c);if(!n)return Us(s,"Invalid property name object '"+t+"'",u),void 0;const i=Ze(e);if(T(i))return Us(s,"ERR02: Invalid JS object handle '"+e+"' while setting '"+n+"'",u),void 0;let l=false;const f=di(a);if(r)i[n]=f,l=true;else{if(l=false,!r&&!Object.prototype.hasOwnProperty.call(i,n))return Qs(false,u,false),void 0;true===o?Object.prototype.hasOwnProperty.call(i,n)&&(i[n]=f,l=true):(i[n]=f,l=true)}Qs(l,u,false)}catch(e){Us(s,e,u)}finally{u.release(),c.release(),a.release()}}function Ti(e,t,n,r){const o=ln(r);try{const r=Ze(e);if(T(r))return Us(n,"ERR03: Invalid JS object handle '"+e+"' while getting ["+t+"]",o),void 0;const s=undefined;Qs(r[t],o,true)}catch(e){Us(n,e,o)}finally{o.release()}}function Ri(e,t,n,r,o){const s=ln(n),i=ln(o);try{const n=Ze(e);if(T(n))return Us(r,"ERR04: Invalid JS object handle '"+e+"' while setting ["+t+"]",i),void 0;const o=di(s);n[t]=o,i.clear()}catch(e){Us(r,e,i)}finally{i.release(),s.release()}}function Mi(e,t,n){const r=ln(e),i=ln(n);try{const e=xr(r);let n;if(n=e?"Module"==e?o:"INTERNAL"==e?s:globalThis[e]:globalThis,null===n||void 0===typeof n)return Us(t,"Global object '"+e+"' not found.",i),void 0;Qs(n,i,true)}catch(e){Us(t,e,i)}finally{i.release(),r.release()}}function Ii(e,t,n,r,o){try{const e=globalThis.Blazor;if(!e)throw new Error("The blazor.webassembly.js library is not loaded.");return e._internal.invokeJSFromDotNet(t,n,r,o)}catch(t){const n=t.message+"\n"+t.stack,r=fn();return kr(n,r),r.copy_to_address(e),r.release(),0}}const Di=/[^A-Za-z0-9_$]/g,Ui=new Map,Ci=new Map,Pi=new Map;function Wi(e,t,n,r){let o=null,s=null,i=null;if(r){i=Object.keys(r),s=new Array(i.length);for(let e=0,t=i.length;e{e&&"AbortError"!==e.name&&o.printErr("MONO_WASM: Error in http_wasm_abort_response: "+e)}))}function sa(e,t,n,r,o,s,i,a){const c=undefined,u=undefined;return ia(e,t,n,r,o,s,new Span(i,a,0).slice())}function ia(e,t,n,r,o,s,i){if(!(e&&"string"===typeof e))throw new Error("Assert failed: expected url string");if(!(t&&n&&Array.isArray(t)&&Array.isArray(n)&&t.length===n.length))throw new Error("Assert failed: expected headerNames and headerValues arrays");if(!(r&&o&&Array.isArray(r)&&Array.isArray(o)&&r.length===o.length))throw new Error("Assert failed: expected headerNames and headerValues arrays");const a=new Headers;for(let e=0;e{const t=await fetch(e,c);return t.__abort_controller=s,t}))}function aa(e){if(!e.__headerNames){e.__headerNames=[],e.__headerValues=[];const t=e.headers.entries();for(const n of t)e.__headerNames.push(n[0]),e.__headerValues.push(n[1])}}function ca(e){return aa(e),e.__headerNames}function ua(e){return aa(e),e.__headerValues}function la(e){return _t((async()=>{const t=await e.arrayBuffer();return e.__buffer=t,e.__source_offset=0,t.byteLength}))}function fa(e,t){if(!e.__buffer)throw new Error("Assert failed: expected resoved arrayBuffer");if(e.__source_offset==e.__buffer.byteLength)return 0;const n=new Uint8Array(e.__buffer,e.__source_offset);t.set(n,0);const r=Math.min(t.byteLength,n.byteLength);return e.__source_offset+=r,r}function _a(e,t,n){const r=new Span(t,n,0);return _t((async()=>{if(e.__reader||(e.__reader=e.body.getReader()),e.__chunk||(e.__chunk=await e.__reader.read(),e.__source_offset=0),e.__chunk.done)return 0;const t=e.__chunk.value.byteLength-e.__source_offset;if(!(t>0))throw new Error("Assert failed: expected remaining_source to be greater than 0");const n=Math.min(t,r.byteLength),o=e.__chunk.value.subarray(e.__source_offset,e.__source_offset+n);return r.set(o,0),e.__source_offset+=n,t==n&&(e.__chunk=void 0),n}))}let da=0,ma=false,ga=0,wa;if(globalThis.navigator){const e=globalThis.navigator;e.userAgentData&&e.userAgentData.brands?ma=e.userAgentData.brands.some((e=>"Chromium"==e.brand)):e.userAgent&&(ma=e.userAgent.includes("Chrome"))}function ha(){for(;ga>0;)--ga,M.mono_background_exec()}function pa(){if(!ma)return;const e=(new Date).valueOf(),t=e+36e4,n=undefined,r=1e3;for(let n=Math.max(e+1e3,da);n{M.mono_set_timeout_exec(),ga++,ha()}),n-e)}da=t}function ba(){++ga,setTimeout(ha,0)}function ya(e){function mono_wasm_set_timeout_exec(){M.mono_set_timeout_exec()}wa&&(clearTimeout(wa),wa=void 0),wa=setTimeout(mono_wasm_set_timeout_exec,e)}class va{constructor(){this.queue=[],this.offset=0}getLength(){return this.queue.length-this.offset}isEmpty(){return 0==this.queue.length}enqueue(e){this.queue.push(e)}dequeue(){if(0===this.queue.length)return;const e=this.queue[this.offset];return this.queue[this.offset]=null,2*++this.offset>=this.queue.length&&(this.queue=this.queue.slice(this.offset),this.offset=0),e}peek(){return this.queue.length>0?this.queue[this.offset]:void 0}drain(e){for(;this.getLength();){const t=undefined;e(this.dequeue())}}}const Ea=Symbol.for("wasm ws_pending_send_buffer"),Aa=Symbol.for("wasm ws_pending_send_buffer_offset"),Sa=Symbol.for("wasm ws_pending_send_buffer_type"),Oa=Symbol.for("wasm ws_pending_receive_event_queue"),xa=Symbol.for("wasm ws_pending_receive_promise_queue"),ja=Symbol.for("wasm ws_pending_open_promise"),$a=Symbol.for("wasm ws_pending_close_promises"),Na=Symbol.for("wasm ws_pending_send_promises"),ka=Symbol.for("wasm ws_is_aborted"),Ta=Symbol.for("wasm ws_receive_status_ptr");let Ra=false,Ma,Ia;const Da=65536,Ua=new Uint8Array;function Ca(e,t,n,r){if(!(e&&"string"===typeof e))throw new Error("Assert failed: ERR12: Invalid uri "+typeof e);const o=new globalThis.WebSocket(e,t||void 0),{promise_control:s}=it();o[Oa]=new va,o[xa]=new va,o[ja]=s,o[Na]=[],o[$a]=[],o[Ta]=n,o.binaryType="arraybuffer";const i=()=>{o[ka]||(s.resolve(o),pa())},a=e=>{o[ka]||(za(o,e),pa())},c=e=>{if(o.removeEventListener("message",a),o[ka])return;r&&r(e.code,e.reason),s.reject(e.reason);for(const e of o[$a])e.resolve();const t=undefined;o[xa].drain((e=>{Mt(n,0),Mt(n+4,2),Mt(n+8,1),e.resolve()}))},u=e=>{s.reject(e.message||"WebSocket error")};return o.addEventListener("message",a),o.addEventListener("open",i,{once:true}),o.addEventListener("close",c,{once:true}),o.addEventListener("error",u,{once:true}),o}function Pa(e){if(!!!e)throw new Error("Assert failed: ERR17: expected ws instance");const t=undefined;return e[ja].promise}function Wa(e,t,n,r,s){if(!!!e)throw new Error("Assert failed: ERR17: expected ws instance");const i=undefined,a=Ja(e,new Uint8Array(o.HEAPU8.buffer,t,n),r,s);return s&&a?Ha(e,a):null}function Fa(e,t,n){if(!!!e)throw new Error("Assert failed: ERR18: expected ws instance");const r=e[Oa],o=e[xa],s=e.readyState;if(s!=WebSocket.OPEN&&s!=WebSocket.CLOSING)throw new Error("InvalidState: The WebSocket is not connected.");if(r.getLength()){if(!(0==o.getLength()))throw new Error("Assert failed: ERR20: Invalid WS state");return La(e,r,t,n),null}const{promise:i,promise_control:a}=it(),c=a;return c.buffer_ptr=t,c.buffer_length=n,o.enqueue(c),i}function Ba(e,t,n,r){if(!!!e)throw new Error("Assert failed: ERR19: expected ws instance");if(e.readyState==WebSocket.CLOSED)return null;if(r){const{promise:r,promise_control:o}=it();return e[$a].push(o),"string"===typeof n?e.close(t,n):e.close(t),r}return Ra||(Ra=true,console.warn("WARNING: Web browsers do not support closing the output side of a WebSocket. CloseOutputAsync has closed the socket and discarded any incoming messages.")),"string"===typeof n?e.close(t,n):e.close(t),null}function Va(e){if(!!!e)throw new Error("Assert failed: ERR18: expected ws instance");e[ka]=true;const t=e[ja];t&&t.reject("OperationCanceledException");for(const t of e[$a])t.reject("OperationCanceledException");for(const t of e[Na])t.reject("OperationCanceledException");e[xa].drain((e=>{e.reject("OperationCanceledException")})),e.close(1e3,"Connection was aborted.")}function Ha(e,t){if(e.send(t),e[Ea]=null,e.bufferedAmount{if(0===e.bufferedAmount)r.resolve();else if(e.readyState!=WebSocket.OPEN)r.reject("InvalidState: The WebSocket is not connected.");else if(!r.isDone)return globalThis.setTimeout(i,s),s=Math.min(1.5*s,1e3),void 0;const t=o.indexOf(r);t>-1&&o.splice(t,1)};return globalThis.setTimeout(i,0),n}function za(e,t){const n=e[Oa],r=e[xa];if("string"===typeof t.data)void 0===Ia&&(Ia=new TextEncoder),n.enqueue({type:0,data:Ia.encode(t.data),offset:0});else{if("ArrayBuffer"!==t.data.constructor.name)throw new Error("ERR19: WebSocket receive expected ArrayBuffer");n.enqueue({type:1,data:new Uint8Array(t.data),offset:0})}if(r.getLength()&&n.getLength()>1)throw new Error("ERR21: Invalid WS state");for(;r.getLength()&&n.getLength();){const t=r.dequeue();La(e,n,t.buffer_ptr,t.buffer_length),t.resolve()}pa()}function La(e,t,n,r){const s=t.peek(),i=Math.min(r,s.data.length-s.offset);if(i>0){const e=s.data.subarray(s.offset,s.offset+i),t=undefined;new Uint8Array(o.HEAPU8.buffer,n,r).set(e,0),s.offset+=i}const a=s.data.length===s.offset?1:0;a&&t.dequeue();const c=e[Ta];Mt(c,i),Mt(c+4,s.type),Mt(c+8,a)}function Ja(e,t,n,r){let o=e[Ea],s=0;const i=t.byteLength;if(o){if(s=e[Aa],n=e[Sa],0!==i){if(s+i>o.length){const n=new Uint8Array(1.5*(s+i+50));n.set(o,0),n.subarray(s).set(t),e[Ea]=o=n}else o.subarray(s).set(t);s+=i,e[Aa]=s}}else r?0!==i&&(o=t,s=i):(0!==i&&(o=t.slice(),s=i,e[Aa]=s,e[Ea]=o),e[Sa]=n);if(r){if(0==s||null==o)return Ua;if(0===n){void 0===Ma&&(Ma=new TextDecoder("utf-8",{fatal:false}));const e="undefined"!==typeof SharedArrayBuffer&&o instanceof SharedArrayBuffer?o.slice(0,s):o.subarray(0,s);return Ma.decode(e)}return o.subarray(0,s)}return null}function qa(){return{mono_wasm_exit:e=>{o.printErr("MONO_WASM: early exit "+e)},mono_wasm_enable_on_demand_gc:M.mono_wasm_enable_on_demand_gc,mono_profiler_init_aot:M.mono_profiler_init_aot,mono_wasm_exec_regression:M.mono_wasm_exec_regression,mono_method_resolve:Gi,mono_intern_string:jr,logging:void 0,mono_wasm_stringify_as_error_with_stack:xe,mono_wasm_get_loaded_files:ls,mono_wasm_send_dbg_command_with_parms:q,mono_wasm_send_dbg_command:G,mono_wasm_get_dbg_command_info:Y,mono_wasm_get_details:ie,mono_wasm_release_object:ce,mono_wasm_call_function_on:oe,mono_wasm_debugger_resume:Z,mono_wasm_detach_debugger:X,mono_wasm_raise_debug_event:K,mono_wasm_change_debugger_log_level:Q,mono_wasm_debugger_attached:te,mono_wasm_runtime_is_ready:b.mono_wasm_runtime_is_ready,get_property:$s,set_property:js,has_property:Ns,get_typeof_property:ks,get_global_this:Ts,get_dotnet_instance:()=>_,dynamic_import:Is,mono_wasm_cancel_promise:dt,ws_wasm_create:Ca,ws_wasm_open:Pa,ws_wasm_send:Wa,ws_wasm_receive:Fa,ws_wasm_close:Ba,ws_wasm_abort:Va,http_wasm_supports_streaming_response:ta,http_wasm_create_abort_controler:na,http_wasm_abort_request:ra,http_wasm_abort_response:oa,http_wasm_fetch:ia,http_wasm_fetch_bytes:sa,http_wasm_get_response_header_names:ca,http_wasm_get_response_header_values:ua,http_wasm_get_response_bytes:fa,http_wasm_get_response_length:la,http_wasm_get_streamed_response_bytes:_a}}function Ga(e){Object.assign(e,{mono_wasm_exit:M.mono_wasm_exit,mono_wasm_enable_on_demand_gc:M.mono_wasm_enable_on_demand_gc,mono_profiler_init_aot:M.mono_profiler_init_aot,mono_wasm_exec_regression:M.mono_wasm_exec_regression})}function Ya(){return{mono_wasm_setenv:xc,mono_wasm_load_bytes_into_heap:tn,mono_wasm_load_icu_data:fe,mono_wasm_runtime_ready:mono_wasm_runtime_ready,mono_wasm_load_data_archive:cs,mono_wasm_load_config:Rc,mono_load_runtime_and_bcl_args:Dc,mono_wasm_new_root_buffer:un,mono_wasm_new_root:fn,mono_wasm_new_external_root:ln,mono_wasm_release_roots:_n,mono_run_main:Re,mono_run_main_and_exit:Te,mono_wasm_add_assembly:null,mono_wasm_load_runtime:kc,config:b.config,loaded_files:[],setB32:Ot,setI8:kt,setI16:Tt,setI32:Mt,setI52:Dt,setU52:Ut,setI64Big:Ct,setU8:xt,setU16:jt,setU32:Nt,setF32:Pt,setF64:Wt,getB32:Ft,getI8:zt,getI16:Lt,getI32:Jt,getI52:qt,getU52:Gt,getI64Big:Yt,getU8:Bt,getU16:Vt,getU32:Ht,getF32:Zt,getF64:Xt}}function Za(e){Object.assign(e,{mono_wasm_add_assembly:M.mono_wasm_add_assembly})}function Xa(){return{bind_static_method:Oi,call_assembly_entry_point:ji,mono_obj_array_new:null,mono_obj_array_set:null,js_string_to_mono_string:Mr,js_typed_array_to_array:ni,mono_array_to_js_array:mi,js_to_mono_obj:Xs,conv_string:Or,unbox_mono_obj:ui,mono_obj_array_new_ref:null,mono_obj_array_set_ref:null,js_string_to_mono_string_root:kr,js_typed_array_to_array_root:ti,js_to_mono_obj_root:Qs,conv_string_root:xr,unbox_mono_obj_root:di,mono_array_root_to_js_array:wi}}function Qa(e){Object.assign(e,{mono_obj_array_new:M.mono_wasm_obj_array_new,mono_obj_array_set:M.mono_wasm_obj_array_set,mono_obj_array_new_ref:M.mono_wasm_obj_array_new_ref,mono_obj_array_set_ref:M.mono_wasm_obj_array_set_ref})}function Ka(){}async function ec(){return console.warn("MONO_WASM: ignoring diagnostics options because this runtime does not support diagnostics"),void 0}let tc,nc=false,rc=false;const oc=it(),sc=it(),ic=it(),ac=it(),cc=it(),uc=it(),lc=it(),fc=it(),_c=it();function dc(e,t){const n=e.instantiateWasm,r=e.preInit?"function"===typeof e.preInit?[e.preInit]:e.preInit:[],o=e.preRun?"function"===typeof e.preRun?[e.preRun]:e.preRun:[],s=e.postRun?"function"===typeof e.postRun?[e.postRun]:e.postRun:[],i=e.onRuntimeInitialized?e.onRuntimeInitialized:()=>{};rc=!e.configSrc&&(!e.config||!e.config.assets||-1==e.config.assets.findIndex((e=>"assembly"===e.behavior))),e.instantiateWasm=(e,t)=>mc(e,t,n),e.preInit=[()=>gc(r)],e.preRun=[()=>wc(o)],e.onRuntimeInitialized=()=>hc(i),e.postRun=[()=>pc(s)],e.ready.then((async()=>{await _c.promise,oc.promise_control.resolve(t)})).catch((e=>{oc.promise_control.reject(e)})),e.ready=oc.promise,e.onAbort||(e.onAbort=()=>Ie)}function mc(e,t,n){if(o.configSrc||o.config||n||o.print("MONO_WASM: configSrc nor config was specified"),tc=o.config?b.config=o.config:b.config=o.config={},b.diagnosticTracing=!!tc.diagnosticTracing,n){const r=undefined;return n(e,((e,n)=>{ic.promise_control.resolve(),t(e,n)}))}return $c(e,t),[]}function gc(e){o.addRunDependency("mono_pre_init");try{yc(),b.diagnosticTracing&&console.debug("MONO_WASM: preInit"),ac.promise_control.resolve(),e.forEach((e=>e()))}catch(e){throw Oc("MONO_WASM: user preInint() failed",e),bc(e,true),e}(async()=>{try{await vc(),rc||await Ec()}catch(e){throw bc(e,true),e}cc.promise_control.resolve(),o.removeRunDependency("mono_pre_init")})()}async function wc(e){o.addRunDependency("mono_pre_run_async"),await ic.promise,await cc.promise,b.diagnosticTracing&&console.debug("MONO_WASM: preRunAsync");try{e.map((e=>e()))}catch(e){throw Oc("MONO_WASM: user callback preRun() failed",e),bc(e,true),e}uc.promise_control.resolve(),o.removeRunDependency("mono_pre_run_async")}async function hc(e){await uc.promise,b.diagnosticTracing&&console.debug("MONO_WASM: onRuntimeInitialized"),lc.promise_control.resolve();try{rc||(await us(),await Ac()),tc.runtimeOptions&&jc(tc.runtimeOptions);try{e()}catch(e){throw Oc("MONO_WASM: user callback onRuntimeInitialized() failed",e),e}await Sc()}catch(e){throw Oc("MONO_WASM: onRuntimeInitializedAsync() failed",e),bc(e,true),e}fc.promise_control.resolve()}async function pc(e){await fc.promise,b.diagnosticTracing&&console.debug("MONO_WASM: postRunAsync");try{e.map((e=>e()))}catch(e){throw Oc("MONO_WASM: user callback posRun() failed",e),bc(e,true),e}_c.promise_control.resolve()}function bc(e,t){b.diagnosticTracing&&console.trace("MONO_WASM: abort_startup"),oc.promise_control.reject(e),ic.promise_control.reject(e),ac.promise_control.reject(e),cc.promise_control.reject(e),uc.promise_control.reject(e),lc.promise_control.reject(e),fc.promise_control.reject(e),_c.promise_control.reject(e),t&&De(1,e)}function yc(){o.addRunDependency("mono_wasm_pre_init_essential"),b.diagnosticTracing&&console.debug("MONO_WASM: mono_wasm_pre_init_essential"),I(),Ga(s),Za(Io),Qa(Do),o.removeRunDependency("mono_wasm_pre_init_essential")}async function vc(){b.diagnosticTracing&&console.debug("MONO_WASM: mono_wasm_pre_init_essential_async"),o.addRunDependency("mono_wasm_pre_init_essential_async"),await ms(),await Rc(o.configSrc),o.removeRunDependency("mono_wasm_pre_init_essential_async")}async function Ec(){b.diagnosticTracing&&console.debug("MONO_WASM: mono_wasm_pre_init_full"),o.addRunDependency("mono_wasm_pre_init_full"),await es(),o.removeRunDependency("mono_wasm_pre_init_full")}async function Ac(){b.diagnosticTracing&&console.debug("MONO_WASM: mono_wasm_before_user_runtime_initialized");try{await Nc(),de(),b.mono_wasm_load_runtime_done||kc("unused",tc.debugLevel),b.mono_wasm_runtime_is_ready||mono_wasm_runtime_ready(),b.mono_wasm_symbols_are_ready||ke("dotnet.js.symbols"),setTimeout((()=>{Ar.init_fields()}))}catch(e){throw Oc("MONO_WASM: Error in mono_wasm_before_user_runtime_initialized",e),e}}async function Sc(){b.diagnosticTracing&&console.debug("MONO_WASM: mono_wasm_after_user_runtime_initialized");try{if(!o.disableDotnet6Compatibility&&o.exports){const e=globalThis;for(let t=0;tb.config,setHeapB32:Ot,setHeapU8:xt,setHeapU16:jt,setHeapU32:Nt,setHeapI8:kt,setHeapI16:Tt,setHeapI32:Mt,setHeapI52:Dt,setHeapU52:Ut,setHeapI64Big:Ct,setHeapF32:Pt,setHeapF64:Wt,getHeapB32:Ft,getHeapU8:Bt,getHeapU16:Vt,getHeapU32:Ht,getHeapI8:zt,getHeapI16:Lt,getHeapI32:Jt,getHeapI52:qt,getHeapU52:Gt,getHeapI64Big:Yt,getHeapF32:Zt,getHeapF64:Xt}}function Hc(){const e=undefined;return{dotnet:Bc,exit:De}}const zc=Jc,Lc=Gc;function Jc(n,o,s,i){const a=o.module,c=globalThis;g(n,o),Co(o),ds(s),Object.assign(o.mono,Ya()),Object.assign(o.binding,Xa()),Object.assign(o.internal,qa()),Object.assign(o.internal,qa());const u=Vc();if(e.__linker_exports=Wc(),Object.assign(_,{MONO:o.mono,BINDING:o.binding,INTERNAL:o.internal,IMPORTS:o.marshaled_imports,Module:a,runtimeBuildInfo:{productVersion:t,buildConfiguration:r},...u}),Object.assign(i,u),o.module.__undefinedConfig&&(a.disableDotnet6Compatibility=true,a.configSrc="./mono-config.json"),a.print||(a.print=console.log.bind(console)),a.printErr||(a.printErr=console.error.bind(console)),"undefined"===typeof a.disableDotnet6Compatibility&&(a.disableDotnet6Compatibility=true),n.isGlobal||!a.disableDotnet6Compatibility){Object.assign(a,_),a.mono_bind_static_method=(e,t)=>(console.warn("MONO_WASM: Module.mono_bind_static_method is obsolete, please use [JSExportAttribute] interop instead"),Oi(e,t));const e=(e,t)=>{if("undefined"!==typeof c[e])return;let n;Object.defineProperty(globalThis,e,{get:()=>{if(T(n)){const r=(new Error).stack,o=r?r.substr(r.indexOf("\n",8)+1):"";console.warn(`MONO_WASM: global ${e} is obsolete, please use Module.${e} instead ${o}`),n=t()}return n}})};c.MONO=o.mono,c.BINDING=o.binding,c.INTERNAL=o.internal,n.isGlobal||(c.Module=a),e("cwrap",(()=>a.cwrap)),e("addRunDependency",(()=>a.addRunDependency)),e("removeRunDependency",(()=>a.removeRunDependency))}let l;return c.getDotnetRuntime?l=c.getDotnetRuntime.__list:(c.getDotnetRuntime=e=>c.getDotnetRuntime.__list.getRuntime(e),c.getDotnetRuntime.__list=l=new qc),l.registerRuntime(_),dc(a,_),_}e.__linker_exports=null;class qc{constructor(){this.list={}}registerRuntime(e){return e.runtimeId=Object.keys(this.list).length,this.list[e.runtimeId]=Be(e),e.runtimeId}getRuntime(e){const t=this.list[e];return t?t.deref():void 0}}function Gc(e,t){w(t),Object.assign(d,Hc()),h(e)}return e.__initializeImportsAndExports=zc,e.__setEmscriptenEntrypoint=Lc,e.moduleExports=d,Object.defineProperty(e,"__esModule",{value:true}),e}({}); + +var createDotnetRuntime = (() => { + var _scriptDir = import.meta.url; + + return ( +function(createDotnetRuntime) { + createDotnetRuntime = createDotnetRuntime || {}; + +"use strict";var Module=typeof createDotnetRuntime!="undefined"?createDotnetRuntime:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var require=require||undefined;var __dirname=__dirname||"";var __callbackAPI={MONO:MONO,BINDING:BINDING,INTERNAL:INTERNAL,IMPORTS:IMPORTS};if(typeof createDotnetRuntime==="function"){__callbackAPI.Module=Module={ready:Module.ready};const extension=createDotnetRuntime(__callbackAPI);if(extension.ready){throw new Error("MONO_WASM: Module.ready couldn't be redefined.")}Object.assign(Module,extension);createDotnetRuntime=Module;if(!createDotnetRuntime.locateFile)createDotnetRuntime.locateFile=createDotnetRuntime.__locateFile=path=>scriptDirectory+path}else if(typeof createDotnetRuntime==="object"){__callbackAPI.Module=Module={ready:Module.ready,__undefinedConfig:Object.keys(createDotnetRuntime).length===1};Object.assign(Module,createDotnetRuntime);createDotnetRuntime=Module;if(!createDotnetRuntime.locateFile)createDotnetRuntime.locateFile=createDotnetRuntime.__locateFile=path=>scriptDirectory+path}else{throw new Error("MONO_WASM: Can't use moduleFactory callback of createDotnetRuntime function.")}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}};read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){let data;if(typeof readbuffer=="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data=="object");return data};readAsync=function readAsync(f,onload,onerror){setTimeout(()=>onload(readBinary(f)),0)};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit=="function"){quit_=(status,toThrow)=>{logExceptionOnExit(toThrow);quit(status)}}if(typeof print!="undefined"){if(typeof console=="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function uleb128Encode(n){if(n<128){return[n]}return[n%128|128,n>>7]}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function=="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64","p":"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{tempRet0=value};var getTempRet0=()=>tempRet0;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;if(Module["locateFile"]){wasmBinaryFile="dotnet.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{wasmBinaryFile=new URL("dotnet.wasm",import.meta.url).toString()}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return Number(HEAPF64[ptr>>3]);default:abort("invalid type for getValue: "+type)}return null}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}function setWasmTableEntry(idx,func){wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}var exceptionCaught=[];function exception_addRef(info){info.add_ref()}var uncaughtExceptionCount=0;function ___cxa_begin_catch(ptr){var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);exception_addRef(info);return info.get_exception_ptr()}var exceptionLast=0;function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}function ___cxa_free_exception(ptr){return _free(new ExceptionInfo(ptr).ptr)}function exception_decRef(info){if(info.release_ref()&&!info.get_rethrown()){var destructor=info.get_destructor();if(destructor){getWasmTableEntry(destructor)(info.excPtr)}___cxa_free_exception(info.excPtr)}}function ___cxa_end_catch(){_setThrew(0);var info=exceptionCaught.pop();exception_decRef(info);exceptionLast=0}function ___resumeException(ptr){if(!exceptionLast){exceptionLast=ptr}throw ptr}function ___cxa_find_matching_catch_3(){var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}var typeArray=Array.prototype.slice.call(arguments);for(var i=0;ipath.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get function(){return this.shared.position},set:function(val){this.shared.position=val}}}}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}var SOCKFS={mount:function(mount){Module["websocket"]=Module["websocket"]&&"object"===typeof Module["websocket"]?Module["websocket"]:{};Module["websocket"]._callbacks={};Module["websocket"]["on"]=function(event,callback){if("function"===typeof callback){this._callbacks[event]=callback}return this};Module["websocket"].emit=function(event,param){if("function"===typeof this._callbacks[event]){this._callbacks[event].call(this,param)}};return FS.createNode(null,"/",16384|511,0)},createSocket:function(family,type,protocol){type&=~526336;var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family:family,type:type,protocol:protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node:node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket:function(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll:function(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl:function(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read:function(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write:function(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close:function(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname:function(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return"socket["+SOCKFS.nextname.current+++"]"},websocket_sock_ops:{createPeer:function(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var runtimeConfig=Module["websocket"]&&"object"===typeof Module["websocket"];var url="ws:#".replace("#","//");if(runtimeConfig){if("string"===typeof Module["websocket"]["url"]){url=Module["websocket"]["url"]}}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}var subProtocols="binary";if(runtimeConfig){if("string"===typeof Module["websocket"]["subprotocol"]){subProtocols=Module["websocket"]["subprotocol"]}}var opts=undefined;if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}if(runtimeConfig&&null===Module["websocket"]["subprotocol"]){subProtocols="null";opts=undefined}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr:addr,port:port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer:function(sock,addr,port){return sock.peers[addr+":"+port]},addPeer:function(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer:function(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents:function(sock,peer){var first=true;var handleOpen=function(){Module["websocket"].emit("open",sock.stream.fd);try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}else{data=new Uint8Array(data)}}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data});Module["websocket"].emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){Module["websocket"].emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){Module["websocket"].emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll:function(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask},ioctl:function(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;default:return 28}},close:function(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i>2]=value;return value}function inetNtop4(addr){return(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255)}function inetNtop6(ints){var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family:family,addr:addr,port:port}}function inetPton4(str){var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0}function jstoi_q(str){return parseInt(str)}function inetPton6(str){var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_fstatfs64(fd,size,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return ___syscall_statfs64(0,size,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function ___syscall_ftruncate64(fd,length_low,length_high){try{var length=convertI32PairToI53Checked(length_low,length_high);if(isNaN(length))return-61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~4352;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function writeSockaddr(sa,family,addr,port,addrlen){switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0}function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_sendto(fd,message,length,flags,addr,addr_len){try{var sock=getSocketFromFD(fd);var dest=getSocketAddress(addr,addr_len,true);if(!dest){return FS.write(sock.stream,HEAP8,message,length)}else{return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_symlink(target,linkpath){try{target=SYSCALLS.getStr(target);linkpath=SYSCALLS.getStr(linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);if(!times){var atime=Date.now();var mtime=atime}else{var seconds=HEAP32[times>>2];var nanoseconds=HEAP32[times+4>>2];atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=8;seconds=HEAP32[times>>2];nanoseconds=HEAP32[times+4>>2];mtime=seconds*1e3+nanoseconds/(1e3*1e3)}FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __dlinit(main_dso_handle){}var dlopenMissingError="To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking";function __dlopen_js(filename,flag){abort(dlopenMissingError)}function __emscripten_date_now(){return Date.now()}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __gmtime_js(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday}function __localtime_js(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}function __mmap_js(len,prot,flags,fd,off,allocated){try{var stream=FS.getStream(fd);if(!stream)return-8;var res=FS.mmap(stream,len,off,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;return ptr}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __msync_js(addr,len,flags,fd){try{SYSCALLS.doMsync(addr,FS.getStream(fd),len,flags,0);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset){try{var stream=FS.getStream(fd);if(stream){if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}FS.munmap(stream)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _tzset_impl(timezone,daylight,tzname){var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAPU32[tzname+4>>2]=summerNamePtr}else{HEAPU32[tzname>>2]=summerNamePtr;HEAPU32[tzname+4>>2]=winterNamePtr}}function __tzset_js(timezone,daylight,tzname){if(__tzset_js.called)return;__tzset_js.called=true;_tzset_impl(timezone,daylight,tzname)}function _abort(){abort("")}var DOTNETENTROPY={batchedQuotaMax:65536,getBatchedRandomValues:function(buffer,bufferLength){const needTempBuf=typeof SharedArrayBuffer!=="undefined"&&Module.HEAPU8.buffer instanceof SharedArrayBuffer;const buf=needTempBuf?new ArrayBuffer(bufferLength):Module.HEAPU8.buffer;const offset=needTempBuf?0:buffer;for(let i=0;i{var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=()=>performance.now();function _emscripten_get_now_res(){if(ENVIRONMENT_IS_NODE){return 1}else if(typeof dateNow!="undefined"){return 1e3}else return 1e3}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}function _fd_pwrite(fd,iov,iovcnt,offset_low,offset_high,pnum){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt,offset);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops&&stream.stream_ops.fsync){return-stream.stream_ops.fsync(stream)}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _getTempRet0(){return getTempRet0()}function _llvm_eh_typeid_for(type){return type}function _mono_set_timeout(){return __dotnet_runtime.__linker_exports.mono_set_timeout.apply(__dotnet_runtime,arguments)}function _mono_wasm_add_dbg_command_received(){return __dotnet_runtime.__linker_exports.mono_wasm_add_dbg_command_received.apply(__dotnet_runtime,arguments)}function _mono_wasm_asm_loaded(){return __dotnet_runtime.__linker_exports.mono_wasm_asm_loaded.apply(__dotnet_runtime,arguments)}function _mono_wasm_bind_cs_function(){return __dotnet_runtime.__linker_exports.mono_wasm_bind_cs_function.apply(__dotnet_runtime,arguments)}function _mono_wasm_bind_js_function(){return __dotnet_runtime.__linker_exports.mono_wasm_bind_js_function.apply(__dotnet_runtime,arguments)}function _mono_wasm_create_cs_owned_object_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_create_cs_owned_object_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_debugger_log(){return __dotnet_runtime.__linker_exports.mono_wasm_debugger_log.apply(__dotnet_runtime,arguments)}function _mono_wasm_fire_debugger_agent_message(){return __dotnet_runtime.__linker_exports.mono_wasm_fire_debugger_agent_message.apply(__dotnet_runtime,arguments)}function _mono_wasm_get_by_index_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_get_by_index_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_get_global_object_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_get_global_object_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_get_object_property_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_get_object_property_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_invoke_bound_function(){return __dotnet_runtime.__linker_exports.mono_wasm_invoke_bound_function.apply(__dotnet_runtime,arguments)}function _mono_wasm_invoke_js_blazor(){return __dotnet_runtime.__linker_exports.mono_wasm_invoke_js_blazor.apply(__dotnet_runtime,arguments)}function _mono_wasm_invoke_js_with_args_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_invoke_js_with_args_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_marshal_promise(){return __dotnet_runtime.__linker_exports.mono_wasm_marshal_promise.apply(__dotnet_runtime,arguments)}function _mono_wasm_release_cs_owned_object(){return __dotnet_runtime.__linker_exports.mono_wasm_release_cs_owned_object.apply(__dotnet_runtime,arguments)}function _mono_wasm_set_by_index_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_set_by_index_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_set_entrypoint_breakpoint(){return __dotnet_runtime.__linker_exports.mono_wasm_set_entrypoint_breakpoint.apply(__dotnet_runtime,arguments)}function _mono_wasm_set_object_property_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_set_object_property_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_trace_logger(){return __dotnet_runtime.__linker_exports.mono_wasm_trace_logger.apply(__dotnet_runtime,arguments)}function _mono_wasm_typed_array_from_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_typed_array_from_ref.apply(__dotnet_runtime,arguments)}function _mono_wasm_typed_array_to_array_ref(){return __dotnet_runtime.__linker_exports.mono_wasm_typed_array_to_array_ref.apply(__dotnet_runtime,arguments)}function _schedule_background_exec(){return __dotnet_runtime.__linker_exports.schedule_background_exec.apply(__dotnet_runtime,arguments)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_readFile"]=FS.readFile;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;let __dotnet_replacement_PThread=false?{}:undefined;if(false){__dotnet_replacement_PThread.loadWasmModuleToWorker=PThread.loadWasmModuleToWorker;__dotnet_replacement_PThread.threadInitTLS=PThread.threadInitTLS;__dotnet_replacement_PThread.allocateUnusedWorker=PThread.allocateUnusedWorker}let __dotnet_replacements={scriptUrl:import.meta.url,fetch:globalThis.fetch,require:require,updateGlobalBufferAndViews:updateGlobalBufferAndViews,pthreadReplacements:__dotnet_replacement_PThread};if(ENVIRONMENT_IS_NODE){__dotnet_replacements.requirePromise=import("module").then(mod=>mod.createRequire(import.meta.url))}let __dotnet_exportedAPI=__dotnet_runtime.__initializeImportsAndExports({isGlobal:false,isNode:ENVIRONMENT_IS_NODE,isWorker:ENVIRONMENT_IS_WORKER,isShell:ENVIRONMENT_IS_SHELL,isWeb:ENVIRONMENT_IS_WEB,isPThread:false,quit_:quit_,ExitStatus:ExitStatus,requirePromise:__dotnet_replacements.requirePromise},{mono:MONO,binding:BINDING,internal:INTERNAL,module:Module,marshaled_imports:IMPORTS},__dotnet_replacements,__callbackAPI);updateGlobalBufferAndViews=__dotnet_replacements.updateGlobalBufferAndViews;var fetch=__dotnet_replacements.fetch;_scriptDir=__dirname=scriptDirectory=__dotnet_replacements.scriptDirectory;if(ENVIRONMENT_IS_NODE){__dotnet_replacements.requirePromise.then(someRequire=>{require=someRequire})}var noExitRuntime=__dotnet_replacements.noExitRuntime;if(false){PThread.loadWasmModuleToWorker=__dotnet_replacements.pthreadReplacements.loadWasmModuleToWorker;PThread.threadInitTLS=__dotnet_replacements.pthreadReplacements.threadInitTLS;PThread.allocateUnusedWorker=__dotnet_replacements.pthreadReplacements.allocateUnusedWorker}var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();createDotnetRuntime.ready=createDotnetRuntime.ready.then(()=>{return __dotnet_exportedAPI}); + + + return createDotnetRuntime.ready +} +); +})(); +export default createDotnetRuntime; +const MONO = {}, BINDING = {}, INTERNAL = {}, IMPORTS = {}; + +// TODO duplicated from emscripten, so we can use them in the __setEmscriptenEntrypoint +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function'; +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +__dotnet_runtime.__setEmscriptenEntrypoint(createDotnetRuntime, { isNode: ENVIRONMENT_IS_NODE, isShell: ENVIRONMENT_IS_SHELL, isWeb: ENVIRONMENT_IS_WEB, isWorker: ENVIRONMENT_IS_WORKER }); +const dotnet = __dotnet_runtime.moduleExports.dotnet; +const exit = __dotnet_runtime.moduleExports.exit; +export { dotnet, exit, INTERNAL }; diff --git a/_framework/dotnet.7.0.14.mikshhdjmu.js.br b/_framework/dotnet.7.0.14.mikshhdjmu.js.br new file mode 100644 index 00000000..f703292f Binary files /dev/null and b/_framework/dotnet.7.0.14.mikshhdjmu.js.br differ diff --git a/_framework/dotnet.7.0.14.mikshhdjmu.js.gz b/_framework/dotnet.7.0.14.mikshhdjmu.js.gz new file mode 100644 index 00000000..8e643b63 Binary files /dev/null and b/_framework/dotnet.7.0.14.mikshhdjmu.js.gz differ diff --git a/_framework/dotnet.timezones.blat b/_framework/dotnet.timezones.blat new file mode 100755 index 00000000..f6476241 Binary files /dev/null and b/_framework/dotnet.timezones.blat differ diff --git a/_framework/dotnet.timezones.blat.br b/_framework/dotnet.timezones.blat.br new file mode 100644 index 00000000..52e865d8 Binary files /dev/null and b/_framework/dotnet.timezones.blat.br differ diff --git a/_framework/dotnet.timezones.blat.gz b/_framework/dotnet.timezones.blat.gz new file mode 100644 index 00000000..1e87e357 Binary files /dev/null and b/_framework/dotnet.timezones.blat.gz differ diff --git a/_framework/dotnet.wasm b/_framework/dotnet.wasm new file mode 100755 index 00000000..9261cf32 Binary files /dev/null and b/_framework/dotnet.wasm differ diff --git a/_framework/dotnet.wasm.br b/_framework/dotnet.wasm.br new file mode 100644 index 00000000..50fda722 Binary files /dev/null and b/_framework/dotnet.wasm.br differ diff --git a/_framework/dotnet.wasm.gz b/_framework/dotnet.wasm.gz new file mode 100644 index 00000000..0b2efff4 Binary files /dev/null and b/_framework/dotnet.wasm.gz differ diff --git a/_framework/icudt.dat b/_framework/icudt.dat new file mode 100755 index 00000000..54093bdd Binary files /dev/null and b/_framework/icudt.dat differ diff --git a/_framework/icudt.dat.br b/_framework/icudt.dat.br new file mode 100644 index 00000000..d7f04579 Binary files /dev/null and b/_framework/icudt.dat.br differ diff --git a/_framework/icudt.dat.gz b/_framework/icudt.dat.gz new file mode 100644 index 00000000..e44b0be8 Binary files /dev/null and b/_framework/icudt.dat.gz differ diff --git a/_framework/icudt_CJK.dat b/_framework/icudt_CJK.dat new file mode 100755 index 00000000..118a60d5 Binary files /dev/null and b/_framework/icudt_CJK.dat differ diff --git a/_framework/icudt_CJK.dat.br b/_framework/icudt_CJK.dat.br new file mode 100644 index 00000000..8c765172 Binary files /dev/null and b/_framework/icudt_CJK.dat.br differ diff --git a/_framework/icudt_CJK.dat.gz b/_framework/icudt_CJK.dat.gz new file mode 100644 index 00000000..430a8db8 Binary files /dev/null and b/_framework/icudt_CJK.dat.gz differ diff --git a/_framework/icudt_EFIGS.dat b/_framework/icudt_EFIGS.dat new file mode 100755 index 00000000..e4c1c910 Binary files /dev/null and b/_framework/icudt_EFIGS.dat differ diff --git a/_framework/icudt_EFIGS.dat.br b/_framework/icudt_EFIGS.dat.br new file mode 100644 index 00000000..d8755b47 Binary files /dev/null and b/_framework/icudt_EFIGS.dat.br differ diff --git a/_framework/icudt_EFIGS.dat.gz b/_framework/icudt_EFIGS.dat.gz new file mode 100644 index 00000000..7aa0f38d Binary files /dev/null and b/_framework/icudt_EFIGS.dat.gz differ diff --git a/_framework/icudt_no_CJK.dat b/_framework/icudt_no_CJK.dat new file mode 100755 index 00000000..87b08e08 Binary files /dev/null and b/_framework/icudt_no_CJK.dat differ diff --git a/_framework/icudt_no_CJK.dat.br b/_framework/icudt_no_CJK.dat.br new file mode 100644 index 00000000..3acc4ee2 Binary files /dev/null and b/_framework/icudt_no_CJK.dat.br differ diff --git a/_framework/icudt_no_CJK.dat.gz b/_framework/icudt_no_CJK.dat.gz new file mode 100644 index 00000000..fcc454fd Binary files /dev/null and b/_framework/icudt_no_CJK.dat.gz differ diff --git a/assets/.gitignore b/assets/.gitignore new file mode 100644 index 00000000..e4476b0a --- /dev/null +++ b/assets/.gitignore @@ -0,0 +1,2 @@ +# Include obj model files +!*.obj \ No newline at end of file diff --git a/assets/.gitkeep b/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/assets/doorbell.mp3 b/assets/doorbell.mp3 new file mode 100644 index 00000000..44b63679 Binary files /dev/null and b/assets/doorbell.mp3 differ diff --git a/assets/jorson/games/nox/background.mp3 b/assets/jorson/games/nox/background.mp3 new file mode 100644 index 00000000..2b55a088 Binary files /dev/null and b/assets/jorson/games/nox/background.mp3 differ diff --git a/assets/jorson/games/nox/victory.mp3 b/assets/jorson/games/nox/victory.mp3 new file mode 100644 index 00000000..7b190396 Binary files /dev/null and b/assets/jorson/games/nox/victory.mp3 differ diff --git a/assets/jorson/games/pong/ball.mp3 b/assets/jorson/games/pong/ball.mp3 new file mode 100644 index 00000000..62cafb03 Binary files /dev/null and b/assets/jorson/games/pong/ball.mp3 differ diff --git a/assets/mandelbrot.frag b/assets/mandelbrot.frag new file mode 100644 index 00000000..5e716208 --- /dev/null +++ b/assets/mandelbrot.frag @@ -0,0 +1,26 @@ +precision highp float; varying vec2 vPos; + +uniform vec2 p; +uniform float r; +const int I = 500; + +void main() { + vec2 c = p + vPos * r, z = c; + float n = 0.0; + for (int i = I; i > 0; i --) { + if (z.x * z.x + z.y * z.y > 4.0) { + n = float(i)/float(I); + break; + } + z = vec2( + z.x * z.x - z.y * z.y, + 2.0 * z.x * z.y + ) + c; + } + gl_FragColor = vec4( + 0.5 - cos(n * 17.0) / 2.0, + 0.5 - cos(n * 13.0) / 2.0, + 0.5 - cos(n * 23.0) / 2.0, + 1.0 + ); +} diff --git a/assets/mandelbrot.vert b/assets/mandelbrot.vert new file mode 100644 index 00000000..6ec93e13 --- /dev/null +++ b/assets/mandelbrot.vert @@ -0,0 +1,7 @@ +precision highp float; varying vec2 vPos; + +attribute vec3 aPosition; + +void main() { + vPos = (gl_Position = vec4(aPosition, 1.0)).xy; +} diff --git a/assets/teapot.obj b/assets/teapot.obj new file mode 100644 index 00000000..33e3dd6f --- /dev/null +++ b/assets/teapot.obj @@ -0,0 +1,4663 @@ +# Blender v2.61 (sub 0) OBJ File: '' +# www.blender.org +v 0.605903 0.005903 -0.000000 +v 0.000000 0.000000 0.000000 +v 0.584584 0.005902 -0.162696 +v 0.524218 0.005902 -0.307888 +v 0.430191 0.005901 -0.430191 +v 0.307888 0.005901 -0.524218 +v 0.162696 0.005901 -0.584584 +v 0.000000 0.005901 -0.605903 +v -0.162696 0.005901 -0.584584 +v -0.307888 0.005901 -0.524218 +v -0.430191 0.005901 -0.430191 +v -0.524218 0.005902 -0.307888 +v -0.584584 0.005902 -0.162696 +v -0.605903 0.005903 -0.000000 +v -0.584584 0.005904 0.162696 +v -0.524218 0.005904 0.307888 +v -0.430191 0.005905 0.430191 +v -0.307888 0.005905 0.524218 +v -0.162696 0.005905 0.584584 +v 0.000000 0.005905 0.605903 +v 0.162696 0.005905 0.584584 +v 0.307888 0.005905 0.524218 +v 0.430191 0.005905 0.430191 +v 0.524218 0.005904 0.307888 +v 0.584584 0.005904 0.162696 +v 1.400000 2.400000 -0.000008 +v 1.350740 2.400000 0.375917 +v 1.332760 2.454690 0.370913 +v 1.381370 2.454690 -0.000009 +v 1.384260 2.487500 -0.000009 +v 1.335550 2.487500 0.371690 +v 1.403120 2.498440 -0.000009 +v 1.353760 2.498440 0.376756 +v 1.382010 2.487500 0.384619 +v 1.432410 2.487500 -0.000009 +v 1.414950 2.454690 0.393787 +v 1.466550 2.454690 -0.000009 +v 1.447220 2.400000 0.402769 +v 1.500000 2.400000 -0.000008 +v 1.211260 2.400000 0.711398 +v 1.195140 2.454690 0.701929 +v 1.197640 2.487500 0.703400 +v 1.213960 2.498440 0.712986 +v 1.239300 2.487500 0.727866 +v 1.268840 2.454690 0.745216 +v 1.297780 2.400000 0.762213 +v 0.994000 2.400000 0.993991 +v 0.980770 2.454690 0.980761 +v 0.982824 2.487500 0.982815 +v 0.996219 2.498440 0.996210 +v 1.017010 2.487500 1.017000 +v 1.041250 2.454690 1.041240 +v 1.065000 2.400000 1.064990 +v 0.711407 2.400000 1.211250 +v 0.701938 2.454690 1.195130 +v 0.703409 2.487500 1.197630 +v 0.712995 2.498440 1.213950 +v 0.727875 2.487500 1.239290 +v 0.745225 2.454690 1.268830 +v 0.762222 2.400000 1.297770 +v 0.375926 2.400010 1.350730 +v 0.370922 2.454690 1.332750 +v 0.371699 2.487500 1.335540 +v 0.376765 2.498450 1.353750 +v 0.384628 2.487500 1.382000 +v 0.393796 2.454700 1.414940 +v 0.402778 2.400010 1.447210 +v 0.000000 2.400010 1.399990 +v 0.000000 2.454690 1.381360 +v 0.000000 2.487500 1.384250 +v 0.000000 2.498450 1.403110 +v 0.000000 2.487510 1.432400 +v 0.000000 2.454700 1.466540 +v 0.000000 2.400010 1.499990 +v -0.375926 2.400010 1.350730 +v -0.370922 2.454690 1.332750 +v -0.371699 2.487500 1.335540 +v -0.376765 2.498450 1.353750 +v -0.384628 2.487500 1.382000 +v -0.393796 2.454700 1.414940 +v -0.402778 2.400010 1.447210 +v -0.711407 2.400000 1.211250 +v -0.701938 2.454690 1.195130 +v -0.703409 2.487500 1.197630 +v -0.712995 2.498440 1.213950 +v -0.727875 2.487500 1.239290 +v -0.745225 2.454690 1.268830 +v -0.762222 2.400000 1.297770 +v -0.994000 2.400000 0.993991 +v -0.980770 2.454690 0.980761 +v -0.982824 2.487500 0.982815 +v -0.996219 2.498440 0.996210 +v -1.017010 2.487500 1.017000 +v -1.041250 2.454690 1.041240 +v -1.065000 2.400000 1.064990 +v -1.211260 2.400000 0.711398 +v -1.195140 2.454690 0.701929 +v -1.197640 2.487500 0.703400 +v -1.213960 2.498440 0.712986 +v -1.239300 2.487500 0.727866 +v -1.268840 2.454690 0.745216 +v -1.297780 2.400000 0.762213 +v -1.350740 2.400000 0.375917 +v -1.332760 2.454690 0.370913 +v -1.335550 2.487500 0.371690 +v -1.353760 2.498440 0.376756 +v -1.382010 2.487500 0.384619 +v -1.414950 2.454690 0.393787 +v -1.447220 2.400000 0.402769 +v -1.400000 2.400000 -0.000008 +v -1.381370 2.454690 -0.000009 +v -1.384260 2.487500 -0.000009 +v -1.403120 2.498440 -0.000009 +v -1.432410 2.487500 -0.000009 +v -1.466550 2.454690 -0.000009 +v -1.500000 2.400000 -0.000008 +v -1.350740 2.400000 -0.375935 +v -1.332760 2.454690 -0.370931 +v -1.335550 2.487500 -0.371708 +v -1.353760 2.498440 -0.376774 +v -1.382010 2.487500 -0.384637 +v -1.414950 2.454690 -0.393805 +v -1.447220 2.400000 -0.402787 +v -1.211260 2.400000 -0.711416 +v -1.195140 2.454690 -0.701947 +v -1.197640 2.487500 -0.703418 +v -1.213960 2.498440 -0.713004 +v -1.239300 2.487500 -0.727884 +v -1.268840 2.454690 -0.745234 +v -1.297780 2.400000 -0.762231 +v -0.994000 2.400000 -0.994009 +v -0.980770 2.454690 -0.980779 +v -0.982824 2.487500 -0.982833 +v -0.996219 2.498440 -0.996228 +v -1.017010 2.487500 -1.017020 +v -1.041250 2.454690 -1.041260 +v -1.065000 2.400000 -1.065010 +v -0.711407 2.400000 -1.211270 +v -0.701938 2.454690 -1.195150 +v -0.703409 2.487500 -1.197650 +v -0.712995 2.498440 -1.213970 +v -0.727875 2.487500 -1.239310 +v -0.745225 2.454690 -1.268850 +v -0.762222 2.400000 -1.297790 +v -0.375926 2.400000 -1.350750 +v -0.370922 2.454680 -1.332770 +v -0.371699 2.487490 -1.335560 +v -0.376765 2.498440 -1.353770 +v -0.384628 2.487490 -1.382020 +v -0.393796 2.454680 -1.414960 +v -0.402778 2.399990 -1.447230 +v 0.000000 2.399990 -1.400010 +v 0.000000 2.454680 -1.381380 +v 0.000000 2.487490 -1.384270 +v 0.000000 2.498430 -1.403130 +v 0.000000 2.487490 -1.432420 +v 0.000000 2.454680 -1.466560 +v 0.000000 2.399990 -1.500010 +v 0.375926 2.400000 -1.350750 +v 0.370922 2.454680 -1.332770 +v 0.371699 2.487490 -1.335560 +v 0.376765 2.498440 -1.353770 +v 0.384628 2.487490 -1.382020 +v 0.393796 2.454680 -1.414960 +v 0.402778 2.399990 -1.447230 +v 0.711407 2.400000 -1.211270 +v 0.701938 2.454690 -1.195150 +v 0.703409 2.487500 -1.197650 +v 0.712995 2.498440 -1.213970 +v 0.727875 2.487500 -1.239310 +v 0.745225 2.454690 -1.268850 +v 0.762222 2.400000 -1.297790 +v 0.994000 2.400000 -0.994009 +v 0.980770 2.454690 -0.980779 +v 0.982824 2.487500 -0.982833 +v 0.996219 2.498440 -0.996228 +v 1.017010 2.487500 -1.017020 +v 1.041250 2.454690 -1.041260 +v 1.065000 2.400000 -1.065010 +v 1.211260 2.400000 -0.711416 +v 1.195140 2.454690 -0.701947 +v 1.197640 2.487500 -0.703418 +v 1.213960 2.498440 -0.713004 +v 1.239300 2.487500 -0.727884 +v 1.268840 2.454690 -0.745234 +v 1.297780 2.400000 -0.762231 +v 1.350740 2.400000 -0.375935 +v 1.332760 2.454690 -0.370931 +v 1.335550 2.487500 -0.371708 +v 1.353760 2.498440 -0.376774 +v 1.382010 2.487500 -0.384637 +v 1.414950 2.454690 -0.393805 +v 1.447220 2.400000 -0.402787 +v 1.566710 2.137850 0.436024 +v 1.623840 2.137850 -0.000008 +v 1.679490 1.877780 0.467414 +v 1.740740 1.877780 -0.000007 +v 1.778880 1.621880 0.495075 +v 1.843750 1.621870 -0.000006 +v 1.858160 1.372220 0.517142 +v 1.925930 1.372220 -0.000005 +v 1.910650 1.130900 0.531750 +v 1.980320 1.130900 -0.000004 +v 1.929630 0.900002 0.537034 +v 2.000000 0.900000 -0.000003 +v 1.404920 2.137850 0.825145 +v 1.506060 1.877780 0.884547 +v 1.595190 1.621880 0.936892 +v 1.666280 1.372220 0.978651 +v 1.713350 1.130900 1.006300 +v 1.730370 0.900004 1.016300 +v 1.152930 2.137850 1.152920 +v 1.235930 1.877780 1.235920 +v 1.309060 1.621870 1.309050 +v 1.367410 1.372230 1.367400 +v 1.406030 1.130910 1.406030 +v 1.420000 0.900005 1.420000 +v 0.825153 2.137860 1.404910 +v 0.884554 1.877790 1.506050 +v 0.936898 1.621890 1.595180 +v 0.978656 1.372230 1.666270 +v 1.006300 1.130910 1.713350 +v 1.016300 0.900006 1.730370 +v 0.436032 2.137860 1.566700 +v 0.467421 1.877790 1.679480 +v 0.495081 1.621880 1.778870 +v 0.517147 1.372230 1.858150 +v 0.531754 1.130910 1.910650 +v 0.537037 0.900007 1.929630 +v 0.000000 2.137860 1.623830 +v 0.000000 1.877790 1.740730 +v 0.000000 1.621880 1.843740 +v 0.000000 1.372230 1.925920 +v 0.000000 1.130910 1.980320 +v 0.000000 0.900007 2.000000 +v -0.436032 2.137860 1.566700 +v -0.467421 1.877790 1.679480 +v -0.495081 1.621890 1.778870 +v -0.517147 1.372230 1.858150 +v -0.531754 1.130910 1.910650 +v -0.537037 0.900007 1.929630 +v -0.825153 2.137860 1.404910 +v -0.884554 1.877790 1.506050 +v -0.936898 1.621890 1.595180 +v -0.978656 1.372230 1.666270 +v -1.006300 1.130910 1.713350 +v -1.016300 0.900006 1.730370 +v -1.152930 2.137850 1.152920 +v -1.235930 1.877780 1.235920 +v -1.309060 1.621870 1.309050 +v -1.367410 1.372230 1.367400 +v -1.406030 1.130910 1.406030 +v -1.420000 0.900005 1.420000 +v -1.404920 2.137850 0.825145 +v -1.506060 1.877780 0.884547 +v -1.595190 1.621880 0.936892 +v -1.666280 1.372220 0.978651 +v -1.713350 1.130900 1.006300 +v -1.730370 0.900004 1.016300 +v -1.566710 2.137850 0.436024 +v -1.679490 1.877780 0.467414 +v -1.778880 1.621870 0.495075 +v -1.858160 1.372220 0.517142 +v -1.910650 1.130900 0.531750 +v -1.929630 0.900002 0.537034 +v -1.623840 2.137850 -0.000008 +v -1.740740 1.877780 -0.000007 +v -1.843750 1.621870 -0.000006 +v -1.925930 1.372220 -0.000005 +v -1.980320 1.130900 -0.000004 +v -2.000000 0.900000 -0.000003 +v -1.566710 2.137850 -0.436040 +v -1.679490 1.877780 -0.467428 +v -1.778880 1.621880 -0.495087 +v -1.858160 1.372220 -0.517152 +v -1.910650 1.130900 -0.531758 +v -1.929630 0.899998 -0.537040 +v -1.404920 2.137850 -0.825161 +v -1.506060 1.877780 -0.884561 +v -1.595190 1.621880 -0.936904 +v -1.666280 1.372220 -0.978661 +v -1.713350 1.130900 -1.006300 +v -1.730370 0.899996 -1.016300 +v -1.152930 2.137850 -1.152940 +v -1.235930 1.877780 -1.235940 +v -1.309060 1.621870 -1.309070 +v -1.367410 1.372220 -1.367420 +v -1.406030 1.130890 -1.406030 +v -1.420000 0.899995 -1.420000 +v -0.825153 2.137840 -1.404930 +v -0.884554 1.877770 -1.506070 +v -0.936898 1.621870 -1.595200 +v -0.978656 1.372210 -1.666290 +v -1.006300 1.130890 -1.713350 +v -1.016300 0.899994 -1.730370 +v -0.436032 2.137840 -1.566720 +v -0.467421 1.877770 -1.679500 +v -0.495081 1.621860 -1.778890 +v -0.517147 1.372210 -1.858170 +v -0.531754 1.130890 -1.910650 +v -0.537037 0.899993 -1.929630 +v 0.000000 2.137840 -1.623850 +v 0.000000 1.877770 -1.740750 +v 0.000000 1.621860 -1.843760 +v 0.000000 1.372210 -1.925940 +v 0.000000 1.130890 -1.980320 +v 0.000000 0.899993 -2.000000 +v 0.436032 2.137840 -1.566720 +v 0.467421 1.877770 -1.679500 +v 0.495081 1.621870 -1.778890 +v 0.517147 1.372210 -1.858170 +v 0.531754 1.130890 -1.910650 +v 0.537037 0.899993 -1.929630 +v 0.825153 2.137840 -1.404930 +v 0.884554 1.877770 -1.506070 +v 0.936898 1.621870 -1.595200 +v 0.978656 1.372210 -1.666290 +v 1.006300 1.130890 -1.713350 +v 1.016300 0.899994 -1.730370 +v 1.152930 2.137850 -1.152940 +v 1.235930 1.877780 -1.235940 +v 1.309060 1.621870 -1.309070 +v 1.367410 1.372220 -1.367420 +v 1.406030 1.130890 -1.406030 +v 1.420000 0.899995 -1.420000 +v 1.404920 2.137850 -0.825161 +v 1.506060 1.877780 -0.884561 +v 1.595190 1.621880 -0.936904 +v 1.666280 1.372220 -0.978661 +v 1.713350 1.130900 -1.006300 +v 1.730370 0.899996 -1.016300 +v 1.566710 2.137850 -0.436040 +v 1.679490 1.877780 -0.467428 +v 1.778880 1.621870 -0.495087 +v 1.858160 1.372220 -0.517152 +v 1.910650 1.130900 -0.531758 +v 1.929630 0.899998 -0.537040 +v 1.893900 0.693405 0.527089 +v 1.962960 0.693403 -0.000002 +v 1.804560 0.522224 0.502227 +v 1.870370 0.522222 -0.000002 +v 1.688430 0.384377 0.469906 +v 1.750000 0.384375 -0.000001 +v 1.572290 0.277780 0.437585 +v 1.629630 0.277778 -0.000001 +v 1.482960 0.200349 0.412722 +v 1.537040 0.200347 -0.000001 +v 1.447220 0.150001 0.402777 +v 1.500000 0.150000 -0.000001 +v 1.698330 0.693407 0.997473 +v 1.618220 0.522225 0.950423 +v 1.514070 0.384378 0.889258 +v 1.409930 0.277781 0.828092 +v 1.329820 0.200350 0.781042 +v 1.297780 0.150003 0.762221 +v 1.393700 0.693408 1.393700 +v 1.327960 0.522227 1.327960 +v 1.242500 0.384380 1.242500 +v 1.157040 0.277782 1.157040 +v 1.091300 0.200351 1.091300 +v 1.065000 0.150004 1.065000 +v 0.997476 0.693409 1.698330 +v 0.950425 0.522228 1.618220 +v 0.889259 0.384381 1.514070 +v 0.828093 0.277783 1.409930 +v 0.781043 0.200352 1.329820 +v 0.762222 0.150005 1.297780 +v 0.527092 0.693410 1.893900 +v 0.502229 0.522229 1.804560 +v 0.469907 0.384381 1.688430 +v 0.437586 0.277784 1.572290 +v 0.412723 0.200352 1.482960 +v 0.402778 0.150005 1.447220 +v 0.000000 0.693410 1.962960 +v 0.000000 0.522229 1.870370 +v 0.000000 0.384381 1.750000 +v 0.000000 0.277784 1.629630 +v 0.000000 0.200353 1.537040 +v 0.000000 0.150006 1.500000 +v -0.527092 0.693410 1.893900 +v -0.502229 0.522229 1.804560 +v -0.469907 0.384381 1.688430 +v -0.437586 0.277784 1.572290 +v -0.412723 0.200352 1.482960 +v -0.402778 0.150005 1.447220 +v -0.997476 0.693409 1.698330 +v -0.950425 0.522228 1.618220 +v -0.889259 0.384381 1.514070 +v -0.828093 0.277783 1.409930 +v -0.781043 0.200352 1.329820 +v -0.762222 0.150005 1.297780 +v -1.393700 0.693408 1.393700 +v -1.327960 0.522227 1.327960 +v -1.242500 0.384380 1.242500 +v -1.157040 0.277782 1.157040 +v -1.091300 0.200351 1.091300 +v -1.065000 0.150004 1.065000 +v -1.698330 0.693407 0.997473 +v -1.618220 0.522225 0.950423 +v -1.514070 0.384378 0.889258 +v -1.409930 0.277781 0.828092 +v -1.329820 0.200350 0.781042 +v -1.297780 0.150003 0.762221 +v -1.893900 0.693405 0.527089 +v -1.804560 0.522224 0.502227 +v -1.688430 0.384377 0.469906 +v -1.572290 0.277780 0.437585 +v -1.482960 0.200349 0.412722 +v -1.447220 0.150001 0.402777 +v -1.962960 0.693403 -0.000002 +v -1.870370 0.522222 -0.000002 +v -1.750000 0.384375 -0.000001 +v -1.629630 0.277778 -0.000001 +v -1.537040 0.200347 -0.000001 +v -1.500000 0.150000 -0.000001 +v -1.893900 0.693401 -0.527095 +v -1.804560 0.522220 -0.502231 +v -1.688430 0.384373 -0.469908 +v -1.572290 0.277776 -0.437587 +v -1.482960 0.200345 -0.412724 +v -1.447220 0.149999 -0.402779 +v -1.698330 0.693399 -0.997479 +v -1.618220 0.522218 -0.950427 +v -1.514070 0.384372 -0.889260 +v -1.409930 0.277775 -0.828094 +v -1.329820 0.200344 -0.781044 +v -1.297780 0.149997 -0.762223 +v -1.393700 0.693398 -1.393700 +v -1.327960 0.522217 -1.327960 +v -1.242500 0.384370 -1.242500 +v -1.157040 0.277774 -1.157040 +v -1.091300 0.200343 -1.091300 +v -1.065000 0.149996 -1.065000 +v -0.997476 0.693397 -1.698330 +v -0.950425 0.522216 -1.618220 +v -0.889259 0.384369 -1.514070 +v -0.828093 0.277773 -1.409930 +v -0.781043 0.200342 -1.329820 +v -0.762222 0.149995 -1.297780 +v -0.527092 0.693396 -1.893900 +v -0.502229 0.522215 -1.804560 +v -0.469907 0.384369 -1.688430 +v -0.437586 0.277772 -1.572290 +v -0.412723 0.200342 -1.482960 +v -0.402778 0.149995 -1.447220 +v 0.000000 0.693396 -1.962960 +v 0.000000 0.522215 -1.870370 +v 0.000000 0.384369 -1.750000 +v 0.000000 0.277772 -1.629630 +v 0.000000 0.200341 -1.537040 +v 0.000000 0.149994 -1.500000 +v 0.527092 0.693396 -1.893900 +v 0.502229 0.522215 -1.804560 +v 0.469907 0.384369 -1.688430 +v 0.437586 0.277772 -1.572290 +v 0.412723 0.200342 -1.482960 +v 0.402778 0.149995 -1.447220 +v 0.997476 0.693397 -1.698330 +v 0.950425 0.522216 -1.618220 +v 0.889259 0.384369 -1.514070 +v 0.828093 0.277773 -1.409930 +v 0.781043 0.200342 -1.329820 +v 0.762222 0.149995 -1.297780 +v 1.393700 0.693398 -1.393700 +v 1.327960 0.522217 -1.327960 +v 1.242500 0.384370 -1.242500 +v 1.157040 0.277774 -1.157040 +v 1.091300 0.200343 -1.091300 +v 1.065000 0.149996 -1.065000 +v 1.698330 0.693399 -0.997479 +v 1.618220 0.522218 -0.950427 +v 1.514070 0.384372 -0.889260 +v 1.409930 0.277775 -0.828094 +v 1.329820 0.200344 -0.781044 +v 1.297780 0.149997 -0.762223 +v 1.893900 0.693401 -0.527095 +v 1.804560 0.522220 -0.502231 +v 1.688430 0.384373 -0.469908 +v 1.572290 0.277776 -0.437587 +v 1.482960 0.200345 -0.412724 +v 1.447220 0.149999 -0.402779 +v 1.022220 0.022222 -0.000000 +v 0.986255 0.022221 -0.274486 +v 1.284370 0.046875 -0.000000 +v 1.239180 0.046874 -0.344878 +v 1.427780 0.077778 -0.000000 +v 1.377540 0.077777 -0.383385 +v 1.487850 0.112847 -0.000000 +v 1.435500 0.112846 -0.399515 +v 0.884412 0.022220 -0.519440 +v 1.111220 0.046873 -0.652653 +v 1.235290 0.077775 -0.725523 +v 1.287260 0.112844 -0.756047 +v 0.725778 0.022219 -0.725778 +v 0.911906 0.046872 -0.911906 +v 1.013720 0.077774 -1.013720 +v 1.056370 0.112843 -1.056370 +v 0.519440 0.022219 -0.884412 +v 0.652653 0.046871 -1.111220 +v 0.725523 0.077774 -1.235290 +v 0.756047 0.112842 -1.287260 +v 0.274486 0.022219 -0.986255 +v 0.344878 0.046871 -1.239180 +v 0.383385 0.077773 -1.377540 +v 0.399515 0.112842 -1.435500 +v 0.000000 0.022218 -1.022220 +v 0.000000 0.046871 -1.284370 +v 0.000000 0.077773 -1.427780 +v 0.000000 0.112842 -1.487850 +v -0.274486 0.022219 -0.986255 +v -0.344878 0.046871 -1.239180 +v -0.383385 0.077773 -1.377540 +v -0.399515 0.112842 -1.435500 +v -0.519440 0.022219 -0.884412 +v -0.652653 0.046871 -1.111220 +v -0.725523 0.077774 -1.235290 +v -0.756047 0.112842 -1.287260 +v -0.725778 0.022219 -0.725778 +v -0.911906 0.046872 -0.911906 +v -1.013720 0.077774 -1.013720 +v -1.056370 0.112843 -1.056370 +v -0.884412 0.022220 -0.519440 +v -1.111220 0.046873 -0.652653 +v -1.235290 0.077775 -0.725523 +v -1.287260 0.112844 -0.756047 +v -0.986255 0.022221 -0.274486 +v -1.239180 0.046874 -0.344878 +v -1.377540 0.077777 -0.383385 +v -1.435500 0.112846 -0.399515 +v -1.022220 0.022222 -0.000000 +v -1.284370 0.046875 -0.000000 +v -1.427780 0.077778 -0.000000 +v -1.487850 0.112847 -0.000000 +v -0.986255 0.022223 0.274486 +v -1.239180 0.046876 0.344878 +v -1.377540 0.077779 0.383385 +v -1.435500 0.112848 0.399515 +v -0.884412 0.022224 0.519440 +v -1.111220 0.046877 0.652653 +v -1.235290 0.077781 0.725523 +v -1.287260 0.112850 0.756047 +v -0.725778 0.022225 0.725778 +v -0.911906 0.046878 0.911906 +v -1.013720 0.077782 1.013720 +v -1.056370 0.112851 1.056370 +v -0.519440 0.022225 0.884412 +v -0.652653 0.046879 1.111220 +v -0.725523 0.077782 1.235290 +v -0.756047 0.112852 1.287260 +v -0.274486 0.022225 0.986255 +v -0.344878 0.046879 1.239180 +v -0.383385 0.077783 1.377540 +v -0.399515 0.112852 1.435500 +v 0.000000 0.022226 1.022220 +v 0.000000 0.046879 1.284370 +v 0.000000 0.077783 1.427780 +v 0.000000 0.112852 1.487850 +v 0.274486 0.022225 0.986255 +v 0.344878 0.046879 1.239180 +v 0.383385 0.077783 1.377540 +v 0.399515 0.112852 1.435500 +v 0.519440 0.022225 0.884412 +v 0.652653 0.046879 1.111220 +v 0.725523 0.077782 1.235290 +v 0.756047 0.112852 1.287260 +v 0.725778 0.022225 0.725778 +v 0.911906 0.046878 0.911906 +v 1.013720 0.077782 1.013720 +v 1.056370 0.112851 1.056370 +v 0.884412 0.022224 0.519440 +v 1.111220 0.046877 0.652653 +v 1.235290 0.077781 0.725523 +v 1.287260 0.112850 0.756047 +v 0.986255 0.022223 0.274486 +v 1.239180 0.046876 0.344878 +v 1.377540 0.077779 0.383385 +v 1.435500 0.112848 0.399515 +v 0.192963 2.700000 0.053694 +v 0.200000 2.700000 -0.000010 +v 0.165279 2.785420 0.046035 +v 0.171296 2.785420 -0.000010 +v 0.173037 2.700000 0.101620 +v 0.148234 2.785420 0.087096 +v 0.142000 2.700000 0.141990 +v 0.121672 2.785420 0.121662 +v 0.101630 2.700000 0.173027 +v 0.087106 2.785420 0.148224 +v 0.053704 2.700000 0.192953 +v 0.046045 2.785420 0.165269 +v 0.000000 2.700000 0.199990 +v 0.000000 2.785420 0.171286 +v -0.053704 2.700000 0.192953 +v -0.046045 2.785420 0.165269 +v -0.101630 2.700000 0.173027 +v -0.087106 2.785420 0.148224 +v -0.142000 2.700000 0.141990 +v -0.121672 2.785420 0.121662 +v -0.173037 2.700000 0.101620 +v -0.148234 2.785420 0.087096 +v -0.192963 2.700000 0.053694 +v -0.165279 2.785420 0.046035 +v -0.200000 2.700000 -0.000010 +v -0.171296 2.785420 -0.000010 +v -0.192963 2.700000 -0.053714 +v -0.165279 2.785420 -0.046055 +v -0.173037 2.700000 -0.101640 +v -0.148234 2.785420 -0.087116 +v -0.142000 2.700000 -0.142010 +v -0.121672 2.785420 -0.121682 +v -0.101630 2.700000 -0.173047 +v -0.087106 2.785420 -0.148244 +v -0.053704 2.700000 -0.192973 +v -0.046045 2.785420 -0.165289 +v 0.000000 2.700000 -0.200010 +v 0.000000 2.785420 -0.171306 +v 0.053704 2.700000 -0.192973 +v 0.046045 2.785420 -0.165289 +v 0.101630 2.700000 -0.173047 +v 0.087106 2.785420 -0.148244 +v 0.142000 2.700000 -0.142010 +v 0.121672 2.785420 -0.121682 +v 0.173037 2.700000 -0.101640 +v 0.148234 2.785420 -0.087116 +v 0.192963 2.700000 -0.053714 +v 0.165279 2.785420 -0.046055 +v 0.338579 2.636110 0.094221 +v 0.350926 2.636110 -0.000009 +v 0.553875 2.588890 0.154140 +v 0.574074 2.588890 -0.000009 +v 0.795972 2.550000 0.221519 +v 0.825000 2.550000 -0.000009 +v 1.021990 2.511110 0.284422 +v 1.059260 2.511110 -0.000009 +v 1.189040 2.463890 0.330915 +v 1.232410 2.463890 -0.000009 +v 1.254260 2.400000 0.349065 +v 1.300000 2.400000 -0.000008 +v 0.303616 2.636110 0.178312 +v 0.496680 2.588890 0.291705 +v 0.713778 2.550000 0.419213 +v 0.916455 2.511110 0.538252 +v 1.066260 2.463890 0.626237 +v 1.124740 2.400000 0.660584 +v 0.249157 2.636110 0.249147 +v 0.407593 2.588890 0.407583 +v 0.585750 2.550000 0.585741 +v 0.752074 2.511110 0.752065 +v 0.875009 2.463890 0.875000 +v 0.923000 2.400000 0.922991 +v 0.178322 2.636110 0.303606 +v 0.291715 2.588890 0.496670 +v 0.419222 2.550000 0.713769 +v 0.538261 2.511110 0.916446 +v 0.626246 2.463890 1.066250 +v 0.660593 2.400000 1.124730 +v 0.094230 2.636110 0.338569 +v 0.154150 2.588890 0.553865 +v 0.221528 2.550000 0.795963 +v 0.284431 2.511110 1.021980 +v 0.330924 2.463890 1.189030 +v 0.349074 2.400000 1.254250 +v 0.000000 2.636110 0.350916 +v 0.000000 2.588890 0.574064 +v 0.000000 2.550000 0.824991 +v 0.000000 2.511110 1.059250 +v 0.000000 2.463890 1.232400 +v 0.000000 2.400000 1.299990 +v -0.094230 2.636110 0.338569 +v -0.154150 2.588890 0.553865 +v -0.221528 2.550000 0.795963 +v -0.284431 2.511110 1.021980 +v -0.330924 2.463890 1.189030 +v -0.349074 2.400000 1.254250 +v -0.178322 2.636110 0.303606 +v -0.291715 2.588890 0.496670 +v -0.419222 2.550000 0.713769 +v -0.538261 2.511110 0.916446 +v -0.626246 2.463890 1.066250 +v -0.660593 2.400000 1.124730 +v -0.249157 2.636110 0.249147 +v -0.407593 2.588890 0.407583 +v -0.585750 2.550000 0.585741 +v -0.752074 2.511110 0.752065 +v -0.875009 2.463890 0.875000 +v -0.923000 2.400000 0.922991 +v -0.303616 2.636110 0.178312 +v -0.496680 2.588890 0.291705 +v -0.713778 2.550000 0.419213 +v -0.916455 2.511110 0.538252 +v -1.066260 2.463890 0.626237 +v -1.124740 2.400000 0.660584 +v -0.338579 2.636110 0.094221 +v -0.553875 2.588890 0.154140 +v -0.795972 2.550000 0.221519 +v -1.021990 2.511110 0.284422 +v -1.189040 2.463890 0.330915 +v -1.254260 2.400000 0.349065 +v -0.350926 2.636110 -0.000009 +v -0.574074 2.588890 -0.000009 +v -0.825000 2.550000 -0.000009 +v -1.059260 2.511110 -0.000009 +v -1.232410 2.463890 -0.000009 +v -1.300000 2.400000 -0.000008 +v -0.338579 2.636110 -0.094239 +v -0.553875 2.588890 -0.154160 +v -0.795972 2.550000 -0.221537 +v -1.021990 2.511110 -0.284440 +v -1.189040 2.463890 -0.330933 +v -1.254260 2.400000 -0.349083 +v -0.303616 2.636110 -0.178332 +v -0.496680 2.588890 -0.291725 +v -0.713778 2.550000 -0.419231 +v -0.916455 2.511110 -0.538270 +v -1.066260 2.463890 -0.626255 +v -1.124740 2.400000 -0.660602 +v -0.249157 2.636110 -0.249167 +v -0.407593 2.588890 -0.407603 +v -0.585750 2.550000 -0.585759 +v -0.752074 2.511110 -0.752083 +v -0.875009 2.463890 -0.875018 +v -0.923000 2.400000 -0.923009 +v -0.178322 2.636110 -0.303626 +v -0.291715 2.588890 -0.496690 +v -0.419222 2.550000 -0.713787 +v -0.538261 2.511110 -0.916464 +v -0.626246 2.463890 -1.066270 +v -0.660593 2.400000 -1.124750 +v -0.094230 2.636110 -0.338589 +v -0.154150 2.588890 -0.553885 +v -0.221528 2.550000 -0.795981 +v -0.284431 2.511110 -1.022000 +v -0.330924 2.463890 -1.189050 +v -0.349074 2.400000 -1.254270 +v 0.000000 2.636110 -0.350936 +v 0.000000 2.588890 -0.574084 +v 0.000000 2.550000 -0.825009 +v 0.000000 2.511110 -1.059270 +v 0.000000 2.463890 -1.232420 +v 0.000000 2.400000 -1.300010 +v 0.094230 2.636110 -0.338589 +v 0.154150 2.588890 -0.553885 +v 0.221528 2.550000 -0.795981 +v 0.284431 2.511110 -1.022000 +v 0.330924 2.463890 -1.189050 +v 0.349074 2.400000 -1.254270 +v 0.178322 2.636110 -0.303626 +v 0.291715 2.588890 -0.496690 +v 0.419222 2.550000 -0.713787 +v 0.538261 2.511110 -0.916464 +v 0.626246 2.463890 -1.066270 +v 0.660593 2.400000 -1.124750 +v 0.249157 2.636110 -0.249167 +v 0.407593 2.588890 -0.407603 +v 0.585750 2.550000 -0.585759 +v 0.752074 2.511110 -0.752083 +v 0.875009 2.463890 -0.875018 +v 0.923000 2.400000 -0.923009 +v 0.303616 2.636110 -0.178332 +v 0.496680 2.588890 -0.291725 +v 0.713778 2.550000 -0.419231 +v 0.916455 2.511110 -0.538270 +v 1.066260 2.463890 -0.626255 +v 1.124740 2.400000 -0.660602 +v 0.338579 2.636110 -0.094239 +v 0.553875 2.588890 -0.154160 +v 0.795972 2.550000 -0.221537 +v 1.021990 2.511110 -0.284440 +v 1.189040 2.463890 -0.330933 +v 1.254260 2.400000 -0.349083 +v -1.924540 2.023960 -0.000007 +v -1.600000 2.025000 -0.000007 +v -1.927040 2.040550 0.124992 +v -1.592590 2.041670 0.124992 +v -2.196300 2.016670 -0.000007 +v -2.206450 2.032720 0.124992 +v -2.428240 2.011460 0.124993 +v -2.412500 1.996870 -0.000007 +v -2.589850 1.970060 0.124993 +v -2.570370 1.958330 -0.000007 +v -2.688700 1.901810 0.124993 +v -2.667130 1.894790 -0.000007 +v -2.722220 1.800000 0.124993 +v -2.700000 1.800000 -0.000006 +v -1.933300 2.082020 0.199992 +v -1.574070 2.083330 0.199992 +v -2.231820 2.072840 0.199992 +v -2.467590 2.047920 0.199992 +v -2.638550 1.999380 0.199993 +v -2.742630 1.919370 0.199993 +v -2.777780 1.800000 0.199993 +v -1.941440 2.135940 0.224992 +v -1.550000 2.137500 0.224992 +v -2.264810 2.125000 0.224992 +v -2.518750 2.095310 0.224992 +v -2.701850 2.037500 0.224992 +v -2.812730 1.942190 0.224993 +v -2.850000 1.800000 0.224993 +v -1.949570 2.189850 0.199992 +v -1.525930 2.191670 0.199992 +v -2.297810 2.177160 0.199992 +v -2.569910 2.142710 0.199992 +v -2.765160 2.075620 0.199992 +v -2.882840 1.965010 0.199993 +v -2.922220 1.800000 0.199993 +v -1.955830 2.231330 0.124992 +v -1.507410 2.233330 0.124992 +v -2.323180 2.217280 0.124992 +v -2.609260 2.179170 0.124992 +v -2.813850 2.104940 0.124992 +v -2.936760 1.982560 0.124993 +v -2.977780 1.800000 0.124993 +v -1.958330 2.247920 -0.000008 +v -1.500000 2.250000 -0.000008 +v -2.333330 2.233330 -0.000008 +v -2.625000 2.193750 -0.000008 +v -2.833330 2.116670 -0.000007 +v -2.958330 1.989580 -0.000007 +v -3.000000 1.800000 -0.000006 +v -1.507410 2.233330 -0.125008 +v -1.955830 2.231330 -0.125008 +v -2.323180 2.217280 -0.125008 +v -2.609260 2.179170 -0.125008 +v -2.813850 2.104940 -0.125008 +v -2.936760 1.982560 -0.125007 +v -2.977780 1.800000 -0.125007 +v -1.525930 2.191670 -0.200008 +v -1.949570 2.189850 -0.200008 +v -2.297810 2.177160 -0.200008 +v -2.569910 2.142710 -0.200008 +v -2.765160 2.075620 -0.200008 +v -2.882840 1.965010 -0.200007 +v -2.922220 1.800000 -0.200007 +v -1.550000 2.137500 -0.225008 +v -1.941440 2.135940 -0.225008 +v -2.264810 2.125000 -0.225008 +v -2.518750 2.095310 -0.225008 +v -2.701850 2.037500 -0.225008 +v -2.812730 1.942190 -0.225007 +v -2.850000 1.800000 -0.225007 +v -1.574070 2.083330 -0.200008 +v -1.933300 2.082020 -0.200008 +v -2.231820 2.072840 -0.200008 +v -2.467590 2.047920 -0.200008 +v -2.638550 1.999380 -0.200007 +v -2.742630 1.919370 -0.200007 +v -2.777780 1.800000 -0.200007 +v -1.592590 2.041670 -0.125008 +v -1.927040 2.040550 -0.125008 +v -2.206450 2.032720 -0.125008 +v -2.428240 2.011460 -0.125007 +v -2.589850 1.970060 -0.125007 +v -2.688700 1.901810 -0.125007 +v -2.722220 1.800000 -0.125007 +v -2.704180 1.663980 0.124994 +v -2.682870 1.670830 -0.000006 +v -2.648290 1.505350 0.124994 +v -2.629630 1.516670 -0.000005 +v -2.551850 1.335760 0.124995 +v -2.537500 1.350000 -0.000005 +v -2.412210 1.166870 0.124996 +v -2.403700 1.183330 -0.000004 +v -2.226680 1.010330 0.124996 +v -2.225460 1.029170 -0.000004 +v -1.992590 0.877778 0.124997 +v -2.000000 0.900000 -0.000003 +v -2.757470 1.646840 0.199994 +v -2.694920 1.477060 0.199995 +v -2.587730 1.300170 0.199995 +v -2.433470 1.125720 0.199996 +v -2.229720 0.963228 0.199996 +v -1.974070 0.822223 0.199997 +v -2.826740 1.624570 0.224994 +v -2.755560 1.440280 0.224995 +v -2.634370 1.253910 0.224995 +v -2.461110 1.072220 0.224996 +v -2.233680 0.901998 0.224997 +v -1.950000 0.750001 0.224997 +v -2.896000 1.602290 0.199994 +v -2.816190 1.403500 0.199995 +v -2.681020 1.207640 0.199996 +v -2.488750 1.018720 0.199996 +v -2.237640 0.840767 0.199997 +v -1.925930 0.677779 0.199997 +v -2.949290 1.585150 0.124994 +v -2.862830 1.375210 0.124995 +v -2.716900 1.172050 0.124996 +v -2.510010 0.977573 0.124996 +v -2.240680 0.793666 0.124997 +v -1.907410 0.622222 0.124998 +v -2.970600 1.578300 -0.000006 +v -2.881480 1.363890 -0.000005 +v -2.731250 1.157810 -0.000004 +v -2.518520 0.961111 -0.000003 +v -2.241900 0.774826 -0.000003 +v -1.900000 0.600000 -0.000002 +v -2.949290 1.585150 -0.125006 +v -2.862830 1.375210 -0.125005 +v -2.716900 1.172050 -0.125004 +v -2.510010 0.977572 -0.125004 +v -2.240680 0.793666 -0.125003 +v -1.907410 0.622222 -0.125002 +v -2.896000 1.602290 -0.200006 +v -2.816190 1.403500 -0.200005 +v -2.681020 1.207640 -0.200004 +v -2.488750 1.018720 -0.200004 +v -2.237640 0.840765 -0.200003 +v -1.925930 0.677777 -0.200003 +v -2.826740 1.624570 -0.225006 +v -2.755560 1.440280 -0.225005 +v -2.634370 1.253910 -0.225005 +v -2.461110 1.072220 -0.225004 +v -2.233680 0.901996 -0.225003 +v -1.950000 0.749999 -0.225003 +v -2.757470 1.646840 -0.200006 +v -2.694920 1.477060 -0.200005 +v -2.587730 1.300170 -0.200005 +v -2.433470 1.125720 -0.200004 +v -2.229720 0.963226 -0.200004 +v -1.974070 0.822221 -0.200003 +v -2.704180 1.663980 -0.125006 +v -2.648290 1.505350 -0.125006 +v -2.551850 1.335760 -0.125005 +v -2.412210 1.166870 -0.125004 +v -2.226680 1.010330 -0.125004 +v -1.992590 0.877778 -0.125003 +v 1.700000 1.425000 -0.000005 +v 1.700000 1.363890 0.274995 +v 2.072380 1.425210 0.262341 +v 2.058800 1.476390 -0.000005 +v 2.290120 1.572020 0.230704 +v 2.270370 1.611110 -0.000006 +v 2.409720 1.773610 0.189576 +v 2.387500 1.800000 -0.000006 +v 2.487650 1.999280 0.148450 +v 2.462960 2.013890 -0.000007 +v 2.580400 2.218310 0.116813 +v 2.549540 2.223610 -0.000008 +v 2.700000 2.400000 -0.000008 +v 2.744440 2.400000 0.104158 +v 1.700000 1.211110 0.439996 +v 2.106330 1.297250 0.419748 +v 2.339510 1.474280 0.369131 +v 2.465280 1.707640 0.303327 +v 2.549380 1.962760 0.237524 +v 2.657560 2.205070 0.186906 +v 2.855560 2.400000 0.166658 +v 1.700000 1.012500 0.494996 +v 2.150460 1.130900 0.472218 +v 2.403700 1.347220 0.415273 +v 2.537500 1.621870 0.341244 +v 2.629630 1.915280 0.267215 +v 2.757870 2.187850 0.210270 +v 3.000000 2.400000 0.187491 +v 1.700000 0.813891 0.439997 +v 2.194600 0.964560 0.419749 +v 2.467900 1.220160 0.369132 +v 2.609720 1.536110 0.303327 +v 2.709880 1.867800 0.237524 +v 2.858180 2.170630 0.186906 +v 3.144440 2.400000 0.166658 +v 1.700000 0.661112 0.274998 +v 2.228550 0.836601 0.262343 +v 2.517280 1.122430 0.230706 +v 2.665280 1.470140 0.189578 +v 2.771600 1.831280 0.148450 +v 2.935340 2.157380 0.116813 +v 3.255560 2.400000 0.104158 +v 1.700000 0.600000 -0.000002 +v 2.242130 0.785417 -0.000003 +v 2.537040 1.083330 -0.000004 +v 2.687500 1.443750 -0.000005 +v 2.796300 1.816670 -0.000006 +v 2.966200 2.152080 -0.000008 +v 3.300000 2.400000 -0.000008 +v 1.700000 0.661110 -0.275002 +v 2.228550 0.836599 -0.262349 +v 2.517280 1.122430 -0.230714 +v 2.665280 1.470140 -0.189588 +v 2.771600 1.831280 -0.148464 +v 2.935340 2.157380 -0.116829 +v 3.255560 2.400000 -0.104176 +v 1.700000 0.813887 -0.440003 +v 2.194600 0.964556 -0.419757 +v 2.467900 1.220160 -0.369141 +v 2.609720 1.536110 -0.303339 +v 2.709880 1.867800 -0.237538 +v 2.858180 2.170630 -0.186922 +v 3.144440 2.400000 -0.166676 +v 1.700000 1.012500 -0.495004 +v 2.150460 1.130900 -0.472226 +v 2.403700 1.347220 -0.415283 +v 2.537500 1.621870 -0.341256 +v 2.629630 1.915280 -0.267229 +v 2.757870 2.187850 -0.210286 +v 3.000000 2.400000 -0.187509 +v 1.700000 1.211110 -0.440004 +v 2.106330 1.297250 -0.419758 +v 2.339510 1.474280 -0.369141 +v 2.465280 1.707640 -0.303339 +v 2.549380 1.962760 -0.237538 +v 2.657560 2.205070 -0.186922 +v 2.855560 2.400000 -0.166676 +v 1.700000 1.363890 -0.275005 +v 2.072380 1.425210 -0.262351 +v 2.290120 1.572020 -0.230716 +v 2.409720 1.773610 -0.189590 +v 2.487650 1.999280 -0.148464 +v 2.580400 2.218310 -0.116829 +v 2.744440 2.400000 -0.104176 +v 2.749070 2.431250 -0.000009 +v 2.796410 2.431930 0.101023 +v 2.792590 2.450000 -0.000009 +v 2.839780 2.451230 0.092969 +v 2.825000 2.456250 -0.000009 +v 2.869680 2.457810 0.082022 +v 2.881210 2.451540 0.070207 +v 2.840740 2.450000 -0.000009 +v 2.869490 2.432310 0.059549 +v 2.834260 2.431250 -0.000009 +v 2.829630 2.400000 0.052074 +v 2.800000 2.400000 -0.000008 +v 2.914740 2.433610 0.161565 +v 2.957750 2.454320 0.148139 +v 2.981370 2.461720 0.129158 +v 2.982370 2.455400 0.107398 +v 2.957560 2.434960 0.085639 +v 2.903700 2.400000 0.066658 +v 3.068580 2.435810 0.181675 +v 3.111110 2.458330 0.165963 +v 3.126560 2.466800 0.142960 +v 3.113890 2.460420 0.115269 +v 3.072050 2.438410 0.085495 +v 3.000000 2.400000 0.056241 +v 3.222410 2.438000 0.161411 +v 3.264470 2.462350 0.146905 +v 3.271760 2.471870 0.124991 +v 3.245400 2.465430 0.097522 +v 3.186540 2.441860 0.066349 +v 3.096300 2.400000 0.033324 +v 3.340750 2.439690 0.100830 +v 3.382440 2.465430 0.091426 +v 3.383450 2.475780 0.076814 +v 3.346570 2.469290 0.057861 +v 3.274610 2.444510 0.035437 +v 3.170370 2.400000 0.010408 +v 3.388080 2.440360 -0.000009 +v 3.429630 2.466670 -0.000009 +v 3.428130 2.477340 -0.000009 +v 3.387040 2.470830 -0.000009 +v 3.309840 2.445570 -0.000009 +v 3.200000 2.400000 -0.000008 +v 3.340750 2.439690 -0.101089 +v 3.382440 2.465430 -0.093373 +v 3.383450 2.475780 -0.083342 +v 3.346570 2.469290 -0.073312 +v 3.274610 2.444510 -0.065595 +v 3.170370 2.400000 -0.062509 +v 3.222410 2.438000 -0.161737 +v 3.264470 2.462350 -0.149392 +v 3.271760 2.471870 -0.133342 +v 3.245400 2.465430 -0.117293 +v 3.186540 2.441860 -0.104947 +v 3.096300 2.400000 -0.100009 +v 3.068580 2.435810 -0.181953 +v 3.111110 2.458330 -0.168065 +v 3.126560 2.466800 -0.150009 +v 3.113890 2.460420 -0.131953 +v 3.072050 2.438410 -0.118065 +v 3.000000 2.400000 -0.112509 +v 2.914740 2.433610 -0.161737 +v 2.957750 2.454320 -0.149392 +v 2.981370 2.461720 -0.133342 +v 2.982370 2.455400 -0.117293 +v 2.957560 2.434960 -0.104947 +v 2.903700 2.400000 -0.100009 +v 2.796410 2.431930 -0.101089 +v 2.839780 2.451230 -0.093373 +v 2.869680 2.457810 -0.083342 +v 2.881210 2.451540 -0.073312 +v 2.869490 2.432310 -0.065595 +v 2.829630 2.400000 -0.062509 +v 0.278704 3.127080 -0.000011 +v 0.000000 3.150000 -0.000011 +v 0.268946 3.127080 0.075067 +v 0.241285 3.127080 0.141920 +v 0.198140 3.127080 0.198129 +v 0.141931 3.127080 0.241274 +v 0.075078 3.127080 0.268935 +v 0.000000 3.127080 0.278693 +v -0.075078 3.127080 0.268935 +v -0.141931 3.127080 0.241274 +v -0.198140 3.127080 0.198129 +v -0.241285 3.127080 0.141920 +v -0.268946 3.127080 0.075067 +v -0.278704 3.127080 -0.000011 +v -0.268946 3.127080 -0.075089 +v -0.241285 3.127080 -0.141942 +v -0.198140 3.127080 -0.198151 +v -0.141931 3.127080 -0.241296 +v -0.075078 3.127080 -0.268957 +v 0.000000 3.127080 -0.278715 +v 0.075078 3.127080 -0.268957 +v 0.141931 3.127080 -0.241296 +v 0.198140 3.127080 -0.198151 +v 0.241285 3.127080 -0.141942 +v 0.268946 3.127080 -0.075089 +v 0.350254 3.066670 0.097760 +v 0.362963 3.066670 -0.000011 +v 0.313617 2.981250 0.087518 +v 0.325000 2.981250 -0.000011 +v 0.228728 2.883330 0.063793 +v 0.237037 2.883330 -0.000010 +v 0.165279 2.785420 0.046035 +v 0.171296 2.785420 -0.000010 +v 0.314228 3.066670 0.184824 +v 0.281352 2.981250 0.165470 +v 0.205180 2.883330 0.120636 +v 0.148234 2.785420 0.087096 +v 0.258037 3.066670 0.258027 +v 0.231031 2.981250 0.231020 +v 0.168463 2.883330 0.168452 +v 0.121672 2.785420 0.121662 +v 0.184834 3.066670 0.314218 +v 0.165481 2.981250 0.281341 +v 0.120647 2.883330 0.205169 +v 0.087106 2.785420 0.148224 +v 0.097771 3.066670 0.350244 +v 0.087529 2.981250 0.313606 +v 0.063803 2.883330 0.228717 +v 0.046045 2.785420 0.165269 +v 0.000000 3.066670 0.362953 +v 0.000000 2.981250 0.324989 +v 0.000000 2.883330 0.237026 +v 0.000000 2.785420 0.171286 +v -0.097771 3.066670 0.350244 +v -0.087529 2.981250 0.313606 +v -0.063803 2.883330 0.228717 +v -0.046045 2.785420 0.165269 +v -0.184834 3.066670 0.314218 +v -0.165481 2.981250 0.281341 +v -0.120647 2.883330 0.205169 +v -0.087106 2.785420 0.148224 +v -0.258037 3.066670 0.258027 +v -0.231031 2.981250 0.231020 +v -0.168463 2.883330 0.168452 +v -0.121672 2.785420 0.121662 +v -0.314228 3.066670 0.184824 +v -0.281352 2.981250 0.165470 +v -0.205180 2.883330 0.120636 +v -0.148234 2.785420 0.087096 +v -0.350254 3.066670 0.097760 +v -0.313617 2.981250 0.087518 +v -0.228728 2.883330 0.063793 +v -0.165279 2.785420 0.046035 +v -0.362963 3.066670 -0.000011 +v -0.325000 2.981250 -0.000011 +v -0.237037 2.883330 -0.000010 +v -0.171296 2.785420 -0.000010 +v -0.350254 3.066670 -0.097782 +v -0.313617 2.981250 -0.087540 +v -0.228728 2.883330 -0.063813 +v -0.165279 2.785420 -0.046055 +v -0.314228 3.066670 -0.184844 +v -0.281352 2.981250 -0.165492 +v -0.205180 2.883330 -0.120658 +v -0.148234 2.785420 -0.087116 +v -0.258037 3.066670 -0.258047 +v -0.231031 2.981250 -0.231042 +v -0.168463 2.883330 -0.168474 +v -0.121672 2.785420 -0.121682 +v -0.184834 3.066670 -0.314238 +v -0.165481 2.981250 -0.281363 +v -0.120647 2.883330 -0.205191 +v -0.087106 2.785420 -0.148244 +v -0.097771 3.066670 -0.350264 +v -0.087529 2.981250 -0.313628 +v -0.063803 2.883330 -0.228739 +v -0.046045 2.785420 -0.165289 +v 0.000000 3.066670 -0.362973 +v 0.000000 2.981250 -0.325011 +v 0.000000 2.883330 -0.237048 +v 0.000000 2.785420 -0.171306 +v 0.097771 3.066670 -0.350264 +v 0.087529 2.981250 -0.313628 +v 0.063803 2.883330 -0.228739 +v 0.046045 2.785420 -0.165289 +v 0.184834 3.066670 -0.314238 +v 0.165481 2.981250 -0.281363 +v 0.120647 2.883330 -0.205191 +v 0.087106 2.785420 -0.148244 +v 0.258037 3.066670 -0.258047 +v 0.231031 2.981250 -0.231042 +v 0.168463 2.883330 -0.168474 +v 0.121672 2.785420 -0.121682 +v 0.314228 3.066670 -0.184844 +v 0.281352 2.981250 -0.165492 +v 0.205180 2.883330 -0.120658 +v 0.148234 2.785420 -0.087116 +v 0.350254 3.066670 -0.097782 +v 0.313617 2.981250 -0.087540 +v 0.228728 2.883330 -0.063813 +v 0.165279 2.785420 -0.046055 +vn 0.025666 -0.999664 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.024781 -0.999664 -0.006623 +vn 0.022156 -0.999664 -0.012787 +vn 0.018067 -0.999664 -0.018067 +vn 0.012787 -0.999664 -0.022126 +vn 0.006623 -0.999664 -0.024751 +vn 0.000000 -0.999664 -0.025666 +vn -0.006623 -0.999664 -0.024751 +vn -0.012787 -0.999664 -0.022126 +vn -0.018067 -0.999664 -0.018067 +vn -0.022156 -0.999664 -0.012787 +vn -0.024781 -0.999664 -0.006623 +vn -0.025666 -0.999664 0.000000 +vn -0.024781 -0.999664 0.006623 +vn -0.022156 -0.999664 0.012787 +vn -0.018067 -0.999664 0.018067 +vn -0.012787 -0.999664 0.022156 +vn -0.006623 -0.999664 0.024781 +vn 0.000000 -0.999664 0.025666 +vn 0.006623 -0.999664 0.024781 +vn 0.012787 -0.999664 0.022156 +vn 0.018067 -0.999664 0.018067 +vn 0.022156 -0.999664 0.012787 +vn 0.024781 -0.999664 0.006623 +vn -0.946562 -0.322459 0.000000 +vn -0.913999 -0.322947 -0.245491 +vn -0.958617 -0.122227 -0.257057 +vn -0.992523 -0.122013 0.000000 +vn -0.832057 0.554674 0.000000 +vn -0.803217 0.555376 -0.215308 +vn -0.048616 0.998810 0.000000 +vn -0.046205 0.998840 -0.012726 +vn 0.525376 0.839106 0.140843 +vn 0.544267 0.838893 0.000000 +vn 0.756340 0.621845 0.202918 +vn 0.783471 0.621387 0.000000 +vn 0.850551 0.473769 0.228217 +vn 0.880886 0.473281 0.000000 +vn -0.818842 -0.323435 -0.474166 +vn -0.859004 -0.122410 -0.497085 +vn -0.719657 0.555559 -0.416425 +vn -0.041749 0.998810 -0.024415 +vn 0.470107 0.839625 0.272011 +vn 0.677236 0.622608 0.391980 +vn 0.761803 0.474471 0.440962 +vn -0.669027 -0.323679 -0.669027 +vn -0.701773 -0.122440 -0.701773 +vn -0.587878 0.555650 -0.587878 +vn -0.034272 0.998810 -0.034272 +vn 0.383831 0.839808 0.383831 +vn 0.553148 0.622913 0.553148 +vn 0.622303 0.474776 0.622303 +vn -0.474166 -0.323435 -0.818842 +vn -0.497085 -0.122410 -0.859004 +vn -0.416425 0.555528 -0.719657 +vn -0.024415 0.998810 -0.041749 +vn 0.272011 0.839625 0.470077 +vn 0.392010 0.622608 0.677236 +vn 0.440962 0.474502 0.761803 +vn -0.245460 -0.322977 -0.913999 +vn -0.257057 -0.122257 -0.958617 +vn -0.215339 0.555193 -0.803308 +vn -0.012726 0.998840 -0.046236 +vn 0.140873 0.839076 0.525437 +vn 0.202918 0.621906 0.756310 +vn 0.228217 0.473769 0.850551 +vn 0.000000 -0.322489 -0.946562 +vn 0.000000 -0.122044 -0.992523 +vn 0.000000 0.554491 -0.832179 +vn 0.000000 0.998779 -0.048799 +vn 0.000000 0.838893 0.544267 +vn 0.000000 0.621387 0.783471 +vn 0.000000 0.473281 0.880886 +vn 0.245460 -0.322977 -0.913999 +vn 0.257057 -0.122257 -0.958617 +vn 0.215339 0.555193 -0.803308 +vn 0.012726 0.998840 -0.046236 +vn -0.140873 0.839076 0.525437 +vn -0.202918 0.621906 0.756310 +vn -0.228217 0.473769 0.850551 +vn 0.474166 -0.323435 -0.818842 +vn 0.497085 -0.122410 -0.859004 +vn 0.416425 0.555528 -0.719657 +vn 0.024415 0.998810 -0.041749 +vn -0.272011 0.839625 0.470077 +vn -0.392010 0.622608 0.677236 +vn -0.440962 0.474502 0.761803 +vn 0.669027 -0.323679 -0.669027 +vn 0.701773 -0.122440 -0.701773 +vn 0.587878 0.555650 -0.587878 +vn 0.034272 0.998810 -0.034272 +vn -0.383831 0.839808 0.383831 +vn -0.553148 0.622913 0.553148 +vn -0.622303 0.474776 0.622303 +vn 0.818842 -0.323435 -0.474166 +vn 0.859004 -0.122410 -0.497085 +vn 0.719657 0.555559 -0.416425 +vn 0.041749 0.998810 -0.024415 +vn -0.470107 0.839625 0.272011 +vn -0.677236 0.622608 0.391980 +vn -0.761803 0.474471 0.440962 +vn 0.913999 -0.322947 -0.245491 +vn 0.958617 -0.122227 -0.257057 +vn 0.803217 0.555376 -0.215308 +vn 0.046205 0.998840 -0.012726 +vn -0.525376 0.839106 0.140843 +vn -0.756340 0.621845 0.202918 +vn -0.850551 0.473769 0.228217 +vn 0.946562 -0.322459 0.000000 +vn 0.992523 -0.122013 0.000000 +vn 0.832057 0.554674 0.000000 +vn 0.048616 0.998810 0.000000 +vn -0.544267 0.838893 0.000000 +vn -0.783471 0.621387 0.000000 +vn -0.880886 0.473281 0.000000 +vn 0.913999 -0.322947 0.245491 +vn 0.958617 -0.122227 0.257057 +vn 0.803217 0.555376 0.215308 +vn 0.046205 0.998840 0.012726 +vn -0.525376 0.839106 -0.140843 +vn -0.756340 0.621845 -0.202918 +vn -0.850551 0.473769 -0.228217 +vn 0.818842 -0.323435 0.474166 +vn 0.859004 -0.122410 0.497085 +vn 0.719657 0.555559 0.416425 +vn 0.041749 0.998810 0.024415 +vn -0.470107 0.839625 -0.272011 +vn -0.677236 0.622608 -0.391980 +vn -0.761803 0.474471 -0.440962 +vn 0.669027 -0.323679 0.669027 +vn 0.701773 -0.122440 0.701773 +vn 0.587878 0.555650 0.587878 +vn 0.034272 0.998810 0.034272 +vn -0.383831 0.839808 -0.383831 +vn -0.553148 0.622913 -0.553148 +vn -0.622303 0.474776 -0.622303 +vn 0.474166 -0.323435 0.818842 +vn 0.497085 -0.122410 0.859004 +vn 0.416425 0.555559 0.719657 +vn 0.024415 0.998810 0.041749 +vn -0.272011 0.839625 -0.470107 +vn -0.391980 0.622608 -0.677236 +vn -0.440962 0.474471 -0.761803 +vn 0.245460 -0.322977 0.913999 +vn 0.257027 -0.122257 0.958617 +vn 0.215369 0.555193 0.803308 +vn 0.012726 0.998840 0.046236 +vn -0.140873 0.839045 -0.525498 +vn -0.202918 0.621845 -0.756371 +vn -0.228187 0.473769 -0.850551 +vn 0.000000 -0.322459 0.946562 +vn 0.000000 -0.122013 0.992523 +vn 0.000000 0.554674 0.832057 +vn 0.000000 0.998810 0.048616 +vn 0.000000 0.838893 -0.544267 +vn 0.000000 0.621387 -0.783471 +vn 0.000000 0.473281 -0.880886 +vn -0.245460 -0.322977 0.913999 +vn -0.257027 -0.122257 0.958617 +vn -0.215369 0.555193 0.803308 +vn -0.012726 0.998840 0.046236 +vn 0.140873 0.839045 -0.525498 +vn 0.202918 0.621845 -0.756371 +vn 0.228187 0.473769 -0.850551 +vn -0.474166 -0.323435 0.818842 +vn -0.497085 -0.122410 0.859004 +vn -0.416425 0.555559 0.719657 +vn -0.024415 0.998810 0.041749 +vn 0.272011 0.839625 -0.470107 +vn 0.391980 0.622608 -0.677236 +vn 0.440962 0.474471 -0.761803 +vn -0.669027 -0.323679 0.669027 +vn -0.701773 -0.122440 0.701773 +vn -0.587878 0.555650 0.587878 +vn -0.034272 0.998810 0.034272 +vn 0.383831 0.839808 -0.383831 +vn 0.553148 0.622913 -0.553148 +vn 0.622303 0.474776 -0.622303 +vn -0.818842 -0.323435 0.474166 +vn -0.859004 -0.122410 0.497085 +vn -0.719657 0.555559 0.416425 +vn -0.041749 0.998810 0.024415 +vn 0.470107 0.839625 -0.272011 +vn 0.677236 0.622608 -0.391980 +vn 0.761803 0.474471 -0.440962 +vn -0.913999 -0.322947 0.245491 +vn -0.958617 -0.122227 0.257057 +vn -0.803217 0.555376 0.215308 +vn -0.046205 0.998840 0.012726 +vn 0.525376 0.839106 -0.140843 +vn 0.756340 0.621845 -0.202918 +vn 0.850551 0.473769 -0.228217 +vn 0.877041 0.418744 0.235298 +vn 0.908292 0.418256 0.000000 +vn 0.888668 0.391644 0.238441 +vn 0.920286 0.391156 0.000000 +vn 0.907315 0.342753 0.243446 +vn 0.939543 0.342357 0.000000 +vn 0.931028 0.265908 0.249855 +vn 0.964080 0.265542 0.000000 +vn 0.954558 0.152104 0.256172 +vn 0.988372 0.151891 0.000000 +vn 0.964782 -0.045717 0.258980 +vn 0.998932 -0.045656 0.000000 +vn 0.785638 0.419416 0.454756 +vn 0.796075 0.392285 0.460799 +vn 0.812830 0.343333 0.470504 +vn 0.834162 0.266366 0.482864 +vn 0.855312 0.152409 0.495132 +vn 0.864498 -0.045808 0.500504 +vn 0.641804 0.419691 0.641804 +vn 0.650349 0.392529 0.650349 +vn 0.664052 0.343577 0.664052 +vn 0.681509 0.266579 0.681509 +vn 0.698813 0.152501 0.698813 +vn 0.706351 -0.045869 0.706351 +vn 0.454756 0.419416 0.785638 +vn 0.460799 0.392285 0.796075 +vn 0.470504 0.343333 0.812830 +vn 0.482864 0.266396 0.834162 +vn 0.495132 0.152409 0.855312 +vn 0.500504 -0.045808 0.864498 +vn 0.235298 0.418744 0.877041 +vn 0.238441 0.391644 0.888668 +vn 0.243446 0.342753 0.907315 +vn 0.249825 0.265908 0.931028 +vn 0.256172 0.152135 0.954558 +vn 0.258980 -0.045717 0.964782 +vn 0.000000 0.418256 0.908292 +vn 0.000000 0.391156 0.920286 +vn 0.000000 0.342357 0.939543 +vn 0.000000 0.265572 0.964080 +vn 0.000000 0.151921 0.988372 +vn 0.000000 -0.045656 0.998932 +vn -0.235298 0.418744 0.877041 +vn -0.238441 0.391644 0.888668 +vn -0.243446 0.342753 0.907315 +vn -0.249825 0.265908 0.931028 +vn -0.256172 0.152135 0.954558 +vn -0.258980 -0.045717 0.964782 +vn -0.454756 0.419416 0.785638 +vn -0.460799 0.392285 0.796075 +vn -0.470504 0.343333 0.812830 +vn -0.482864 0.266396 0.834162 +vn -0.495132 0.152409 0.855312 +vn -0.500504 -0.045808 0.864498 +vn -0.641804 0.419691 0.641804 +vn -0.650349 0.392529 0.650349 +vn -0.664052 0.343577 0.664052 +vn -0.681509 0.266579 0.681509 +vn -0.698813 0.152501 0.698813 +vn -0.706351 -0.045869 0.706351 +vn -0.785638 0.419416 0.454756 +vn -0.796075 0.392285 0.460799 +vn -0.812830 0.343333 0.470504 +vn -0.834162 0.266366 0.482864 +vn -0.855312 0.152409 0.495132 +vn -0.864498 -0.045808 0.500504 +vn -0.877041 0.418744 0.235298 +vn -0.888668 0.391644 0.238441 +vn -0.907315 0.342753 0.243446 +vn -0.931028 0.265908 0.249825 +vn -0.954558 0.152104 0.256172 +vn -0.964782 -0.045717 0.258980 +vn -0.908292 0.418256 0.000000 +vn -0.920286 0.391156 0.000000 +vn -0.939543 0.342357 0.000000 +vn -0.964080 0.265542 0.000000 +vn -0.988372 0.151891 0.000000 +vn -0.998932 -0.045656 0.000000 +vn -0.877041 0.418744 -0.235298 +vn -0.888668 0.391644 -0.238441 +vn -0.907315 0.342753 -0.243446 +vn -0.931028 0.265877 -0.249855 +vn -0.954558 0.152104 -0.256172 +vn -0.964782 -0.045717 -0.258980 +vn -0.785638 0.419416 -0.454756 +vn -0.796075 0.392285 -0.460799 +vn -0.812830 0.343333 -0.470504 +vn -0.834162 0.266366 -0.482864 +vn -0.855312 0.152379 -0.495132 +vn -0.864498 -0.045808 -0.500504 +vn -0.641804 0.419691 -0.641804 +vn -0.650349 0.392529 -0.650349 +vn -0.664052 0.343547 -0.664052 +vn -0.681509 0.266549 -0.681509 +vn -0.698813 0.152470 -0.698813 +vn -0.706351 -0.045869 -0.706351 +vn -0.454756 0.419416 -0.785638 +vn -0.460768 0.392285 -0.796075 +vn -0.470504 0.343333 -0.812830 +vn -0.482864 0.266366 -0.834162 +vn -0.495132 0.152379 -0.855312 +vn -0.500504 -0.045808 -0.864498 +vn -0.235298 0.418744 -0.877041 +vn -0.238441 0.391644 -0.888668 +vn -0.243446 0.342753 -0.907315 +vn -0.249855 0.265877 -0.931059 +vn -0.256172 0.152074 -0.954558 +vn -0.258980 -0.045717 -0.964782 +vn 0.000000 0.418256 -0.908292 +vn 0.000000 0.391156 -0.920286 +vn 0.000000 0.342357 -0.939543 +vn 0.000000 0.265511 -0.964080 +vn 0.000000 0.151891 -0.988372 +vn 0.000000 -0.045656 -0.998932 +vn 0.235298 0.418744 -0.877041 +vn 0.238441 0.391644 -0.888668 +vn 0.243446 0.342753 -0.907315 +vn 0.249855 0.265877 -0.931059 +vn 0.256172 0.152074 -0.954558 +vn 0.258980 -0.045717 -0.964782 +vn 0.454756 0.419416 -0.785638 +vn 0.460768 0.392285 -0.796075 +vn 0.470504 0.343333 -0.812830 +vn 0.482864 0.266366 -0.834162 +vn 0.495132 0.152379 -0.855312 +vn 0.500504 -0.045808 -0.864498 +vn 0.641804 0.419691 -0.641804 +vn 0.650349 0.392529 -0.650349 +vn 0.664052 0.343547 -0.664052 +vn 0.681509 0.266549 -0.681509 +vn 0.698813 0.152470 -0.698813 +vn 0.706351 -0.045869 -0.706351 +vn 0.785638 0.419416 -0.454756 +vn 0.796075 0.392285 -0.460799 +vn 0.812830 0.343333 -0.470504 +vn 0.834162 0.266366 -0.482864 +vn 0.855312 0.152379 -0.495132 +vn 0.864498 -0.045808 -0.500504 +vn 0.877041 0.418744 -0.235298 +vn 0.888668 0.391644 -0.238441 +vn 0.907315 0.342753 -0.243446 +vn 0.931028 0.265908 -0.249825 +vn 0.954558 0.152104 -0.256172 +vn 0.964782 -0.045717 -0.258980 +vn 0.912839 -0.326609 0.245003 +vn 0.945250 -0.326273 0.000000 +vn 0.795892 -0.566485 0.213538 +vn 0.824396 -0.565996 0.000000 +vn 0.687399 -0.702445 0.184393 +vn 0.712180 -0.701987 0.000000 +vn 0.630146 -0.757805 0.169012 +vn 0.652974 -0.757347 0.000000 +vn 0.698752 -0.690329 0.187445 +vn 0.724021 -0.689749 0.000000 +vn 0.855861 -0.463454 0.229530 +vn 0.886380 -0.462905 0.000000 +vn 0.817774 -0.327158 0.473434 +vn 0.712729 -0.567248 0.412549 +vn 0.615375 -0.703146 0.356151 +vn 0.564043 -0.758446 0.326456 +vn 0.625660 -0.690939 0.362102 +vn 0.766625 -0.464125 0.443678 +vn 0.668111 -0.327403 0.668111 +vn 0.582171 -0.567522 0.582171 +vn 0.502579 -0.703421 0.502579 +vn 0.460646 -0.758660 0.460646 +vn 0.510971 -0.691183 0.510971 +vn 0.626209 -0.464370 0.626209 +vn 0.473434 -0.327158 0.817774 +vn 0.412549 -0.567248 0.712729 +vn 0.356151 -0.703146 0.615375 +vn 0.326456 -0.758446 0.564043 +vn 0.362102 -0.690939 0.625660 +vn 0.443678 -0.464125 0.766625 +vn 0.245003 -0.326609 0.912839 +vn 0.213538 -0.566485 0.795892 +vn 0.184393 -0.702445 0.687399 +vn 0.169012 -0.757805 0.630146 +vn 0.187414 -0.690329 0.698752 +vn 0.229530 -0.463454 0.855831 +vn 0.000000 -0.326273 0.945250 +vn 0.000000 -0.565996 0.824396 +vn 0.000000 -0.701987 0.712180 +vn 0.000000 -0.757347 0.652974 +vn 0.000000 -0.689749 0.724021 +vn 0.000000 -0.462905 0.886380 +vn -0.245003 -0.326609 0.912839 +vn -0.213538 -0.566485 0.795892 +vn -0.184393 -0.702445 0.687399 +vn -0.169012 -0.757805 0.630146 +vn -0.187414 -0.690329 0.698752 +vn -0.229530 -0.463454 0.855831 +vn -0.473434 -0.327158 0.817774 +vn -0.412549 -0.567248 0.712729 +vn -0.356151 -0.703146 0.615375 +vn -0.326456 -0.758446 0.564043 +vn -0.362102 -0.690939 0.625660 +vn -0.443678 -0.464125 0.766625 +vn -0.668111 -0.327403 0.668111 +vn -0.582171 -0.567522 0.582171 +vn -0.502579 -0.703421 0.502579 +vn -0.460646 -0.758660 0.460646 +vn -0.510971 -0.691183 0.510971 +vn -0.626209 -0.464370 0.626209 +vn -0.817774 -0.327158 0.473434 +vn -0.712729 -0.567248 0.412549 +vn -0.615375 -0.703146 0.356151 +vn -0.564043 -0.758446 0.326456 +vn -0.625660 -0.690939 0.362102 +vn -0.766625 -0.464125 0.443678 +vn -0.912839 -0.326609 0.245003 +vn -0.795892 -0.566485 0.213538 +vn -0.687399 -0.702445 0.184393 +vn -0.630146 -0.757805 0.169012 +vn -0.698752 -0.690329 0.187445 +vn -0.855861 -0.463454 0.229530 +vn -0.945250 -0.326273 0.000000 +vn -0.824396 -0.565996 0.000000 +vn -0.712180 -0.701987 0.000000 +vn -0.652974 -0.757347 0.000000 +vn -0.724021 -0.689749 0.000000 +vn -0.886380 -0.462905 0.000000 +vn -0.912839 -0.326609 -0.245003 +vn -0.795892 -0.566485 -0.213538 +vn -0.687399 -0.702445 -0.184393 +vn -0.630146 -0.757805 -0.169012 +vn -0.698752 -0.690329 -0.187414 +vn -0.855831 -0.463454 -0.229530 +vn -0.817774 -0.327158 -0.473434 +vn -0.712729 -0.567248 -0.412549 +vn -0.615375 -0.703146 -0.356151 +vn -0.564043 -0.758446 -0.326456 +vn -0.625660 -0.690939 -0.362102 +vn -0.766625 -0.464125 -0.443678 +vn -0.668111 -0.327403 -0.668111 +vn -0.582171 -0.567522 -0.582171 +vn -0.502579 -0.703421 -0.502579 +vn -0.460646 -0.758660 -0.460646 +vn -0.510971 -0.691183 -0.510971 +vn -0.626209 -0.464370 -0.626209 +vn -0.473434 -0.327158 -0.817774 +vn -0.412549 -0.567248 -0.712729 +vn -0.356151 -0.703146 -0.615375 +vn -0.326456 -0.758446 -0.564043 +vn -0.362102 -0.690939 -0.625660 +vn -0.443678 -0.464125 -0.766625 +vn -0.245003 -0.326609 -0.912839 +vn -0.213538 -0.566485 -0.795892 +vn -0.184393 -0.702445 -0.687399 +vn -0.169012 -0.757805 -0.630146 +vn -0.187414 -0.690329 -0.698752 +vn -0.229530 -0.463454 -0.855831 +vn 0.000000 -0.326273 -0.945250 +vn 0.000000 -0.565996 -0.824396 +vn 0.000000 -0.701987 -0.712149 +vn 0.000000 -0.757347 -0.652974 +vn 0.000000 -0.689749 -0.724021 +vn 0.000000 -0.462905 -0.886380 +vn 0.245003 -0.326609 -0.912839 +vn 0.213538 -0.566485 -0.795892 +vn 0.184393 -0.702445 -0.687399 +vn 0.169012 -0.757805 -0.630146 +vn 0.187414 -0.690329 -0.698752 +vn 0.229530 -0.463454 -0.855831 +vn 0.473434 -0.327158 -0.817774 +vn 0.412549 -0.567248 -0.712729 +vn 0.356151 -0.703146 -0.615375 +vn 0.326456 -0.758446 -0.564043 +vn 0.362102 -0.690939 -0.625660 +vn 0.443678 -0.464125 -0.766625 +vn 0.668111 -0.327403 -0.668111 +vn 0.582171 -0.567522 -0.582171 +vn 0.502579 -0.703421 -0.502579 +vn 0.460646 -0.758660 -0.460646 +vn 0.510971 -0.691183 -0.510971 +vn 0.626209 -0.464370 -0.626209 +vn 0.817774 -0.327158 -0.473434 +vn 0.712729 -0.567248 -0.412549 +vn 0.615375 -0.703146 -0.356151 +vn 0.564043 -0.758446 -0.326456 +vn 0.625660 -0.690939 -0.362102 +vn 0.766625 -0.464125 -0.443678 +vn 0.912839 -0.326609 -0.245003 +vn 0.795892 -0.566485 -0.213538 +vn 0.687399 -0.702445 -0.184393 +vn 0.630146 -0.757805 -0.169012 +vn 0.698752 -0.690329 -0.187414 +vn 0.855831 -0.463454 -0.229530 +vn 0.068667 -0.997620 0.000000 +vn 0.066256 -0.997620 -0.017731 +vn 0.157170 -0.987548 0.000000 +vn 0.151677 -0.987579 -0.040620 +vn 0.373150 -0.927763 0.000000 +vn 0.360149 -0.927885 -0.096469 +vn 0.789148 -0.614154 0.000000 +vn 0.762017 -0.614399 -0.204474 +vn 0.059236 -0.997650 -0.034242 +vn 0.135624 -0.987640 -0.078463 +vn 0.322153 -0.928129 -0.186346 +vn 0.682333 -0.615131 -0.394971 +vn 0.048341 -0.997650 -0.048341 +vn 0.110691 -0.987640 -0.110691 +vn 0.262947 -0.928251 -0.262947 +vn 0.557329 -0.615375 -0.557329 +vn 0.034272 -0.997650 -0.059236 +vn 0.078463 -0.987640 -0.135624 +vn 0.186377 -0.928129 -0.322153 +vn 0.394971 -0.615131 -0.682333 +vn 0.017731 -0.997620 -0.066256 +vn 0.040620 -0.987579 -0.151677 +vn 0.096469 -0.927885 -0.360118 +vn 0.204505 -0.614399 -0.762017 +vn 0.000000 -0.997620 -0.068667 +vn 0.000000 -0.987548 -0.157170 +vn 0.000000 -0.927763 -0.373150 +vn 0.000000 -0.614154 -0.789148 +vn -0.017731 -0.997620 -0.066256 +vn -0.040620 -0.987579 -0.151677 +vn -0.096469 -0.927885 -0.360118 +vn -0.204505 -0.614399 -0.762017 +vn -0.034272 -0.997650 -0.059236 +vn -0.078463 -0.987640 -0.135624 +vn -0.186377 -0.928129 -0.322153 +vn -0.394971 -0.615131 -0.682333 +vn -0.048341 -0.997650 -0.048341 +vn -0.110691 -0.987640 -0.110691 +vn -0.262947 -0.928251 -0.262947 +vn -0.557329 -0.615375 -0.557329 +vn -0.059236 -0.997650 -0.034242 +vn -0.135624 -0.987640 -0.078463 +vn -0.322153 -0.928129 -0.186346 +vn -0.682333 -0.615131 -0.394971 +vn -0.066256 -0.997620 -0.017731 +vn -0.151677 -0.987579 -0.040620 +vn -0.360149 -0.927885 -0.096469 +vn -0.762017 -0.614399 -0.204474 +vn -0.068667 -0.997620 0.000000 +vn -0.157170 -0.987548 0.000000 +vn -0.373150 -0.927763 0.000000 +vn -0.789148 -0.614154 0.000000 +vn -0.066256 -0.997620 0.017731 +vn -0.151677 -0.987579 0.040620 +vn -0.360118 -0.927885 0.096469 +vn -0.762017 -0.614399 0.204505 +vn -0.059236 -0.997650 0.034272 +vn -0.135624 -0.987640 0.078463 +vn -0.322153 -0.928129 0.186377 +vn -0.682333 -0.615131 0.394971 +vn -0.048341 -0.997650 0.048341 +vn -0.110691 -0.987640 0.110691 +vn -0.262947 -0.928251 0.262947 +vn -0.557329 -0.615375 0.557329 +vn -0.034272 -0.997650 0.059236 +vn -0.078463 -0.987640 0.135624 +vn -0.186377 -0.928129 0.322153 +vn -0.394971 -0.615131 0.682333 +vn -0.017731 -0.997620 0.066256 +vn -0.040620 -0.987579 0.151677 +vn -0.096469 -0.927885 0.360149 +vn -0.204474 -0.614399 0.762017 +vn 0.000000 -0.997620 0.068667 +vn 0.000000 -0.987548 0.157170 +vn 0.000000 -0.927763 0.373150 +vn 0.000000 -0.614154 0.789148 +vn 0.017731 -0.997620 0.066256 +vn 0.040620 -0.987579 0.151677 +vn 0.096469 -0.927885 0.360149 +vn 0.204474 -0.614399 0.762017 +vn 0.034272 -0.997650 0.059236 +vn 0.078463 -0.987640 0.135624 +vn 0.186377 -0.928129 0.322153 +vn 0.394971 -0.615131 0.682333 +vn 0.048341 -0.997650 0.048341 +vn 0.110691 -0.987640 0.110691 +vn 0.262947 -0.928251 0.262947 +vn 0.557329 -0.615375 0.557329 +vn 0.059236 -0.997650 0.034272 +vn 0.135624 -0.987640 0.078463 +vn 0.322153 -0.928129 0.186377 +vn 0.682333 -0.615101 0.394971 +vn 0.066256 -0.997620 0.017731 +vn 0.151677 -0.987579 0.040620 +vn 0.360118 -0.927885 0.096469 +vn 0.762017 -0.614399 0.204505 +vn 0.692129 0.697470 0.185583 +vn 0.717063 0.696982 0.000000 +vn 0.915586 0.318766 0.245064 +vn 0.947905 0.318522 0.000000 +vn 0.620045 0.697653 0.358837 +vn 0.820429 0.318979 0.474410 +vn 0.506546 0.697684 0.506546 +vn 0.670125 0.319041 0.670125 +vn 0.358837 0.697653 0.620045 +vn 0.474410 0.318979 0.820429 +vn 0.185583 0.697470 0.692129 +vn 0.245064 0.318766 0.915586 +vn 0.000000 0.696982 0.717063 +vn 0.000000 0.318522 0.947905 +vn -0.185583 0.697470 0.692129 +vn -0.245064 0.318766 0.915586 +vn -0.358837 0.697653 0.620045 +vn -0.474410 0.318979 0.820429 +vn -0.506546 0.697684 0.506546 +vn -0.670125 0.319041 0.670125 +vn -0.620045 0.697653 0.358837 +vn -0.820429 0.318979 0.474410 +vn -0.692129 0.697470 0.185583 +vn -0.915586 0.318766 0.245064 +vn -0.717063 0.696982 0.000000 +vn -0.947905 0.318522 0.000000 +vn -0.692129 0.697470 -0.185583 +vn -0.915586 0.318766 -0.245064 +vn -0.620045 0.697653 -0.358837 +vn -0.820429 0.318979 -0.474410 +vn -0.506546 0.697684 -0.506546 +vn -0.670125 0.319041 -0.670125 +vn -0.358837 0.697653 -0.620045 +vn -0.474410 0.318979 -0.820429 +vn -0.185583 0.697470 -0.692129 +vn -0.245064 0.318766 -0.915586 +vn 0.000000 0.696982 -0.717063 +vn 0.000000 0.318522 -0.947905 +vn 0.185583 0.697470 -0.692129 +vn 0.245064 0.318766 -0.915586 +vn 0.358837 0.697653 -0.620045 +vn 0.474410 0.318979 -0.820429 +vn 0.506546 0.697684 -0.506546 +vn 0.670125 0.319041 -0.670125 +vn 0.620045 0.697653 -0.358837 +vn 0.820429 0.318979 -0.474410 +vn 0.692129 0.697470 -0.185583 +vn 0.915586 0.318766 -0.245064 +vn 0.282083 0.956389 0.075686 +vn 0.292520 0.956236 0.000000 +vn 0.171606 0.984069 0.046022 +vn 0.177953 0.984008 0.000000 +vn 0.153264 0.987304 0.041078 +vn 0.158879 0.987274 0.000000 +vn 0.210059 0.976043 0.056276 +vn 0.217719 0.975982 0.000000 +vn 0.487197 0.863460 0.130558 +vn 0.504715 0.863277 0.000000 +vn 0.662801 0.727226 0.178198 +vn 0.686911 0.726707 0.000000 +vn 0.252388 0.956511 0.146092 +vn 0.153508 0.984130 0.088839 +vn 0.137059 0.987365 0.079318 +vn 0.187872 0.976135 0.108676 +vn 0.435926 0.863887 0.252205 +vn 0.593310 0.727866 0.343730 +vn 0.206091 0.956572 0.206091 +vn 0.125340 0.984161 0.125340 +vn 0.111911 0.987396 0.111911 +vn 0.153356 0.976196 0.153356 +vn 0.355907 0.864071 0.355907 +vn 0.484664 0.728111 0.484664 +vn 0.146092 0.956511 0.252388 +vn 0.088839 0.984130 0.153508 +vn 0.079318 0.987365 0.137059 +vn 0.108676 0.976135 0.187872 +vn 0.252205 0.863887 0.435926 +vn 0.343730 0.727866 0.593310 +vn 0.075686 0.956389 0.282083 +vn 0.046022 0.984069 0.171606 +vn 0.041078 0.987304 0.153264 +vn 0.056276 0.976043 0.210059 +vn 0.130558 0.863460 0.487197 +vn 0.178198 0.727226 0.662801 +vn 0.000000 0.956236 0.292520 +vn 0.000000 0.984008 0.177953 +vn 0.000000 0.987274 0.158879 +vn 0.000000 0.975982 0.217719 +vn 0.000000 0.863277 0.504715 +vn 0.000000 0.726707 0.686911 +vn -0.075686 0.956389 0.282083 +vn -0.046022 0.984069 0.171606 +vn -0.041078 0.987304 0.153264 +vn -0.056276 0.976043 0.210059 +vn -0.130558 0.863460 0.487197 +vn -0.178198 0.727226 0.662801 +vn -0.146092 0.956511 0.252388 +vn -0.088839 0.984130 0.153508 +vn -0.079318 0.987365 0.137059 +vn -0.108676 0.976135 0.187872 +vn -0.252205 0.863887 0.435926 +vn -0.343730 0.727866 0.593310 +vn -0.206091 0.956572 0.206091 +vn -0.125340 0.984161 0.125340 +vn -0.111911 0.987396 0.111911 +vn -0.153356 0.976196 0.153356 +vn -0.355907 0.864071 0.355907 +vn -0.484664 0.728111 0.484664 +vn -0.252388 0.956511 0.146092 +vn -0.153508 0.984130 0.088839 +vn -0.137059 0.987365 0.079318 +vn -0.187872 0.976135 0.108676 +vn -0.435926 0.863887 0.252205 +vn -0.593310 0.727866 0.343730 +vn -0.282083 0.956389 0.075686 +vn -0.171606 0.984069 0.046022 +vn -0.153264 0.987304 0.041078 +vn -0.210059 0.976043 0.056276 +vn -0.487197 0.863460 0.130558 +vn -0.662801 0.727226 0.178198 +vn -0.292520 0.956236 0.000000 +vn -0.177953 0.984008 0.000000 +vn -0.158879 0.987274 0.000000 +vn -0.217719 0.975982 0.000000 +vn -0.504715 0.863277 0.000000 +vn -0.686911 0.726707 0.000000 +vn -0.282083 0.956389 -0.075686 +vn -0.171606 0.984069 -0.046022 +vn -0.153264 0.987304 -0.041078 +vn -0.210059 0.976043 -0.056276 +vn -0.487197 0.863460 -0.130558 +vn -0.662801 0.727226 -0.178198 +vn -0.252388 0.956511 -0.146092 +vn -0.153508 0.984130 -0.088839 +vn -0.137059 0.987365 -0.079318 +vn -0.187872 0.976135 -0.108676 +vn -0.435926 0.863887 -0.252205 +vn -0.593310 0.727866 -0.343730 +vn -0.206091 0.956572 -0.206091 +vn -0.125340 0.984161 -0.125340 +vn -0.111911 0.987396 -0.111911 +vn -0.153356 0.976196 -0.153356 +vn -0.355907 0.864071 -0.355907 +vn -0.484664 0.728111 -0.484664 +vn -0.146092 0.956511 -0.252388 +vn -0.088839 0.984130 -0.153508 +vn -0.079318 0.987365 -0.137059 +vn -0.108676 0.976135 -0.187872 +vn -0.252205 0.863887 -0.435926 +vn -0.343730 0.727866 -0.593310 +vn -0.075686 0.956389 -0.282083 +vn -0.046022 0.984069 -0.171606 +vn -0.041078 0.987304 -0.153264 +vn -0.056276 0.976043 -0.210059 +vn -0.130558 0.863460 -0.487197 +vn -0.178198 0.727226 -0.662801 +vn 0.000000 0.956236 -0.292520 +vn 0.000000 0.984008 -0.177953 +vn 0.000000 0.987274 -0.158879 +vn 0.000000 0.975982 -0.217719 +vn 0.000000 0.863277 -0.504715 +vn 0.000000 0.726707 -0.686911 +vn 0.075686 0.956389 -0.282083 +vn 0.046022 0.984069 -0.171606 +vn 0.041078 0.987304 -0.153264 +vn 0.056276 0.976043 -0.210059 +vn 0.130558 0.863460 -0.487197 +vn 0.178198 0.727226 -0.662801 +vn 0.146092 0.956511 -0.252388 +vn 0.088839 0.984130 -0.153508 +vn 0.079318 0.987365 -0.137059 +vn 0.108676 0.976135 -0.187872 +vn 0.252205 0.863887 -0.435926 +vn 0.343730 0.727866 -0.593310 +vn 0.206091 0.956572 -0.206091 +vn 0.125340 0.984161 -0.125340 +vn 0.111911 0.987396 -0.111911 +vn 0.153356 0.976196 -0.153356 +vn 0.355907 0.864071 -0.355907 +vn 0.484664 0.728111 -0.484664 +vn 0.252388 0.956511 -0.146092 +vn 0.153508 0.984130 -0.088839 +vn 0.137059 0.987365 -0.079318 +vn 0.187872 0.976135 -0.108676 +vn 0.435926 0.863887 -0.252205 +vn 0.593310 0.727866 -0.343730 +vn 0.282083 0.956389 -0.075686 +vn 0.171606 0.984069 -0.046022 +vn 0.153264 0.987304 -0.041078 +vn 0.210059 0.976043 -0.056276 +vn 0.487197 0.863460 -0.130558 +vn 0.662801 0.727226 -0.178198 +vn 0.015290 -0.999878 0.000000 +vn 0.003296 -0.999969 0.000000 +vn 0.015168 -0.949339 0.313852 +vn 0.003265 -0.944395 0.328715 +vn 0.058870 -0.998260 0.000000 +vn 0.058046 -0.947630 0.314005 +vn 0.158361 -0.934690 0.318155 +vn 0.159764 -0.987152 0.000000 +vn 0.373943 -0.860958 0.344798 +vn 0.391583 -0.920103 0.000000 +vn 0.726829 -0.553880 0.406049 +vn 0.784570 -0.620014 0.000000 +vn 0.908139 -0.082766 0.410321 +vn 0.994995 -0.099796 0.000000 +vn 0.011902 -0.679403 0.733634 +vn 0.002380 -0.636219 0.771477 +vn 0.046449 -0.674398 0.736869 +vn 0.125980 -0.648946 0.750298 +vn 0.270089 -0.562120 0.781671 +vn 0.460067 -0.316263 0.829615 +vn 0.563036 -0.041200 0.825373 +vn 0.000153 0.004242 0.999969 +vn -0.000519 0.113254 0.993561 +vn 0.003510 0.014008 0.999878 +vn 0.005921 0.035951 0.999329 +vn -0.007813 0.058840 0.998230 +vn -0.046510 0.041536 0.998047 +vn -0.039155 0.003113 0.999207 +vn -0.014161 0.682394 0.730796 +vn -0.003204 0.727744 0.685812 +vn -0.055361 0.680074 0.731010 +vn -0.150029 0.655660 0.739952 +vn -0.322520 0.565203 0.759239 +vn -0.537645 0.315806 0.781762 +vn -0.611530 0.029939 0.790613 +vn -0.020569 0.949400 0.313334 +vn -0.004273 0.954772 0.297281 +vn -0.082705 0.944945 0.316507 +vn -0.229591 0.914548 0.332926 +vn -0.502335 0.785943 0.360454 +vn -0.810633 0.443220 0.382611 +vn -0.921232 0.039705 0.386944 +vn -0.021851 0.999756 0.000000 +vn -0.004517 0.999969 0.000000 +vn -0.087649 0.996124 0.000000 +vn -0.246223 0.969207 0.000000 +vn -0.549211 0.835658 0.000000 +vn -0.881039 0.472976 0.000000 +vn -0.999115 0.041444 0.000000 +vn -0.004273 0.954772 -0.297281 +vn -0.020569 0.949400 -0.313334 +vn -0.082705 0.944945 -0.316507 +vn -0.229591 0.914548 -0.332926 +vn -0.502335 0.785943 -0.360454 +vn -0.810633 0.443220 -0.382611 +vn -0.921232 0.039705 -0.386944 +vn -0.003204 0.727744 -0.685812 +vn -0.014161 0.682394 -0.730796 +vn -0.055361 0.680074 -0.731010 +vn -0.150029 0.655660 -0.739952 +vn -0.322520 0.565203 -0.759239 +vn -0.537645 0.315806 -0.781762 +vn -0.611530 0.029939 -0.790613 +vn -0.000519 0.113254 -0.993561 +vn 0.000153 0.004242 -0.999969 +vn 0.003510 0.014008 -0.999878 +vn 0.005921 0.035951 -0.999329 +vn -0.007813 0.058809 -0.998230 +vn -0.046510 0.041536 -0.998047 +vn -0.039155 0.003113 -0.999207 +vn 0.002380 -0.636219 -0.771477 +vn 0.011902 -0.679403 -0.733634 +vn 0.046449 -0.674398 -0.736869 +vn 0.125980 -0.648946 -0.750298 +vn 0.270089 -0.562151 -0.781671 +vn 0.460067 -0.316263 -0.829615 +vn 0.563036 -0.041231 -0.825373 +vn 0.003265 -0.944395 -0.328715 +vn 0.015168 -0.949339 -0.313852 +vn 0.058046 -0.947630 -0.314005 +vn 0.158361 -0.934690 -0.318155 +vn 0.373943 -0.860958 -0.344798 +vn 0.726829 -0.553880 -0.406049 +vn 0.908139 -0.082766 -0.410321 +vn 0.890500 0.214759 0.401044 +vn 0.972930 0.231025 0.000000 +vn 0.836634 0.384075 0.390515 +vn 0.912503 0.408979 0.000000 +vn 0.765191 0.530198 0.365123 +vn 0.828791 0.559496 0.000000 +vn 0.671041 0.663228 0.331339 +vn 0.718955 0.695029 0.000000 +vn 0.549455 0.776238 0.309000 +vn 0.580859 0.813990 0.000000 +vn 0.461165 0.821528 0.335215 +vn 0.497085 0.867672 0.000000 +vn 0.559679 0.139714 0.816828 +vn 0.528581 0.255501 0.809473 +vn 0.494888 0.359783 0.790948 +vn 0.445143 0.467879 0.763451 +vn 0.376049 0.559984 0.738212 +vn 0.287332 0.527940 0.799188 +vn -0.024537 -0.005737 0.999664 +vn -0.020844 -0.012207 0.999695 +vn -0.014466 -0.014466 0.999786 +vn -0.009796 -0.013276 0.999847 +vn -0.014771 -0.013886 0.999786 +vn -0.101779 -0.196661 0.975158 +vn -0.585437 -0.154668 0.795801 +vn -0.538499 -0.291696 0.790490 +vn -0.487228 -0.408918 0.771599 +vn -0.428327 -0.511948 0.744560 +vn -0.360820 -0.584735 0.726524 +vn -0.357311 -0.691549 0.627735 +vn -0.889126 -0.238868 0.390332 +vn -0.807001 -0.448500 0.384075 +vn -0.700980 -0.613392 0.363750 +vn -0.590442 -0.733757 0.336009 +vn -0.486190 -0.814966 0.315256 +vn -0.440138 -0.855586 0.272439 +vn -0.965453 -0.260506 0.000000 +vn -0.872097 -0.489273 0.000000 +vn -0.748253 -0.663381 0.000000 +vn -0.621784 -0.783166 0.000000 +vn -0.507614 -0.861568 0.000000 +vn -0.456954 -0.889462 0.000000 +vn -0.889126 -0.238868 -0.390332 +vn -0.807001 -0.448531 -0.384075 +vn -0.700980 -0.613392 -0.363750 +vn -0.590442 -0.733757 -0.336009 +vn -0.486190 -0.814966 -0.315256 +vn -0.440138 -0.855586 -0.272439 +vn -0.585437 -0.154668 -0.795801 +vn -0.538499 -0.291696 -0.790490 +vn -0.487228 -0.408918 -0.771599 +vn -0.428327 -0.511948 -0.744560 +vn -0.360820 -0.584735 -0.726524 +vn -0.357311 -0.691549 -0.627705 +vn -0.024537 -0.005737 -0.999664 +vn -0.020844 -0.012238 -0.999695 +vn -0.014466 -0.014466 -0.999786 +vn -0.009766 -0.013276 -0.999847 +vn -0.014771 -0.013916 -0.999786 +vn -0.101779 -0.196661 -0.975158 +vn 0.559679 0.139714 -0.816828 +vn 0.528581 0.255501 -0.809473 +vn 0.494888 0.359783 -0.790948 +vn 0.445143 0.467879 -0.763451 +vn 0.376049 0.559984 -0.738212 +vn 0.287332 0.527940 -0.799188 +vn 0.890500 0.214759 -0.401044 +vn 0.836634 0.384075 -0.390515 +vn 0.765191 0.530198 -0.365123 +vn 0.671041 0.663228 -0.331339 +vn 0.549455 0.776238 -0.309000 +vn 0.461165 0.821528 -0.335215 +vn -0.149937 0.988678 0.000000 +vn -0.137028 0.872402 0.469131 +vn -0.297769 0.840358 0.452895 +vn -0.350505 0.936552 0.000000 +vn -0.617512 0.663961 0.421613 +vn -0.715506 0.698569 0.000000 +vn -0.801324 0.450209 0.393872 +vn -0.900845 0.434065 0.000000 +vn -0.828028 0.379803 0.412397 +vn -0.929289 0.369274 0.000000 +vn -0.729179 0.503464 0.463393 +vn -0.857875 0.513810 0.000000 +vn -0.663076 0.748527 0.000000 +vn -0.531449 0.686514 0.496170 +vn -0.066713 0.491440 0.868313 +vn -0.117893 0.503159 0.856105 +vn -0.254341 0.474349 0.842769 +vn -0.411115 0.399182 0.819483 +vn -0.459395 0.346446 0.817835 +vn -0.385876 0.395734 0.833338 +vn -0.270669 0.487838 0.829890 +vn 0.062716 -0.043458 0.997070 +vn 0.135929 -0.002472 0.990692 +vn 0.247963 0.095187 0.964049 +vn 0.209296 0.170660 0.962828 +vn 0.096194 0.178625 0.979186 +vn 0.009552 0.154332 0.987945 +vn -0.000122 0.151952 0.988372 +vn 0.202582 -0.542894 0.814966 +vn 0.360088 -0.479232 0.800378 +vn 0.611988 -0.282235 0.738762 +vn 0.679220 -0.106754 0.726096 +vn 0.583911 -0.078524 0.807978 +vn 0.402722 -0.205237 0.891995 +vn 0.279519 -0.338694 0.898404 +vn 0.294107 -0.855037 0.427015 +vn 0.488418 -0.768700 0.412915 +vn 0.784570 -0.501511 0.364544 +vn 0.893918 -0.279611 0.350291 +vn 0.861415 -0.285287 0.420179 +vn 0.679373 -0.540422 0.496323 +vn 0.458357 -0.754540 0.469588 +vn 0.320780 -0.947142 0.000000 +vn 0.525101 -0.851009 0.000000 +vn 0.827570 -0.561327 0.000000 +vn 0.943419 -0.331523 0.000000 +vn 0.933561 -0.358409 0.000000 +vn 0.756340 -0.654134 0.000000 +vn 0.491928 -0.870602 0.000092 +vn 0.294107 -0.855037 -0.427015 +vn 0.488418 -0.768700 -0.412915 +vn 0.784570 -0.501511 -0.364544 +vn 0.893918 -0.279611 -0.350291 +vn 0.861385 -0.285287 -0.420179 +vn 0.679373 -0.540422 -0.496323 +vn 0.457839 -0.755608 -0.468368 +vn 0.202582 -0.542894 -0.814966 +vn 0.360088 -0.479232 -0.800378 +vn 0.611988 -0.282235 -0.738762 +vn 0.679220 -0.106754 -0.726096 +vn 0.583911 -0.078524 -0.807978 +vn 0.402722 -0.205237 -0.891995 +vn 0.279153 -0.342235 -0.897153 +vn 0.062716 -0.043458 -0.997070 +vn 0.135929 -0.002472 -0.990692 +vn 0.247963 0.095187 -0.964049 +vn 0.209296 0.170629 -0.962828 +vn 0.096194 0.178625 -0.979186 +vn 0.009552 0.154332 -0.987945 +vn -0.000458 0.149358 -0.988769 +vn -0.066713 0.491440 -0.868313 +vn -0.117893 0.503159 -0.856105 +vn -0.254341 0.474319 -0.842769 +vn -0.411115 0.399182 -0.819514 +vn -0.459395 0.346446 -0.817835 +vn -0.385876 0.395734 -0.833338 +vn -0.271035 0.487136 -0.830164 +vn -0.137028 0.872402 -0.469131 +vn -0.297769 0.840358 -0.452895 +vn -0.617512 0.663961 -0.421613 +vn -0.801324 0.450209 -0.393872 +vn -0.828028 0.379803 -0.412397 +vn -0.729209 0.503464 -0.463393 +vn -0.531541 0.686453 -0.496200 +vn -0.480697 0.876858 0.000000 +vn -0.394635 0.815363 0.423536 +vn -0.320750 0.947142 0.000092 +vn -0.255287 0.921964 0.291086 +vn 0.002686 0.999969 -0.000732 +vn -0.007172 0.999939 -0.007599 +vn 0.366832 0.704398 -0.607624 +vn 0.853236 0.521226 -0.016388 +vn 0.567492 -0.154088 -0.808802 +vn 0.803766 -0.594409 -0.024964 +vn 0.580920 -0.584490 -0.566424 +vn 0.673757 -0.738639 -0.020966 +vn -0.206824 0.638203 0.741539 +vn -0.129490 0.862056 0.489944 +vn -0.034486 0.999023 0.026704 +vn 0.041597 0.871334 -0.488876 +vn 0.103488 0.553880 -0.826136 +vn 0.189642 0.174200 -0.966247 +vn 0.020112 0.322611 0.946287 +vn 0.021943 0.748894 0.662282 +vn -0.025697 0.995392 0.092166 +vn -0.056551 0.931608 -0.358989 +vn -0.070711 0.782006 -0.619190 +vn -0.066408 0.651509 -0.755699 +vn 0.281747 -0.174993 0.943388 +vn 0.303903 0.444136 0.842830 +vn 0.035279 0.983856 0.175329 +vn -0.109928 0.953551 -0.280435 +vn -0.149571 0.847682 -0.508927 +vn -0.145634 0.777520 -0.611744 +vn 0.467238 -0.683218 0.561144 +vn 0.699515 0.004364 0.714560 +vn 0.354900 0.892758 0.277444 +vn -0.174383 0.969054 -0.174596 +vn -0.252998 0.894314 -0.368938 +vn -0.191443 0.807947 -0.557237 +vn 0.495346 -0.868679 0.001587 +vn 0.933897 -0.357311 0.011017 +vn 0.704215 0.709830 0.013337 +vn -0.205634 0.978576 -0.006623 +vn -0.322367 0.945708 -0.041169 +vn -0.314951 0.916288 -0.247322 +vn 0.459120 -0.703757 -0.542100 +vn 0.693655 -0.096530 -0.713767 +vn 0.408673 0.848415 -0.336344 +vn -0.198248 0.963439 0.180151 +vn -0.306833 0.888516 0.341075 +vn -0.335978 0.808863 0.482498 +vn 0.277047 -0.215796 -0.936277 +vn 0.306192 0.349864 -0.885311 +vn 0.056246 0.971099 -0.231819 +vn -0.146733 0.912168 0.382611 +vn -0.202612 0.700797 0.683950 +vn -0.159368 0.444777 0.881314 +vn 0.016907 0.300088 -0.953734 +vn 0.019349 0.701865 -0.712027 +vn -0.023713 0.995361 -0.093081 +vn -0.047395 0.829371 0.556658 +vn -0.015259 0.386608 0.922086 +vn 0.080721 0.001404 0.996704 +vn -0.209967 0.632160 -0.745811 +vn -0.137394 0.849117 -0.509995 +vn -0.023438 0.999695 -0.004883 +vn 0.120426 0.724540 0.678579 +vn 0.260750 0.006531 0.965361 +vn 0.341502 -0.385510 0.857143 +vn -0.395489 0.814814 -0.423841 +vn -0.257942 0.920621 -0.293039 +vn 0.005005 0.999908 0.011628 +vn 0.466628 0.599811 0.649983 +vn 0.621937 -0.400861 0.672628 +vn 0.584826 -0.661397 0.469558 +vn 0.363842 0.931455 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.351451 0.931516 0.093509 +vn 0.314432 0.931791 0.181280 +vn 0.256386 0.931913 0.256386 +vn 0.181280 0.931791 0.314432 +vn 0.093509 0.931516 0.351451 +vn 0.000000 0.931455 0.363842 +vn -0.093509 0.931516 0.351451 +vn -0.181280 0.931791 0.314432 +vn -0.256386 0.931913 0.256386 +vn -0.314432 0.931791 0.181280 +vn -0.351451 0.931516 0.093509 +vn -0.363842 0.931455 0.000000 +vn -0.351451 0.931516 -0.093509 +vn -0.314432 0.931791 -0.181280 +vn -0.256417 0.931913 -0.256417 +vn -0.181280 0.931791 -0.314432 +vn -0.093509 0.931516 -0.351451 +vn 0.000000 0.931455 -0.363842 +vn 0.093509 0.931516 -0.351451 +vn 0.181280 0.931791 -0.314432 +vn 0.256417 0.931913 -0.256417 +vn 0.314432 0.931791 -0.181280 +vn 0.351451 0.931516 -0.093509 +vn 0.935423 0.249763 0.250160 +vn 0.968261 0.249916 0.000000 +vn 0.813959 -0.538713 0.217322 +vn 0.842860 -0.538102 0.000000 +vn 0.759484 -0.618030 0.202887 +vn 0.786767 -0.617206 0.000000 +vn 0.801569 -0.558184 0.214148 +vn 0.830195 -0.557421 0.000000 +vn 0.838404 0.249825 0.484359 +vn 0.729026 -0.539720 0.420881 +vn 0.680013 -0.619098 0.392712 +vn 0.717765 -0.559343 0.414594 +vn 0.684652 0.249886 0.684652 +vn 0.595050 -0.540147 0.595050 +vn 0.555040 -0.619526 0.555040 +vn 0.585894 -0.559862 0.585894 +vn 0.484359 0.249825 0.838404 +vn 0.420881 -0.539720 0.729026 +vn 0.392712 -0.619098 0.680013 +vn 0.414594 -0.559343 0.717765 +vn 0.250160 0.249763 0.935423 +vn 0.217322 -0.538713 0.813959 +vn 0.202887 -0.618030 0.759514 +vn 0.214148 -0.558184 0.801569 +vn 0.000000 0.249916 0.968261 +vn 0.000000 -0.538102 0.842860 +vn 0.000000 -0.617206 0.786767 +vn 0.000000 -0.557421 0.830195 +vn -0.250160 0.249763 0.935423 +vn -0.217322 -0.538713 0.813959 +vn -0.202887 -0.618030 0.759514 +vn -0.214148 -0.558184 0.801569 +vn -0.484359 0.249825 0.838404 +vn -0.420881 -0.539720 0.729026 +vn -0.392712 -0.619098 0.680013 +vn -0.414594 -0.559343 0.717765 +vn -0.684652 0.249886 0.684652 +vn -0.595050 -0.540147 0.595050 +vn -0.555040 -0.619526 0.555040 +vn -0.585894 -0.559862 0.585894 +vn -0.838404 0.249825 0.484359 +vn -0.729026 -0.539720 0.420881 +vn -0.680013 -0.619098 0.392712 +vn -0.717765 -0.559343 0.414594 +vn -0.935423 0.249763 0.250160 +vn -0.813959 -0.538713 0.217322 +vn -0.759484 -0.618030 0.202887 +vn -0.801569 -0.558184 0.214148 +vn -0.968261 0.249916 0.000000 +vn -0.842860 -0.538102 0.000000 +vn -0.786767 -0.617206 0.000000 +vn -0.830195 -0.557421 0.000000 +vn -0.935423 0.249763 -0.250160 +vn -0.813959 -0.538713 -0.217322 +vn -0.759484 -0.618030 -0.202887 +vn -0.801569 -0.558184 -0.214148 +vn -0.838404 0.249825 -0.484359 +vn -0.729026 -0.539720 -0.420881 +vn -0.680013 -0.619098 -0.392712 +vn -0.717765 -0.559343 -0.414594 +vn -0.684652 0.249886 -0.684652 +vn -0.595050 -0.540147 -0.595050 +vn -0.555040 -0.619526 -0.555040 +vn -0.585864 -0.559862 -0.585894 +vn -0.484359 0.249825 -0.838404 +vn -0.420881 -0.539720 -0.729026 +vn -0.392712 -0.619098 -0.680013 +vn -0.414594 -0.559343 -0.717765 +vn -0.250160 0.249763 -0.935423 +vn -0.217322 -0.538713 -0.813959 +vn -0.202887 -0.618030 -0.759484 +vn -0.214148 -0.558214 -0.801569 +vn 0.000000 0.249916 -0.968261 +vn 0.000000 -0.538102 -0.842860 +vn 0.000000 -0.617206 -0.786767 +vn 0.000000 -0.557421 -0.830195 +vn 0.250160 0.249763 -0.935423 +vn 0.217322 -0.538713 -0.813959 +vn 0.202887 -0.618030 -0.759484 +vn 0.214148 -0.558214 -0.801569 +vn 0.484359 0.249825 -0.838404 +vn 0.420881 -0.539720 -0.729026 +vn 0.392712 -0.619098 -0.680013 +vn 0.414594 -0.559343 -0.717765 +vn 0.684652 0.249886 -0.684652 +vn 0.595050 -0.540147 -0.595050 +vn 0.555040 -0.619526 -0.555040 +vn 0.585864 -0.559862 -0.585894 +vn 0.838404 0.249825 -0.484359 +vn 0.729026 -0.539720 -0.420881 +vn 0.680013 -0.619098 -0.392712 +vn 0.717765 -0.559343 -0.414594 +vn 0.935423 0.249763 -0.250160 +vn 0.813959 -0.538713 -0.217322 +vn 0.759484 -0.618030 -0.202887 +vn 0.801569 -0.558184 -0.214148 +s 1 +f 1//1 2//2 3//3 +f 3//3 2//2 4//4 +f 4//4 2//2 5//5 +f 5//5 2//2 6//6 +f 6//6 2//2 7//7 +f 7//7 2//2 8//8 +f 8//8 2//2 9//9 +f 9//9 2//2 10//10 +f 10//10 2//2 11//11 +f 11//11 2//2 12//12 +f 12//12 2//2 13//13 +f 13//13 2//2 14//14 +f 14//14 2//2 15//15 +f 15//15 2//2 16//16 +f 16//16 2//2 17//17 +f 17//17 2//2 18//18 +f 18//18 2//2 19//19 +f 19//19 2//2 20//20 +f 20//20 2//2 21//21 +f 21//21 2//2 22//22 +f 22//22 2//2 23//23 +f 23//23 2//2 24//24 +f 24//24 2//2 25//25 +f 2//2 1//1 25//25 +f 26//26 27//27 28//28 +f 28//28 29//29 26//26 +f 29//29 28//28 30//30 +f 31//31 30//30 28//28 +f 30//30 31//31 32//32 +f 33//33 32//32 31//31 +f 34//34 35//35 33//33 +f 32//32 33//33 35//35 +f 36//36 37//37 34//34 +f 35//35 34//34 37//37 +f 38//38 39//39 36//36 +f 37//37 36//36 39//39 +f 27//27 40//40 41//41 +f 41//41 28//28 27//27 +f 28//28 41//41 31//31 +f 42//42 31//31 41//41 +f 31//31 42//42 33//33 +f 43//43 33//33 42//42 +f 44//44 34//34 43//43 +f 33//33 43//43 34//34 +f 45//45 36//36 44//44 +f 34//34 44//44 36//36 +f 46//46 38//38 45//45 +f 36//36 45//45 38//38 +f 40//40 47//47 48//48 +f 48//48 41//41 40//40 +f 41//41 48//48 42//42 +f 49//49 42//42 48//48 +f 42//42 49//49 43//43 +f 50//50 43//43 49//49 +f 51//51 44//44 50//50 +f 43//43 50//50 44//44 +f 52//52 45//45 51//51 +f 44//44 51//51 45//45 +f 53//53 46//46 52//52 +f 45//45 52//52 46//46 +f 47//47 54//54 48//48 +f 55//55 48//48 54//54 +f 48//48 55//55 49//49 +f 56//56 49//49 55//55 +f 49//49 56//56 57//57 +f 57//57 50//50 49//49 +f 58//58 51//51 50//50 +f 50//50 57//57 58//58 +f 59//59 52//52 51//51 +f 51//51 58//58 59//59 +f 60//60 53//53 52//52 +f 52//52 59//59 60//60 +f 54//54 61//61 55//55 +f 62//62 55//55 61//61 +f 55//55 62//62 63//63 +f 63//63 56//56 55//55 +f 56//56 63//63 64//64 +f 64//64 57//57 56//56 +f 65//65 58//58 57//57 +f 57//57 64//64 65//65 +f 66//66 59//59 58//58 +f 58//58 65//65 66//66 +f 67//67 60//60 59//59 +f 59//59 66//66 67//67 +f 61//61 68//68 62//62 +f 69//69 62//62 68//68 +f 62//62 69//69 70//70 +f 70//70 63//63 62//62 +f 63//63 70//70 71//71 +f 71//71 64//64 63//63 +f 72//72 65//65 64//64 +f 64//64 71//71 72//72 +f 73//73 66//66 65//65 +f 65//65 72//72 73//73 +f 74//74 67//67 66//66 +f 66//66 73//73 74//74 +f 68//68 75//75 76//76 +f 76//76 69//69 68//68 +f 69//69 76//76 70//70 +f 77//77 70//70 76//76 +f 70//70 77//77 71//71 +f 78//78 71//71 77//77 +f 79//79 72//72 78//78 +f 71//71 78//78 72//72 +f 80//80 73//73 79//79 +f 72//72 79//79 73//73 +f 81//81 74//74 80//80 +f 73//73 80//80 74//74 +f 75//75 82//82 83//83 +f 83//83 76//76 75//75 +f 76//76 83//83 77//77 +f 84//84 77//77 83//83 +f 77//77 84//84 78//78 +f 85//85 78//78 84//84 +f 86//86 79//79 85//85 +f 78//78 85//85 79//79 +f 87//87 80//80 86//86 +f 79//79 86//86 80//80 +f 88//88 81//81 87//87 +f 80//80 87//87 81//81 +f 82//82 89//89 90//90 +f 90//90 83//83 82//82 +f 83//83 90//90 91//91 +f 91//91 84//84 83//83 +f 84//84 91//91 85//85 +f 92//92 85//85 91//91 +f 93//93 86//86 92//92 +f 85//85 92//92 86//86 +f 94//94 87//87 93//93 +f 86//86 93//93 87//87 +f 95//95 88//88 94//94 +f 87//87 94//94 88//88 +f 89//89 96//96 90//90 +f 97//97 90//90 96//96 +f 90//90 97//97 98//98 +f 98//98 91//91 90//90 +f 91//91 98//98 99//99 +f 99//99 92//92 91//91 +f 100//100 93//93 92//92 +f 92//92 99//99 100//100 +f 101//101 94//94 93//93 +f 93//93 100//100 101//101 +f 102//102 95//95 94//94 +f 94//94 101//101 102//102 +f 96//96 103//103 97//97 +f 104//104 97//97 103//103 +f 97//97 104//104 105//105 +f 105//105 98//98 97//97 +f 98//98 105//105 106//106 +f 106//106 99//99 98//98 +f 107//107 100//100 99//99 +f 99//99 106//106 107//107 +f 108//108 101//101 100//100 +f 100//100 107//107 108//108 +f 109//109 102//102 101//101 +f 101//101 108//108 109//109 +f 103//103 110//110 104//104 +f 111//111 104//104 110//110 +f 104//104 111//111 112//112 +f 112//112 105//105 104//104 +f 105//105 112//112 113//113 +f 113//113 106//106 105//105 +f 114//114 107//107 106//106 +f 106//106 113//113 114//114 +f 115//115 108//108 107//107 +f 107//107 114//114 115//115 +f 116//116 109//109 108//108 +f 108//108 115//115 116//116 +f 110//110 117//117 118//118 +f 118//118 111//111 110//110 +f 111//111 118//118 119//119 +f 119//119 112//112 111//111 +f 112//112 119//119 113//113 +f 120//120 113//113 119//119 +f 121//121 114//114 120//120 +f 113//113 120//120 114//114 +f 122//122 115//115 121//121 +f 114//114 121//121 115//115 +f 123//123 116//116 122//122 +f 115//115 122//122 116//116 +f 117//117 124//124 125//125 +f 125//125 118//118 117//117 +f 118//118 125//125 119//119 +f 126//126 119//119 125//125 +f 119//119 126//126 120//120 +f 127//127 120//120 126//126 +f 128//128 121//121 127//127 +f 120//120 127//127 121//121 +f 129//129 122//122 128//128 +f 121//121 128//128 122//122 +f 130//130 123//123 129//129 +f 122//122 129//129 123//123 +f 124//124 131//131 132//132 +f 132//132 125//125 124//124 +f 125//125 132//132 133//133 +f 133//133 126//126 125//125 +f 126//126 133//133 127//127 +f 134//134 127//127 133//133 +f 135//135 128//128 134//134 +f 127//127 134//134 128//128 +f 136//136 129//129 135//135 +f 128//128 135//135 129//129 +f 137//137 130//130 136//136 +f 129//129 136//136 130//130 +f 131//131 138//138 132//132 +f 139//139 132//132 138//138 +f 132//132 139//139 140//140 +f 140//140 133//133 132//132 +f 133//133 140//140 141//141 +f 141//141 134//134 133//133 +f 142//142 135//135 134//134 +f 134//134 141//141 142//142 +f 143//143 136//136 135//135 +f 135//135 142//142 143//143 +f 144//144 137//137 136//136 +f 136//136 143//143 144//144 +f 138//138 145//145 139//139 +f 146//146 139//139 145//145 +f 139//139 146//146 147//147 +f 147//147 140//140 139//139 +f 140//140 147//147 148//148 +f 148//148 141//141 140//140 +f 149//149 142//142 141//141 +f 141//141 148//148 149//149 +f 150//150 143//143 142//142 +f 142//142 149//149 150//150 +f 151//151 144//144 143//143 +f 143//143 150//150 151//151 +f 145//145 152//152 146//146 +f 153//153 146//146 152//152 +f 146//146 153//153 154//154 +f 154//154 147//147 146//146 +f 147//147 154//154 155//155 +f 155//155 148//148 147//147 +f 156//156 149//149 148//148 +f 148//148 155//155 156//156 +f 157//157 150//150 149//149 +f 149//149 156//156 157//157 +f 158//158 151//151 150//150 +f 150//150 157//157 158//158 +f 152//152 159//159 160//160 +f 160//160 153//153 152//152 +f 153//153 160//160 154//154 +f 161//161 154//154 160//160 +f 154//154 161//161 155//155 +f 162//162 155//155 161//161 +f 163//163 156//156 162//162 +f 155//155 162//162 156//156 +f 164//164 157//157 163//163 +f 156//156 163//163 157//157 +f 165//165 158//158 164//164 +f 157//157 164//164 158//158 +f 159//159 166//166 167//167 +f 167//167 160//160 159//159 +f 160//160 167//167 161//161 +f 168//168 161//161 167//167 +f 161//161 168//168 162//162 +f 169//169 162//162 168//168 +f 170//170 163//163 169//169 +f 162//162 169//169 163//163 +f 171//171 164//164 170//170 +f 163//163 170//170 164//164 +f 172//172 165//165 171//171 +f 164//164 171//171 165//165 +f 166//166 173//173 174//174 +f 174//174 167//167 166//166 +f 167//167 174//174 168//168 +f 175//175 168//168 174//174 +f 168//168 175//175 169//169 +f 176//176 169//169 175//175 +f 177//177 170//170 176//176 +f 169//169 176//176 170//170 +f 178//178 171//171 177//177 +f 170//170 177//177 171//171 +f 179//179 172//172 178//178 +f 171//171 178//178 172//172 +f 173//173 180//180 174//174 +f 181//181 174//174 180//180 +f 174//174 181//181 175//175 +f 182//182 175//175 181//181 +f 175//175 182//182 183//183 +f 183//183 176//176 175//175 +f 184//184 177//177 176//176 +f 176//176 183//183 184//184 +f 185//185 178//178 177//177 +f 177//177 184//184 185//185 +f 186//186 179//179 178//178 +f 178//178 185//185 186//186 +f 180//180 187//187 181//181 +f 188//188 181//181 187//187 +f 181//181 188//188 189//189 +f 189//189 182//182 181//181 +f 182//182 189//189 190//190 +f 190//190 183//183 182//182 +f 191//191 184//184 183//183 +f 183//183 190//190 191//191 +f 192//192 185//185 184//184 +f 184//184 191//191 192//192 +f 193//193 186//186 185//185 +f 185//185 192//192 193//193 +f 187//187 26//26 188//188 +f 29//29 188//188 26//26 +f 188//188 29//29 189//189 +f 30//30 189//189 29//29 +f 189//189 30//30 32//32 +f 32//32 190//190 189//189 +f 35//35 191//191 190//190 +f 190//190 32//32 35//35 +f 37//37 192//192 191//191 +f 191//191 35//35 37//37 +f 39//39 193//193 192//192 +f 192//192 37//37 39//39 +f 194//194 195//195 38//38 +f 39//39 38//38 195//195 +f 196//196 197//197 194//194 +f 195//195 194//194 197//197 +f 198//198 199//199 196//196 +f 197//197 196//196 199//199 +f 200//200 201//201 198//198 +f 199//199 198//198 201//201 +f 202//202 203//203 200//200 +f 201//201 200//200 203//203 +f 204//204 205//205 202//202 +f 203//203 202//202 205//205 +f 206//206 194//194 46//46 +f 38//38 46//46 194//194 +f 207//207 196//196 206//206 +f 194//194 206//206 196//196 +f 208//208 198//198 207//207 +f 196//196 207//207 198//198 +f 209//209 200//200 208//208 +f 198//198 208//208 200//200 +f 210//210 202//202 209//209 +f 200//200 209//209 202//202 +f 211//211 204//204 210//210 +f 202//202 210//210 204//204 +f 212//212 206//206 53//53 +f 46//46 53//53 206//206 +f 213//213 207//207 212//212 +f 206//206 212//212 207//207 +f 214//214 208//208 213//213 +f 207//207 213//213 208//208 +f 215//215 209//209 214//214 +f 208//208 214//214 209//209 +f 216//216 210//210 215//215 +f 209//209 215//215 210//210 +f 217//217 211//211 216//216 +f 210//210 216//216 211//211 +f 218//218 212//212 53//53 +f 53//53 60//60 218//218 +f 219//219 213//213 212//212 +f 212//212 218//218 219//219 +f 220//220 214//214 213//213 +f 213//213 219//219 220//220 +f 221//221 215//215 214//214 +f 214//214 220//220 221//221 +f 222//222 216//216 215//215 +f 215//215 221//221 222//222 +f 223//223 217//217 216//216 +f 216//216 222//222 223//223 +f 224//224 218//218 60//60 +f 60//60 67//67 224//224 +f 225//225 219//219 218//218 +f 218//218 224//224 225//225 +f 226//226 220//220 219//219 +f 219//219 225//225 226//226 +f 227//227 221//221 220//220 +f 220//220 226//226 227//227 +f 228//228 222//222 221//221 +f 221//221 227//227 228//228 +f 229//229 223//223 222//222 +f 222//222 228//228 229//229 +f 230//230 224//224 67//67 +f 67//67 74//74 230//230 +f 231//231 225//225 224//224 +f 224//224 230//230 231//231 +f 232//232 226//226 225//225 +f 225//225 231//231 232//232 +f 233//233 227//227 226//226 +f 226//226 232//232 233//233 +f 234//234 228//228 227//227 +f 227//227 233//233 234//234 +f 235//235 229//229 228//228 +f 228//228 234//234 235//235 +f 236//236 230//230 81//81 +f 74//74 81//81 230//230 +f 237//237 231//231 236//236 +f 230//230 236//236 231//231 +f 238//238 232//232 237//237 +f 231//231 237//237 232//232 +f 239//239 233//233 238//238 +f 232//232 238//238 233//233 +f 240//240 234//234 239//239 +f 233//233 239//239 234//234 +f 241//241 235//235 240//240 +f 234//234 240//240 235//235 +f 242//242 236//236 88//88 +f 81//81 88//88 236//236 +f 243//243 237//237 242//242 +f 236//236 242//242 237//237 +f 244//244 238//238 243//243 +f 237//237 243//243 238//238 +f 245//245 239//239 244//244 +f 238//238 244//244 239//239 +f 246//246 240//240 245//245 +f 239//239 245//245 240//240 +f 247//247 241//241 246//246 +f 240//240 246//246 241//241 +f 248//248 242//242 95//95 +f 88//88 95//95 242//242 +f 249//249 243//243 248//248 +f 242//242 248//248 243//243 +f 250//250 244//244 249//249 +f 243//243 249//249 244//244 +f 251//251 245//245 250//250 +f 244//244 250//250 245//245 +f 252//252 246//246 251//251 +f 245//245 251//251 246//246 +f 253//253 247//247 252//252 +f 246//246 252//252 247//247 +f 254//254 248//248 95//95 +f 95//95 102//102 254//254 +f 255//255 249//249 248//248 +f 248//248 254//254 255//255 +f 256//256 250//250 249//249 +f 249//249 255//255 256//256 +f 257//257 251//251 250//250 +f 250//250 256//256 257//257 +f 258//258 252//252 251//251 +f 251//251 257//257 258//258 +f 259//259 253//253 252//252 +f 252//252 258//258 259//259 +f 260//260 254//254 102//102 +f 102//102 109//109 260//260 +f 261//261 255//255 254//254 +f 254//254 260//260 261//261 +f 262//262 256//256 255//255 +f 255//255 261//261 262//262 +f 263//263 257//257 256//256 +f 256//256 262//262 263//263 +f 264//264 258//258 257//257 +f 257//257 263//263 264//264 +f 265//265 259//259 258//258 +f 258//258 264//264 265//265 +f 266//266 260//260 109//109 +f 109//109 116//116 266//266 +f 267//267 261//261 260//260 +f 260//260 266//266 267//267 +f 268//268 262//262 261//261 +f 261//261 267//267 268//268 +f 269//269 263//263 262//262 +f 262//262 268//268 269//269 +f 270//270 264//264 263//263 +f 263//263 269//269 270//270 +f 271//271 265//265 264//264 +f 264//264 270//270 271//271 +f 272//272 266//266 123//123 +f 116//116 123//123 266//266 +f 273//273 267//267 272//272 +f 266//266 272//272 267//267 +f 274//274 268//268 273//273 +f 267//267 273//273 268//268 +f 275//275 269//269 274//274 +f 268//268 274//274 269//269 +f 276//276 270//270 275//275 +f 269//269 275//275 270//270 +f 277//277 271//271 276//276 +f 270//270 276//276 271//271 +f 278//278 272//272 130//130 +f 123//123 130//130 272//272 +f 279//279 273//273 278//278 +f 272//272 278//278 273//273 +f 280//280 274//274 279//279 +f 273//273 279//279 274//274 +f 281//281 275//275 280//280 +f 274//274 280//280 275//275 +f 282//282 276//276 281//281 +f 275//275 281//281 276//276 +f 283//283 277//277 282//282 +f 276//276 282//282 277//277 +f 284//284 278//278 137//137 +f 130//130 137//137 278//278 +f 285//285 279//279 284//284 +f 278//278 284//284 279//279 +f 286//286 280//280 285//285 +f 279//279 285//285 280//280 +f 287//287 281//281 286//286 +f 280//280 286//286 281//281 +f 288//288 282//282 287//287 +f 281//281 287//287 282//282 +f 289//289 283//283 288//288 +f 282//282 288//288 283//283 +f 290//290 284//284 137//137 +f 137//137 144//144 290//290 +f 291//291 285//285 284//284 +f 284//284 290//290 291//291 +f 292//292 286//286 285//285 +f 285//285 291//291 292//292 +f 293//293 287//287 286//286 +f 286//286 292//292 293//293 +f 294//294 288//288 287//287 +f 287//287 293//293 294//294 +f 295//295 289//289 288//288 +f 288//288 294//294 295//295 +f 296//296 290//290 144//144 +f 144//144 151//151 296//296 +f 297//297 291//291 290//290 +f 290//290 296//296 297//297 +f 298//298 292//292 291//291 +f 291//291 297//297 298//298 +f 299//299 293//293 292//292 +f 292//292 298//298 299//299 +f 300//300 294//294 293//293 +f 293//293 299//299 300//300 +f 301//301 295//295 294//294 +f 294//294 300//300 301//301 +f 302//302 296//296 151//151 +f 151//151 158//158 302//302 +f 303//303 297//297 296//296 +f 296//296 302//302 303//303 +f 304//304 298//298 297//297 +f 297//297 303//303 304//304 +f 305//305 299//299 298//298 +f 298//298 304//304 305//305 +f 306//306 300//300 299//299 +f 299//299 305//305 306//306 +f 307//307 301//301 300//300 +f 300//300 306//306 307//307 +f 308//308 302//302 165//165 +f 158//158 165//165 302//302 +f 309//309 303//303 308//308 +f 302//302 308//308 303//303 +f 310//310 304//304 309//309 +f 303//303 309//309 304//304 +f 311//311 305//305 310//310 +f 304//304 310//310 305//305 +f 312//312 306//306 311//311 +f 305//305 311//311 306//306 +f 313//313 307//307 312//312 +f 306//306 312//312 307//307 +f 314//314 308//308 172//172 +f 165//165 172//172 308//308 +f 315//315 309//309 314//314 +f 308//308 314//314 309//309 +f 316//316 310//310 315//315 +f 309//309 315//315 310//310 +f 317//317 311//311 316//316 +f 310//310 316//316 311//311 +f 318//318 312//312 317//317 +f 311//311 317//317 312//312 +f 319//319 313//313 318//318 +f 312//312 318//318 313//313 +f 320//320 314//314 179//179 +f 172//172 179//179 314//314 +f 321//321 315//315 320//320 +f 314//314 320//320 315//315 +f 322//322 316//316 321//321 +f 315//315 321//321 316//316 +f 323//323 317//317 322//322 +f 316//316 322//322 317//317 +f 324//324 318//318 323//323 +f 317//317 323//323 318//318 +f 325//325 319//319 324//324 +f 318//318 324//324 319//319 +f 326//326 320//320 179//179 +f 179//179 186//186 326//326 +f 327//327 321//321 320//320 +f 320//320 326//326 327//327 +f 328//328 322//322 321//321 +f 321//321 327//327 328//328 +f 329//329 323//323 322//322 +f 322//322 328//328 329//329 +f 330//330 324//324 323//323 +f 323//323 329//329 330//330 +f 331//331 325//325 324//324 +f 324//324 330//330 331//331 +f 332//332 326//326 186//186 +f 186//186 193//193 332//332 +f 333//333 327//327 326//326 +f 326//326 332//332 333//333 +f 334//334 328//328 327//327 +f 327//327 333//333 334//334 +f 335//335 329//329 328//328 +f 328//328 334//334 335//335 +f 336//336 330//330 329//329 +f 329//329 335//335 336//336 +f 337//337 331//331 330//330 +f 330//330 336//336 337//337 +f 195//195 332//332 193//193 +f 193//193 39//39 195//195 +f 197//197 333//333 332//332 +f 332//332 195//195 197//197 +f 199//199 334//334 333//333 +f 333//333 197//197 199//199 +f 201//201 335//335 334//334 +f 334//334 199//199 201//201 +f 203//203 336//336 335//335 +f 335//335 201//201 203//203 +f 205//205 337//337 336//336 +f 336//336 203//203 205//205 +f 338//338 339//339 205//205 +f 205//205 204//204 338//338 +f 340//340 341//341 339//339 +f 339//339 338//338 340//340 +f 342//342 343//343 341//341 +f 341//341 340//340 342//342 +f 344//344 345//345 343//343 +f 343//343 342//342 344//344 +f 346//346 347//347 345//345 +f 345//345 344//344 346//346 +f 348//348 349//349 347//347 +f 347//347 346//346 348//348 +f 350//350 338//338 204//204 +f 204//204 211//211 350//350 +f 351//351 340//340 338//338 +f 338//338 350//350 351//351 +f 352//352 342//342 340//340 +f 340//340 351//351 352//352 +f 353//353 344//344 342//342 +f 342//342 352//352 353//353 +f 354//354 346//346 344//344 +f 344//344 353//353 354//354 +f 355//355 348//348 346//346 +f 346//346 354//354 355//355 +f 356//356 350//350 211//211 +f 211//211 217//217 356//356 +f 357//357 351//351 350//350 +f 350//350 356//356 357//357 +f 358//358 352//352 351//351 +f 351//351 357//357 358//358 +f 359//359 353//353 352//352 +f 352//352 358//358 359//359 +f 360//360 354//354 353//353 +f 353//353 359//359 360//360 +f 361//361 355//355 354//354 +f 354//354 360//360 361//361 +f 362//362 356//356 223//223 +f 217//217 223//223 356//356 +f 363//363 357//357 362//362 +f 356//356 362//362 357//357 +f 364//364 358//358 363//363 +f 357//357 363//363 358//358 +f 365//365 359//359 364//364 +f 358//358 364//364 359//359 +f 366//366 360//360 365//365 +f 359//359 365//365 360//360 +f 367//367 361//361 366//366 +f 360//360 366//366 361//361 +f 368//368 362//362 229//229 +f 223//223 229//229 362//362 +f 369//369 363//363 368//368 +f 362//362 368//368 363//363 +f 370//370 364//364 369//369 +f 363//363 369//369 364//364 +f 371//371 365//365 370//370 +f 364//364 370//370 365//365 +f 372//372 366//366 371//371 +f 365//365 371//371 366//366 +f 373//373 367//367 372//372 +f 366//366 372//372 367//367 +f 374//374 368//368 235//235 +f 229//229 235//235 368//368 +f 375//375 369//369 374//374 +f 368//368 374//374 369//369 +f 376//376 370//370 375//375 +f 369//369 375//375 370//370 +f 377//377 371//371 376//376 +f 370//370 376//376 371//371 +f 378//378 372//372 377//377 +f 371//371 377//377 372//372 +f 379//379 373//373 378//378 +f 372//372 378//378 373//373 +f 380//380 374//374 235//235 +f 235//235 241//241 380//380 +f 381//381 375//375 374//374 +f 374//374 380//380 381//381 +f 382//382 376//376 375//375 +f 375//375 381//381 382//382 +f 383//383 377//377 376//376 +f 376//376 382//382 383//383 +f 384//384 378//378 377//377 +f 377//377 383//383 384//384 +f 385//385 379//379 378//378 +f 378//378 384//384 385//385 +f 386//386 380//380 241//241 +f 241//241 247//247 386//386 +f 387//387 381//381 380//380 +f 380//380 386//386 387//387 +f 388//388 382//382 381//381 +f 381//381 387//387 388//388 +f 389//389 383//383 382//382 +f 382//382 388//388 389//389 +f 390//390 384//384 383//383 +f 383//383 389//389 390//390 +f 391//391 385//385 384//384 +f 384//384 390//390 391//391 +f 392//392 386//386 247//247 +f 247//247 253//253 392//392 +f 393//393 387//387 386//386 +f 386//386 392//392 393//393 +f 394//394 388//388 387//387 +f 387//387 393//393 394//394 +f 395//395 389//389 388//388 +f 388//388 394//394 395//395 +f 396//396 390//390 389//389 +f 389//389 395//395 396//396 +f 397//397 391//391 390//390 +f 390//390 396//396 397//397 +f 398//398 392//392 259//259 +f 253//253 259//259 392//392 +f 399//399 393//393 398//398 +f 392//392 398//398 393//393 +f 400//400 394//394 399//399 +f 393//393 399//399 394//394 +f 401//401 395//395 400//400 +f 394//394 400//400 395//395 +f 402//402 396//396 401//401 +f 395//395 401//401 396//396 +f 403//403 397//397 402//402 +f 396//396 402//402 397//397 +f 404//404 398//398 265//265 +f 259//259 265//265 398//398 +f 405//405 399//399 404//404 +f 398//398 404//404 399//399 +f 406//406 400//400 405//405 +f 399//399 405//405 400//400 +f 407//407 401//401 406//406 +f 400//400 406//406 401//401 +f 408//408 402//402 407//407 +f 401//401 407//407 402//402 +f 409//409 403//403 408//408 +f 402//402 408//408 403//403 +f 410//410 404//404 271//271 +f 265//265 271//271 404//404 +f 411//411 405//405 410//410 +f 404//404 410//410 405//405 +f 412//412 406//406 411//411 +f 405//405 411//411 406//406 +f 413//413 407//407 412//412 +f 406//406 412//412 407//407 +f 414//414 408//408 413//413 +f 407//407 413//413 408//408 +f 415//415 409//409 414//414 +f 408//408 414//414 409//409 +f 416//416 410//410 271//271 +f 271//271 277//277 416//416 +f 417//417 411//411 410//410 +f 410//410 416//416 417//417 +f 418//418 412//412 411//411 +f 411//411 417//417 418//418 +f 419//419 413//413 412//412 +f 412//412 418//418 419//419 +f 420//420 414//414 413//413 +f 413//413 419//419 420//420 +f 421//421 415//415 414//414 +f 414//414 420//420 421//421 +f 422//422 416//416 277//277 +f 277//277 283//283 422//422 +f 423//423 417//417 416//416 +f 416//416 422//422 423//423 +f 424//424 418//418 417//417 +f 417//417 423//423 424//424 +f 425//425 419//419 418//418 +f 418//418 424//424 425//425 +f 426//426 420//420 419//419 +f 419//419 425//425 426//426 +f 427//427 421//421 420//420 +f 420//420 426//426 427//427 +f 428//428 422//422 283//283 +f 283//283 289//289 428//428 +f 429//429 423//423 422//422 +f 422//422 428//428 429//429 +f 430//430 424//424 423//423 +f 423//423 429//429 430//430 +f 431//431 425//425 424//424 +f 424//424 430//430 431//431 +f 432//432 426//426 425//425 +f 425//425 431//431 432//432 +f 433//433 427//427 426//426 +f 426//426 432//432 433//433 +f 434//434 428//428 295//295 +f 289//289 295//295 428//428 +f 435//435 429//429 434//434 +f 428//428 434//434 429//429 +f 436//436 430//430 435//435 +f 429//429 435//435 430//430 +f 437//437 431//431 436//436 +f 430//430 436//436 431//431 +f 438//438 432//432 437//437 +f 431//431 437//437 432//432 +f 439//439 433//433 438//438 +f 432//432 438//438 433//433 +f 440//440 434//434 301//301 +f 295//295 301//301 434//434 +f 441//441 435//435 440//440 +f 434//434 440//440 435//435 +f 442//442 436//436 441//441 +f 435//435 441//441 436//436 +f 443//443 437//437 442//442 +f 436//436 442//442 437//437 +f 444//444 438//438 443//443 +f 437//437 443//443 438//438 +f 445//445 439//439 444//444 +f 438//438 444//444 439//439 +f 446//446 440//440 307//307 +f 301//301 307//307 440//440 +f 447//447 441//441 446//446 +f 440//440 446//446 441//441 +f 448//448 442//442 447//447 +f 441//441 447//447 442//442 +f 449//449 443//443 448//448 +f 442//442 448//448 443//443 +f 450//450 444//444 449//449 +f 443//443 449//449 444//444 +f 451//451 445//445 450//450 +f 444//444 450//450 445//445 +f 452//452 446//446 307//307 +f 307//307 313//313 452//452 +f 453//453 447//447 446//446 +f 446//446 452//452 453//453 +f 454//454 448//448 447//447 +f 447//447 453//453 454//454 +f 455//455 449//449 448//448 +f 448//448 454//454 455//455 +f 456//456 450//450 449//449 +f 449//449 455//455 456//456 +f 457//457 451//451 450//450 +f 450//450 456//456 457//457 +f 458//458 452//452 313//313 +f 313//313 319//319 458//458 +f 459//459 453//453 452//452 +f 452//452 458//458 459//459 +f 460//460 454//454 453//453 +f 453//453 459//459 460//460 +f 461//461 455//455 454//454 +f 454//454 460//460 461//461 +f 462//462 456//456 455//455 +f 455//455 461//461 462//462 +f 463//463 457//457 456//456 +f 456//456 462//462 463//463 +f 464//464 458//458 319//319 +f 319//319 325//325 464//464 +f 465//465 459//459 458//458 +f 458//458 464//464 465//465 +f 466//466 460//460 459//459 +f 459//459 465//465 466//466 +f 467//467 461//461 460//460 +f 460//460 466//466 467//467 +f 468//468 462//462 461//461 +f 461//461 467//467 468//468 +f 469//469 463//463 462//462 +f 462//462 468//468 469//469 +f 470//470 464//464 331//331 +f 325//325 331//331 464//464 +f 471//471 465//465 470//470 +f 464//464 470//470 465//465 +f 472//472 466//466 471//471 +f 465//465 471//471 466//466 +f 473//473 467//467 472//472 +f 466//466 472//472 467//467 +f 474//474 468//468 473//473 +f 467//467 473//473 468//468 +f 475//475 469//469 474//474 +f 468//468 474//474 469//469 +f 476//476 470//470 337//337 +f 331//331 337//337 470//470 +f 477//477 471//471 476//476 +f 470//470 476//476 471//471 +f 478//478 472//472 477//477 +f 471//471 477//477 472//472 +f 479//479 473//473 478//478 +f 472//472 478//478 473//473 +f 480//480 474//474 479//479 +f 473//473 479//479 474//474 +f 481//481 475//475 480//480 +f 474//474 480//480 475//475 +f 339//339 476//476 205//205 +f 337//337 205//205 476//476 +f 341//341 477//477 339//339 +f 476//476 339//339 477//477 +f 343//343 478//478 341//341 +f 477//477 341//341 478//478 +f 345//345 479//479 343//343 +f 478//478 343//343 479//479 +f 347//347 480//480 345//345 +f 479//479 345//345 480//480 +f 349//349 481//481 347//347 +f 480//480 347//347 481//481 +f 1//1 3//3 482//482 +f 483//483 482//482 3//3 +f 482//482 483//483 484//484 +f 485//485 484//484 483//483 +f 484//484 485//485 486//486 +f 487//487 486//486 485//485 +f 486//486 487//487 488//488 +f 489//489 488//488 487//487 +f 488//488 489//489 349//349 +f 481//481 349//349 489//489 +f 3//3 4//4 483//483 +f 490//490 483//483 4//4 +f 483//483 490//490 485//485 +f 491//491 485//485 490//490 +f 485//485 491//491 487//487 +f 492//492 487//487 491//491 +f 487//487 492//492 489//489 +f 493//493 489//489 492//492 +f 489//489 493//493 481//481 +f 475//475 481//481 493//493 +f 4//4 5//5 490//490 +f 494//494 490//490 5//5 +f 490//490 494//494 491//491 +f 495//495 491//491 494//494 +f 491//491 495//495 492//492 +f 496//496 492//492 495//495 +f 492//492 496//496 493//493 +f 497//497 493//493 496//496 +f 493//493 497//497 475//475 +f 469//469 475//475 497//497 +f 5//5 6//6 498//498 +f 498//498 494//494 5//5 +f 494//494 498//498 499//499 +f 499//499 495//495 494//494 +f 495//495 499//499 500//500 +f 500//500 496//496 495//495 +f 496//496 500//500 501//501 +f 501//501 497//497 496//496 +f 497//497 501//501 463//463 +f 463//463 469//469 497//497 +f 6//6 7//7 502//502 +f 502//502 498//498 6//6 +f 498//498 502//502 503//503 +f 503//503 499//499 498//498 +f 499//499 503//503 504//504 +f 504//504 500//500 499//499 +f 500//500 504//504 505//505 +f 505//505 501//501 500//500 +f 501//501 505//505 457//457 +f 457//457 463//463 501//501 +f 7//7 8//8 506//506 +f 506//506 502//502 7//7 +f 502//502 506//506 507//507 +f 507//507 503//503 502//502 +f 503//503 507//507 508//508 +f 508//508 504//504 503//503 +f 504//504 508//508 509//509 +f 509//509 505//505 504//504 +f 505//505 509//509 451//451 +f 451//451 457//457 505//505 +f 8//8 9//9 506//506 +f 510//510 506//506 9//9 +f 506//506 510//510 507//507 +f 511//511 507//507 510//510 +f 507//507 511//511 508//508 +f 512//512 508//508 511//511 +f 508//508 512//512 509//509 +f 513//513 509//509 512//512 +f 509//509 513//513 451//451 +f 445//445 451//451 513//513 +f 9//9 10//10 510//510 +f 514//514 510//510 10//10 +f 510//510 514//514 511//511 +f 515//515 511//511 514//514 +f 511//511 515//515 512//512 +f 516//516 512//512 515//515 +f 512//512 516//516 513//513 +f 517//517 513//513 516//516 +f 513//513 517//517 445//445 +f 439//439 445//445 517//517 +f 10//10 11//11 514//514 +f 518//518 514//514 11//11 +f 514//514 518//518 515//515 +f 519//519 515//515 518//518 +f 515//515 519//519 516//516 +f 520//520 516//516 519//519 +f 516//516 520//520 517//517 +f 521//521 517//517 520//520 +f 517//517 521//521 439//439 +f 433//433 439//439 521//521 +f 11//11 12//12 522//522 +f 522//522 518//518 11//11 +f 518//518 522//522 523//523 +f 523//523 519//519 518//518 +f 519//519 523//523 524//524 +f 524//524 520//520 519//519 +f 520//520 524//524 525//525 +f 525//525 521//521 520//520 +f 521//521 525//525 427//427 +f 427//427 433//433 521//521 +f 12//12 13//13 526//526 +f 526//526 522//522 12//12 +f 522//522 526//526 527//527 +f 527//527 523//523 522//522 +f 523//523 527//527 528//528 +f 528//528 524//524 523//523 +f 524//524 528//528 529//529 +f 529//529 525//525 524//524 +f 525//525 529//529 421//421 +f 421//421 427//427 525//525 +f 13//13 14//14 530//530 +f 530//530 526//526 13//13 +f 526//526 530//530 531//531 +f 531//531 527//527 526//526 +f 527//527 531//531 532//532 +f 532//532 528//528 527//527 +f 528//528 532//532 533//533 +f 533//533 529//529 528//528 +f 529//529 533//533 415//415 +f 415//415 421//421 529//529 +f 14//14 15//15 530//530 +f 534//534 530//530 15//15 +f 530//530 534//534 531//531 +f 535//535 531//531 534//534 +f 531//531 535//535 532//532 +f 536//536 532//532 535//535 +f 532//532 536//536 533//533 +f 537//537 533//533 536//536 +f 533//533 537//537 415//415 +f 409//409 415//415 537//537 +f 15//15 16//16 534//534 +f 538//538 534//534 16//16 +f 534//534 538//538 535//535 +f 539//539 535//535 538//538 +f 535//535 539//539 536//536 +f 540//540 536//536 539//539 +f 536//536 540//540 537//537 +f 541//541 537//537 540//540 +f 537//537 541//541 409//409 +f 403//403 409//409 541//541 +f 16//16 17//17 538//538 +f 542//542 538//538 17//17 +f 538//538 542//542 539//539 +f 543//543 539//539 542//542 +f 539//539 543//543 540//540 +f 544//544 540//540 543//543 +f 540//540 544//544 541//541 +f 545//545 541//541 544//544 +f 541//541 545//545 403//403 +f 397//397 403//403 545//545 +f 17//17 18//18 546//546 +f 546//546 542//542 17//17 +f 542//542 546//546 547//547 +f 547//547 543//543 542//542 +f 543//543 547//547 548//548 +f 548//548 544//544 543//543 +f 544//544 548//548 549//549 +f 549//549 545//545 544//544 +f 545//545 549//549 391//391 +f 391//391 397//397 545//545 +f 18//18 19//19 550//550 +f 550//550 546//546 18//18 +f 546//546 550//550 551//551 +f 551//551 547//547 546//546 +f 547//547 551//551 552//552 +f 552//552 548//548 547//547 +f 548//548 552//552 553//553 +f 553//553 549//549 548//548 +f 549//549 553//553 385//385 +f 385//385 391//391 549//549 +f 19//19 20//20 554//554 +f 554//554 550//550 19//19 +f 550//550 554//554 555//555 +f 555//555 551//551 550//550 +f 551//551 555//555 556//556 +f 556//556 552//552 551//551 +f 552//552 556//556 557//557 +f 557//557 553//553 552//552 +f 553//553 557//557 379//379 +f 379//379 385//385 553//553 +f 20//20 21//21 554//554 +f 558//558 554//554 21//21 +f 554//554 558//558 555//555 +f 559//559 555//555 558//558 +f 555//555 559//559 556//556 +f 560//560 556//556 559//559 +f 556//556 560//560 557//557 +f 561//561 557//557 560//560 +f 557//557 561//561 379//379 +f 373//373 379//379 561//561 +f 21//21 22//22 558//558 +f 562//562 558//558 22//22 +f 558//558 562//562 559//559 +f 563//563 559//559 562//562 +f 559//559 563//563 560//560 +f 564//564 560//560 563//563 +f 560//560 564//564 561//561 +f 565//565 561//561 564//564 +f 561//561 565//565 373//373 +f 367//367 373//373 565//565 +f 22//22 23//23 562//562 +f 566//566 562//562 23//23 +f 562//562 566//566 563//563 +f 567//567 563//563 566//566 +f 563//563 567//567 564//564 +f 568//568 564//564 567//567 +f 564//564 568//568 565//565 +f 569//569 565//565 568//568 +f 565//565 569//569 367//367 +f 361//361 367//367 569//569 +f 23//23 24//24 570//570 +f 570//570 566//566 23//23 +f 566//566 570//570 571//571 +f 571//571 567//567 566//566 +f 567//567 571//571 572//572 +f 572//572 568//568 567//567 +f 568//568 572//572 573//573 +f 573//573 569//569 568//568 +f 569//569 573//573 355//355 +f 355//355 361//361 569//569 +f 24//24 25//25 574//574 +f 574//574 570//570 24//24 +f 570//570 574//574 575//575 +f 575//575 571//571 570//570 +f 571//571 575//575 576//576 +f 576//576 572//572 571//571 +f 572//572 576//576 577//577 +f 577//577 573//573 572//572 +f 573//573 577//577 348//348 +f 348//348 355//355 573//573 +f 25//25 1//1 482//482 +f 482//482 574//574 25//25 +f 574//574 482//482 484//484 +f 484//484 575//575 574//574 +f 575//575 484//484 486//486 +f 486//486 576//576 575//575 +f 576//576 486//486 488//488 +f 488//488 577//577 576//576 +f 577//577 488//488 349//349 +f 349//349 348//348 577//577 +f 578//578 579//579 580//580 +f 581//581 580//580 579//579 +f 582//582 578//578 583//583 +f 580//580 583//583 578//578 +f 584//584 582//582 585//585 +f 583//583 585//585 582//582 +f 586//586 584//584 585//585 +f 585//585 587//587 586//586 +f 588//588 586//586 587//587 +f 587//587 589//589 588//588 +f 590//590 588//588 589//589 +f 589//589 591//591 590//590 +f 592//592 590//590 593//593 +f 591//591 593//593 590//590 +f 594//594 592//592 595//595 +f 593//593 595//595 592//592 +f 596//596 594//594 597//597 +f 595//595 597//597 594//594 +f 598//598 596//596 597//597 +f 597//597 599//599 598//598 +f 600//600 598//598 599//599 +f 599//599 601//601 600//600 +f 602//602 600//600 601//601 +f 601//601 603//603 602//602 +f 604//604 602//602 605//605 +f 603//603 605//605 602//602 +f 606//606 604//604 607//607 +f 605//605 607//607 604//604 +f 608//608 606//606 609//609 +f 607//607 609//609 606//606 +f 610//610 608//608 609//609 +f 609//609 611//611 610//610 +f 612//612 610//610 611//611 +f 611//611 613//613 612//612 +f 614//614 612//612 613//613 +f 613//613 615//615 614//614 +f 616//616 614//614 617//617 +f 615//615 617//617 614//614 +f 618//618 616//616 619//619 +f 617//617 619//619 616//616 +f 620//620 618//618 621//621 +f 619//619 621//621 618//618 +f 622//622 620//620 621//621 +f 621//621 623//623 622//622 +f 624//624 622//622 623//623 +f 623//623 625//625 624//624 +f 579//579 624//624 625//625 +f 625//625 581//581 579//579 +f 626//626 627//627 578//578 +f 579//579 578//578 627//627 +f 628//628 629//629 626//626 +f 627//627 626//626 629//629 +f 630//630 631//631 628//628 +f 629//629 628//628 631//631 +f 632//632 633//633 630//630 +f 631//631 630//630 633//633 +f 634//634 635//635 632//632 +f 633//633 632//632 635//635 +f 636//636 637//637 634//634 +f 635//635 634//634 637//637 +f 638//638 626//626 582//582 +f 578//578 582//582 626//626 +f 639//639 628//628 638//638 +f 626//626 638//638 628//628 +f 640//640 630//630 639//639 +f 628//628 639//639 630//630 +f 641//641 632//632 640//640 +f 630//630 640//640 632//632 +f 642//642 634//634 641//641 +f 632//632 641//641 634//634 +f 643//643 636//636 642//642 +f 634//634 642//642 636//636 +f 644//644 638//638 584//584 +f 582//582 584//584 638//638 +f 645//645 639//639 644//644 +f 638//638 644//644 639//639 +f 646//646 640//640 645//645 +f 639//639 645//645 640//640 +f 647//647 641//641 646//646 +f 640//640 646//646 641//641 +f 648//648 642//642 647//647 +f 641//641 647//647 642//642 +f 649//649 643//643 648//648 +f 642//642 648//648 643//643 +f 650//650 644//644 584//584 +f 584//584 586//586 650//650 +f 651//651 645//645 644//644 +f 644//644 650//650 651//651 +f 652//652 646//646 645//645 +f 645//645 651//651 652//652 +f 653//653 647//647 646//646 +f 646//646 652//652 653//653 +f 654//654 648//648 647//647 +f 647//647 653//653 654//654 +f 655//655 649//649 648//648 +f 648//648 654//654 655//655 +f 656//656 650//650 586//586 +f 586//586 588//588 656//656 +f 657//657 651//651 650//650 +f 650//650 656//656 657//657 +f 658//658 652//652 651//651 +f 651//651 657//657 658//658 +f 659//659 653//653 652//652 +f 652//652 658//658 659//659 +f 660//660 654//654 653//653 +f 653//653 659//659 660//660 +f 661//661 655//655 654//654 +f 654//654 660//660 661//661 +f 662//662 656//656 588//588 +f 588//588 590//590 662//662 +f 663//663 657//657 656//656 +f 656//656 662//662 663//663 +f 664//664 658//658 657//657 +f 657//657 663//663 664//664 +f 665//665 659//659 658//658 +f 658//658 664//664 665//665 +f 666//666 660//660 659//659 +f 659//659 665//665 666//666 +f 667//667 661//661 660//660 +f 660//660 666//666 667//667 +f 668//668 662//662 592//592 +f 590//590 592//592 662//662 +f 669//669 663//663 668//668 +f 662//662 668//668 663//663 +f 670//670 664//664 669//669 +f 663//663 669//669 664//664 +f 671//671 665//665 670//670 +f 664//664 670//670 665//665 +f 672//672 666//666 671//671 +f 665//665 671//671 666//666 +f 673//673 667//667 672//672 +f 666//666 672//672 667//667 +f 674//674 668//668 594//594 +f 592//592 594//594 668//668 +f 675//675 669//669 674//674 +f 668//668 674//674 669//669 +f 676//676 670//670 675//675 +f 669//669 675//675 670//670 +f 677//677 671//671 676//676 +f 670//670 676//676 671//671 +f 678//678 672//672 677//677 +f 671//671 677//677 672//672 +f 679//679 673//673 678//678 +f 672//672 678//678 673//673 +f 680//680 674//674 596//596 +f 594//594 596//596 674//674 +f 681//681 675//675 680//680 +f 674//674 680//680 675//675 +f 682//682 676//676 681//681 +f 675//675 681//681 676//676 +f 683//683 677//677 682//682 +f 676//676 682//682 677//677 +f 684//684 678//678 683//683 +f 677//677 683//683 678//678 +f 685//685 679//679 684//684 +f 678//678 684//684 679//679 +f 686//686 680//680 596//596 +f 596//596 598//598 686//686 +f 687//687 681//681 680//680 +f 680//680 686//686 687//687 +f 688//688 682//682 681//681 +f 681//681 687//687 688//688 +f 689//689 683//683 682//682 +f 682//682 688//688 689//689 +f 690//690 684//684 683//683 +f 683//683 689//689 690//690 +f 691//691 685//685 684//684 +f 684//684 690//690 691//691 +f 692//692 686//686 598//598 +f 598//598 600//600 692//692 +f 693//693 687//687 686//686 +f 686//686 692//692 693//693 +f 694//694 688//688 687//687 +f 687//687 693//693 694//694 +f 695//695 689//689 688//688 +f 688//688 694//694 695//695 +f 696//696 690//690 689//689 +f 689//689 695//695 696//696 +f 697//697 691//691 690//690 +f 690//690 696//696 697//697 +f 698//698 692//692 600//600 +f 600//600 602//602 698//698 +f 699//699 693//693 692//692 +f 692//692 698//698 699//699 +f 700//700 694//694 693//693 +f 693//693 699//699 700//700 +f 701//701 695//695 694//694 +f 694//694 700//700 701//701 +f 702//702 696//696 695//695 +f 695//695 701//701 702//702 +f 703//703 697//697 696//696 +f 696//696 702//702 703//703 +f 704//704 698//698 604//604 +f 602//602 604//604 698//698 +f 705//705 699//699 704//704 +f 698//698 704//704 699//699 +f 706//706 700//700 705//705 +f 699//699 705//705 700//700 +f 707//707 701//701 706//706 +f 700//700 706//706 701//701 +f 708//708 702//702 707//707 +f 701//701 707//707 702//702 +f 709//709 703//703 708//708 +f 702//702 708//708 703//703 +f 710//710 704//704 606//606 +f 604//604 606//606 704//704 +f 711//711 705//705 710//710 +f 704//704 710//710 705//705 +f 712//712 706//706 711//711 +f 705//705 711//711 706//706 +f 713//713 707//707 712//712 +f 706//706 712//712 707//707 +f 714//714 708//708 713//713 +f 707//707 713//713 708//708 +f 715//715 709//709 714//714 +f 708//708 714//714 709//709 +f 716//716 710//710 608//608 +f 606//606 608//608 710//710 +f 717//717 711//711 716//716 +f 710//710 716//716 711//711 +f 718//718 712//712 717//717 +f 711//711 717//717 712//712 +f 719//719 713//713 718//718 +f 712//712 718//718 713//713 +f 720//720 714//714 719//719 +f 713//713 719//719 714//714 +f 721//721 715//715 720//720 +f 714//714 720//720 715//715 +f 722//722 716//716 608//608 +f 608//608 610//610 722//722 +f 723//723 717//717 716//716 +f 716//716 722//722 723//723 +f 724//724 718//718 717//717 +f 717//717 723//723 724//724 +f 725//725 719//719 718//718 +f 718//718 724//724 725//725 +f 726//726 720//720 719//719 +f 719//719 725//725 726//726 +f 727//727 721//721 720//720 +f 720//720 726//726 727//727 +f 728//728 722//722 610//610 +f 610//610 612//612 728//728 +f 729//729 723//723 722//722 +f 722//722 728//728 729//729 +f 730//730 724//724 723//723 +f 723//723 729//729 730//730 +f 731//731 725//725 724//724 +f 724//724 730//730 731//731 +f 732//732 726//726 725//725 +f 725//725 731//731 732//732 +f 733//733 727//727 726//726 +f 726//726 732//732 733//733 +f 734//734 728//728 612//612 +f 612//612 614//614 734//734 +f 735//735 729//729 728//728 +f 728//728 734//734 735//735 +f 736//736 730//730 729//729 +f 729//729 735//735 736//736 +f 737//737 731//731 730//730 +f 730//730 736//736 737//737 +f 738//738 732//732 731//731 +f 731//731 737//737 738//738 +f 739//739 733//733 732//732 +f 732//732 738//738 739//739 +f 740//740 734//734 616//616 +f 614//614 616//616 734//734 +f 741//741 735//735 740//740 +f 734//734 740//740 735//735 +f 742//742 736//736 741//741 +f 735//735 741//741 736//736 +f 743//743 737//737 742//742 +f 736//736 742//742 737//737 +f 744//744 738//738 743//743 +f 737//737 743//743 738//738 +f 745//745 739//739 744//744 +f 738//738 744//744 739//739 +f 746//746 740//740 618//618 +f 616//616 618//618 740//740 +f 747//747 741//741 746//746 +f 740//740 746//746 741//741 +f 748//748 742//742 747//747 +f 741//741 747//747 742//742 +f 749//749 743//743 748//748 +f 742//742 748//748 743//743 +f 750//750 744//744 749//749 +f 743//743 749//749 744//744 +f 751//751 745//745 750//750 +f 744//744 750//750 745//745 +f 752//752 746//746 620//620 +f 618//618 620//620 746//746 +f 753//753 747//747 752//752 +f 746//746 752//752 747//747 +f 754//754 748//748 753//753 +f 747//747 753//753 748//748 +f 755//755 749//749 754//754 +f 748//748 754//754 749//749 +f 756//756 750//750 755//755 +f 749//749 755//755 750//750 +f 757//757 751//751 756//756 +f 750//750 756//756 751//751 +f 758//758 752//752 620//620 +f 620//620 622//622 758//758 +f 759//759 753//753 752//752 +f 752//752 758//758 759//759 +f 760//760 754//754 753//753 +f 753//753 759//759 760//760 +f 761//761 755//755 754//754 +f 754//754 760//760 761//761 +f 762//762 756//756 755//755 +f 755//755 761//761 762//762 +f 763//763 757//757 756//756 +f 756//756 762//762 763//763 +f 764//764 758//758 622//622 +f 622//622 624//624 764//764 +f 765//765 759//759 758//758 +f 758//758 764//764 765//765 +f 766//766 760//760 759//759 +f 759//759 765//765 766//766 +f 767//767 761//761 760//760 +f 760//760 766//766 767//767 +f 768//768 762//762 761//761 +f 761//761 767//767 768//768 +f 769//769 763//763 762//762 +f 762//762 768//768 769//769 +f 627//627 764//764 624//624 +f 624//624 579//579 627//627 +f 629//629 765//765 764//764 +f 764//764 627//627 629//629 +f 631//631 766//766 765//765 +f 765//765 629//629 631//631 +f 633//633 767//767 766//766 +f 766//766 631//631 633//633 +f 635//635 768//768 767//767 +f 767//767 633//633 635//635 +f 637//637 769//769 768//768 +f 768//768 635//635 637//637 +f 770//770 771//771 772//772 +f 773//773 772//772 771//771 +f 774//774 770//770 775//775 +f 772//772 775//775 770//770 +f 776//776 777//777 774//774 +f 774//774 775//775 776//776 +f 778//778 779//779 776//776 +f 777//777 776//776 779//779 +f 780//780 781//781 778//778 +f 779//779 778//778 781//781 +f 782//782 783//783 780//780 +f 781//781 780//780 783//783 +f 772//772 773//773 784//784 +f 785//785 784//784 773//773 +f 775//775 772//772 786//786 +f 784//784 786//786 772//772 +f 776//776 775//775 787//787 +f 786//786 787//787 775//775 +f 788//788 778//778 776//776 +f 776//776 787//787 788//788 +f 789//789 780//780 788//788 +f 778//778 788//788 780//780 +f 790//790 782//782 789//789 +f 780//780 789//789 782//782 +f 784//784 785//785 791//791 +f 792//792 791//791 785//785 +f 786//786 784//784 793//793 +f 791//791 793//793 784//784 +f 787//787 786//786 794//794 +f 793//793 794//794 786//786 +f 795//795 788//788 787//787 +f 787//787 794//794 795//795 +f 796//796 789//789 795//795 +f 788//788 795//795 789//789 +f 797//797 790//790 796//796 +f 789//789 796//796 790//790 +f 791//791 792//792 798//798 +f 799//799 798//798 792//792 +f 793//793 791//791 800//800 +f 798//798 800//800 791//791 +f 794//794 793//793 801//801 +f 800//800 801//801 793//793 +f 802//802 795//795 794//794 +f 794//794 801//801 802//802 +f 803//803 796//796 802//802 +f 795//795 802//802 796//796 +f 804//804 797//797 803//803 +f 796//796 803//803 797//797 +f 798//798 799//799 805//805 +f 806//806 805//805 799//799 +f 800//800 798//798 807//807 +f 805//805 807//807 798//798 +f 801//801 800//800 808//808 +f 807//807 808//808 800//800 +f 809//809 802//802 801//801 +f 801//801 808//808 809//809 +f 810//810 803//803 809//809 +f 802//802 809//809 803//803 +f 811//811 804//804 810//810 +f 803//803 810//810 804//804 +f 805//805 806//806 812//812 +f 813//813 812//812 806//806 +f 807//807 805//805 814//814 +f 812//812 814//814 805//805 +f 815//815 808//808 814//814 +f 807//807 814//814 808//808 +f 816//816 809//809 815//815 +f 808//808 815//815 809//809 +f 817//817 810//810 816//816 +f 809//809 816//816 810//810 +f 818//818 811//811 817//817 +f 810//810 817//817 811//811 +f 819//819 820//820 812//812 +f 812//812 813//813 819//819 +f 820//820 821//821 814//814 +f 814//814 812//812 820//820 +f 822//822 815//815 814//814 +f 814//814 821//821 822//822 +f 823//823 816//816 815//815 +f 815//815 822//822 823//823 +f 824//824 817//817 816//816 +f 816//816 823//823 824//824 +f 825//825 818//818 817//817 +f 817//817 824//824 825//825 +f 826//826 827//827 820//820 +f 820//820 819//819 826//826 +f 827//827 828//828 821//821 +f 821//821 820//820 827//827 +f 828//828 829//829 822//822 +f 822//822 821//821 828//828 +f 830//830 823//823 829//829 +f 822//822 829//829 823//823 +f 831//831 824//824 823//823 +f 823//823 830//830 831//831 +f 832//832 825//825 824//824 +f 824//824 831//831 832//832 +f 833//833 834//834 827//827 +f 827//827 826//826 833//833 +f 834//834 835//835 828//828 +f 828//828 827//827 834//834 +f 835//835 836//836 829//829 +f 829//829 828//828 835//835 +f 837//837 830//830 836//836 +f 829//829 836//836 830//830 +f 838//838 831//831 830//830 +f 830//830 837//837 838//838 +f 839//839 832//832 831//831 +f 831//831 838//838 839//839 +f 840//840 841//841 834//834 +f 834//834 833//833 840//840 +f 841//841 842//842 835//835 +f 835//835 834//834 841//841 +f 842//842 843//843 836//836 +f 836//836 835//835 842//842 +f 844//844 837//837 843//843 +f 836//836 843//843 837//837 +f 845//845 838//838 837//837 +f 837//837 844//844 845//845 +f 846//846 839//839 838//838 +f 838//838 845//845 846//846 +f 847//847 848//848 841//841 +f 841//841 840//840 847//847 +f 848//848 849//849 842//842 +f 842//842 841//841 848//848 +f 849//849 850//850 843//843 +f 843//843 842//842 849//849 +f 851//851 844//844 850//850 +f 843//843 850//850 844//844 +f 852//852 845//845 844//844 +f 844//844 851//851 852//852 +f 853//853 846//846 845//845 +f 845//845 852//852 853//853 +f 771//771 770//770 848//848 +f 848//848 847//847 771//771 +f 770//770 774//774 849//849 +f 849//849 848//848 770//770 +f 777//777 850//850 774//774 +f 849//849 774//774 850//850 +f 779//779 851//851 850//850 +f 850//850 777//777 779//779 +f 781//781 852//852 851//851 +f 851//851 779//779 781//781 +f 783//783 853//853 852//852 +f 852//852 781//781 783//783 +f 854//854 855//855 782//782 +f 783//783 782//782 855//855 +f 856//856 857//857 855//855 +f 855//855 854//854 856//856 +f 858//858 859//859 857//857 +f 857//857 856//856 858//858 +f 860//860 861//861 859//859 +f 859//859 858//858 860//860 +f 862//862 863//863 861//861 +f 861//861 860//860 862//862 +f 864//864 865//865 863//863 +f 863//863 862//862 864//864 +f 866//866 854//854 782//782 +f 782//782 790//790 866//866 +f 867//867 856//856 854//854 +f 854//854 866//866 867//867 +f 868//868 858//858 856//856 +f 856//856 867//867 868//868 +f 869//869 860//860 858//858 +f 858//858 868//868 869//869 +f 870//870 862//862 860//860 +f 860//860 869//869 870//870 +f 871//871 864//864 870//870 +f 862//862 870//870 864//864 +f 872//872 866//866 790//790 +f 790//790 797//797 872//872 +f 873//873 867//867 866//866 +f 866//866 872//872 873//873 +f 874//874 868//868 867//867 +f 867//867 873//873 874//874 +f 875//875 869//869 874//874 +f 868//868 874//874 869//869 +f 876//876 870//870 875//875 +f 869//869 875//875 870//870 +f 877//877 871//871 876//876 +f 870//870 876//876 871//871 +f 878//878 872//872 797//797 +f 797//797 804//804 878//878 +f 879//879 873//873 872//872 +f 872//872 878//878 879//879 +f 880//880 874//874 873//873 +f 873//873 879//879 880//880 +f 881//881 875//875 880//880 +f 874//874 880//880 875//875 +f 882//882 876//876 881//881 +f 875//875 881//881 876//876 +f 883//883 877//877 882//882 +f 876//876 882//882 877//877 +f 884//884 878//878 804//804 +f 804//804 811//811 884//884 +f 885//885 879//879 878//878 +f 878//878 884//884 885//885 +f 886//886 880//880 879//879 +f 879//879 885//885 886//886 +f 887//887 881//881 880//880 +f 880//880 886//886 887//887 +f 888//888 882//882 881//881 +f 881//881 887//887 888//888 +f 889//889 883//883 888//888 +f 882//882 888//888 883//883 +f 890//890 884//884 811//811 +f 811//811 818//818 890//890 +f 891//891 885//885 884//884 +f 884//884 890//890 891//891 +f 892//892 886//886 885//885 +f 885//885 891//891 892//892 +f 893//893 887//887 886//886 +f 886//886 892//892 893//893 +f 894//894 888//888 887//887 +f 887//887 893//893 894//894 +f 895//895 889//889 888//888 +f 888//888 894//894 895//895 +f 896//896 890//890 825//825 +f 818//818 825//825 890//890 +f 897//897 891//891 896//896 +f 890//890 896//896 891//891 +f 898//898 892//892 897//897 +f 891//891 897//897 892//892 +f 899//899 893//893 898//898 +f 892//892 898//898 893//893 +f 900//900 894//894 899//899 +f 893//893 899//899 894//894 +f 901//901 895//895 900//900 +f 894//894 900//900 895//895 +f 902//902 896//896 832//832 +f 825//825 832//832 896//896 +f 903//903 897//897 902//902 +f 896//896 902//902 897//897 +f 904//904 898//898 903//903 +f 897//897 903//903 898//898 +f 905//905 899//899 904//904 +f 898//898 904//904 899//899 +f 906//906 900//900 905//905 +f 899//899 905//905 900//900 +f 907//907 901//901 900//900 +f 900//900 906//906 907//907 +f 908//908 902//902 839//839 +f 832//832 839//839 902//902 +f 909//909 903//903 908//908 +f 902//902 908//908 903//903 +f 910//910 904//904 909//909 +f 903//903 909//909 904//904 +f 911//911 905//905 904//904 +f 904//904 910//910 911//911 +f 912//912 906//906 905//905 +f 905//905 911//911 912//912 +f 913//913 907//907 906//906 +f 906//906 912//912 913//913 +f 914//914 908//908 846//846 +f 839//839 846//846 908//908 +f 915//915 909//909 914//914 +f 908//908 914//914 909//909 +f 916//916 910//910 915//915 +f 909//909 915//915 910//910 +f 917//917 911//911 910//910 +f 910//910 916//916 917//917 +f 918//918 912//912 911//911 +f 911//911 917//917 918//918 +f 919//919 913//913 912//912 +f 912//912 918//918 919//919 +f 920//920 914//914 853//853 +f 846//846 853//853 914//914 +f 921//921 915//915 920//920 +f 914//914 920//920 915//915 +f 922//922 916//916 921//921 +f 915//915 921//921 916//916 +f 923//923 917//917 922//922 +f 916//916 922//922 917//917 +f 924//924 918//918 923//923 +f 917//917 923//923 918//918 +f 925//925 919//919 918//918 +f 918//918 924//924 925//925 +f 855//855 920//920 853//853 +f 853//853 783//783 855//855 +f 857//857 921//921 855//855 +f 920//920 855//855 921//921 +f 859//859 922//922 857//857 +f 921//921 857//857 922//922 +f 861//861 923//923 859//859 +f 922//922 859//859 923//923 +f 863//863 924//924 861//861 +f 923//923 861//861 924//924 +f 865//865 925//925 863//863 +f 924//924 863//863 925//925 +f 926//926 927//927 928//928 +f 928//928 929//929 926//926 +f 929//929 928//928 930//930 +f 930//930 931//931 929//929 +f 931//931 930//930 932//932 +f 932//932 933//933 931//931 +f 933//933 932//932 934//934 +f 934//934 935//935 933//933 +f 935//935 934//934 936//936 +f 936//936 937//937 935//935 +f 937//937 936//936 938//938 +f 939//939 938//938 936//936 +f 940//940 941//941 927//927 +f 928//928 927//927 941//941 +f 928//928 941//941 942//942 +f 942//942 930//930 928//928 +f 930//930 942//942 943//943 +f 943//943 932//932 930//930 +f 932//932 943//943 944//944 +f 944//944 934//934 932//932 +f 934//934 944//944 936//936 +f 945//945 936//936 944//944 +f 936//936 945//945 939//939 +f 946//946 939//939 945//945 +f 947//947 948//948 940//940 +f 941//941 940//940 948//948 +f 941//941 948//948 949//949 +f 949//949 942//942 941//941 +f 942//942 949//949 943//943 +f 950//950 943//943 949//949 +f 943//943 950//950 944//944 +f 951//951 944//944 950//950 +f 944//944 951//951 945//945 +f 952//952 945//945 951//951 +f 945//945 952//952 946//946 +f 953//953 946//946 952//952 +f 954//954 955//955 947//947 +f 948//948 947//947 955//955 +f 948//948 955//955 956//956 +f 956//956 949//949 948//948 +f 949//949 956//956 950//950 +f 957//957 950//950 956//956 +f 950//950 957//957 951//951 +f 958//958 951//951 957//957 +f 951//951 958//958 952//952 +f 959//959 952//952 958//958 +f 952//952 959//959 953//953 +f 960//960 953//953 959//959 +f 954//954 961//961 962//962 +f 962//962 955//955 954//954 +f 955//955 962//962 956//956 +f 963//963 956//956 962//962 +f 956//956 963//963 957//957 +f 964//964 957//957 963//963 +f 957//957 964//964 958//958 +f 965//965 958//958 964//964 +f 958//958 965//965 959//959 +f 966//966 959//959 965//965 +f 959//959 966//966 960//960 +f 967//967 960//960 966//966 +f 961//961 968//968 962//962 +f 969//969 962//962 968//968 +f 962//962 969//969 963//963 +f 970//970 963//963 969//969 +f 963//963 970//970 964//964 +f 971//971 964//964 970//970 +f 964//964 971//971 965//965 +f 972//972 965//965 971//971 +f 965//965 972//972 966//966 +f 973//973 966//966 972//972 +f 966//966 973//973 967//967 +f 974//974 967//967 973//973 +f 968//968 975//975 976//976 +f 976//976 969//969 968//968 +f 969//969 976//976 977//977 +f 977//977 970//970 969//969 +f 970//970 977//977 978//978 +f 978//978 971//971 970//970 +f 971//971 978//978 979//979 +f 979//979 972//972 971//971 +f 972//972 979//979 980//980 +f 980//980 973//973 972//972 +f 973//973 980//980 981//981 +f 981//981 974//974 973//973 +f 975//975 982//982 976//976 +f 983//983 976//976 982//982 +f 976//976 983//983 984//984 +f 984//984 977//977 976//976 +f 977//977 984//984 985//985 +f 985//985 978//978 977//977 +f 978//978 985//985 986//986 +f 986//986 979//979 978//978 +f 979//979 986//986 987//987 +f 987//987 980//980 979//979 +f 980//980 987//987 988//988 +f 988//988 981//981 980//980 +f 983//983 982//982 989//989 +f 989//989 990//990 983//983 +f 983//983 990//990 984//984 +f 991//991 984//984 990//990 +f 984//984 991//991 992//992 +f 992//992 985//985 984//984 +f 985//985 992//992 993//993 +f 993//993 986//986 985//985 +f 986//986 993//993 994//994 +f 994//994 987//987 986//986 +f 987//987 994//994 995//995 +f 995//995 988//988 987//987 +f 990//990 989//989 996//996 +f 996//996 997//997 990//990 +f 990//990 997//997 991//991 +f 998//998 991//991 997//997 +f 991//991 998//998 999//999 +f 999//999 992//992 991//991 +f 992//992 999//999 1000//1000 +f 1000//1000 993//993 992//992 +f 993//993 1000//1000 1001//1001 +f 1001//1001 994//994 993//993 +f 994//994 1001//1001 1002//1002 +f 1002//1002 995//995 994//994 +f 997//997 996//996 1003//1003 +f 1003//1003 1004//1004 997//997 +f 997//997 1004//1004 998//998 +f 1005//1005 998//998 1004//1004 +f 998//998 1005//1005 999//999 +f 1006//1006 999//999 1005//1005 +f 999//999 1006//1006 1000//1000 +f 1007//1007 1000//1000 1006//1006 +f 1000//1000 1007//1007 1008//1008 +f 1008//1008 1001//1001 1000//1000 +f 1001//1001 1008//1008 1009//1009 +f 1009//1009 1002//1002 1001//1001 +f 1003//1003 926//926 1004//1004 +f 929//929 1004//1004 926//926 +f 1004//1004 929//929 1005//1005 +f 931//931 1005//1005 929//929 +f 1005//1005 931//931 1006//1006 +f 933//933 1006//1006 931//931 +f 1006//1006 933//933 1007//1007 +f 935//935 1007//1007 933//933 +f 1007//1007 935//935 1008//1008 +f 937//937 1008//1008 935//935 +f 1008//1008 937//937 938//938 +f 938//938 1009//1009 1008//1008 +f 938//938 939//939 1010//1010 +f 1011//1011 1010//1010 939//939 +f 1010//1010 1011//1011 1012//1012 +f 1013//1013 1012//1012 1011//1011 +f 1012//1012 1013//1013 1014//1014 +f 1015//1015 1014//1014 1013//1013 +f 1016//1016 1017//1017 1014//1014 +f 1014//1014 1015//1015 1016//1016 +f 1018//1018 1019//1019 1017//1017 +f 1017//1017 1016//1016 1018//1018 +f 1020//1020 1021//1021 1019//1019 +f 1019//1019 1018//1018 1020//1020 +f 939//939 946//946 1011//1011 +f 1022//1022 1011//1011 946//946 +f 1011//1011 1022//1022 1013//1013 +f 1023//1023 1013//1013 1022//1022 +f 1013//1013 1023//1023 1015//1015 +f 1024//1024 1015//1015 1023//1023 +f 1025//1025 1016//1016 1015//1015 +f 1015//1015 1024//1024 1025//1025 +f 1026//1026 1018//1018 1016//1016 +f 1016//1016 1025//1025 1026//1026 +f 1027//1027 1020//1020 1018//1018 +f 1018//1018 1026//1026 1027//1027 +f 946//946 953//953 1022//1022 +f 1028//1028 1022//1022 953//953 +f 1022//1022 1028//1028 1023//1023 +f 1029//1029 1023//1023 1028//1028 +f 1023//1023 1029//1029 1024//1024 +f 1030//1030 1024//1024 1029//1029 +f 1031//1031 1025//1025 1024//1024 +f 1024//1024 1030//1030 1031//1031 +f 1032//1032 1026//1026 1025//1025 +f 1025//1025 1031//1031 1032//1032 +f 1033//1033 1027//1027 1026//1026 +f 1026//1026 1032//1032 1033//1033 +f 953//953 960//960 1028//1028 +f 1034//1034 1028//1028 960//960 +f 1028//1028 1034//1034 1029//1029 +f 1035//1035 1029//1029 1034//1034 +f 1029//1029 1035//1035 1030//1030 +f 1036//1036 1030//1030 1035//1035 +f 1037//1037 1031//1031 1030//1030 +f 1030//1030 1036//1036 1037//1037 +f 1038//1038 1032//1032 1031//1031 +f 1031//1031 1037//1037 1038//1038 +f 1039//1039 1033//1033 1032//1032 +f 1032//1032 1038//1038 1039//1039 +f 960//960 967//967 1034//1034 +f 1040//1040 1034//1034 967//967 +f 1034//1034 1040//1040 1035//1035 +f 1041//1041 1035//1035 1040//1040 +f 1035//1035 1041//1041 1036//1036 +f 1042//1042 1036//1036 1041//1041 +f 1043//1043 1037//1037 1036//1036 +f 1036//1036 1042//1042 1043//1043 +f 1044//1044 1038//1038 1037//1037 +f 1037//1037 1043//1043 1044//1044 +f 1045//1045 1039//1039 1038//1038 +f 1038//1038 1044//1044 1045//1045 +f 967//967 974//974 1040//1040 +f 1046//1046 1040//1040 974//974 +f 1040//1040 1046//1046 1041//1041 +f 1047//1047 1041//1041 1046//1046 +f 1041//1041 1047//1047 1042//1042 +f 1048//1048 1042//1042 1047//1047 +f 1049//1049 1043//1043 1042//1042 +f 1042//1042 1048//1048 1049//1049 +f 1050//1050 1044//1044 1043//1043 +f 1043//1043 1049//1049 1050//1050 +f 1051//1051 1045//1045 1044//1044 +f 1044//1044 1050//1050 1051//1051 +f 974//974 981//981 1052//1052 +f 1052//1052 1046//1046 974//974 +f 1046//1046 1052//1052 1053//1053 +f 1053//1053 1047//1047 1046//1046 +f 1047//1047 1053//1053 1054//1054 +f 1054//1054 1048//1048 1047//1047 +f 1055//1055 1049//1049 1054//1054 +f 1048//1048 1054//1054 1049//1049 +f 1056//1056 1050//1050 1055//1055 +f 1049//1049 1055//1055 1050//1050 +f 1057//1057 1051//1051 1056//1056 +f 1050//1050 1056//1056 1051//1051 +f 981//981 988//988 1058//1058 +f 1058//1058 1052//1052 981//981 +f 1052//1052 1058//1058 1059//1059 +f 1059//1059 1053//1053 1052//1052 +f 1053//1053 1059//1059 1060//1060 +f 1060//1060 1054//1054 1053//1053 +f 1061//1061 1055//1055 1060//1060 +f 1054//1054 1060//1060 1055//1055 +f 1062//1062 1056//1056 1061//1061 +f 1055//1055 1061//1061 1056//1056 +f 1063//1063 1057//1057 1062//1062 +f 1056//1056 1062//1062 1057//1057 +f 988//988 995//995 1064//1064 +f 1064//1064 1058//1058 988//988 +f 1058//1058 1064//1064 1065//1065 +f 1065//1065 1059//1059 1058//1058 +f 1059//1059 1065//1065 1066//1066 +f 1066//1066 1060//1060 1059//1059 +f 1067//1067 1061//1061 1066//1066 +f 1060//1060 1066//1066 1061//1061 +f 1068//1068 1062//1062 1067//1067 +f 1061//1061 1067//1067 1062//1062 +f 1069//1069 1063//1063 1068//1068 +f 1062//1062 1068//1068 1063//1063 +f 995//995 1002//1002 1070//1070 +f 1070//1070 1064//1064 995//995 +f 1064//1064 1070//1070 1071//1071 +f 1071//1071 1065//1065 1064//1064 +f 1065//1065 1071//1071 1072//1072 +f 1072//1072 1066//1066 1065//1065 +f 1073//1073 1067//1067 1072//1072 +f 1066//1066 1072//1072 1067//1067 +f 1074//1074 1068//1068 1073//1073 +f 1067//1067 1073//1073 1068//1068 +f 1075//1075 1069//1069 1074//1074 +f 1068//1068 1074//1074 1069//1069 +f 1002//1002 1009//1009 1076//1076 +f 1076//1076 1070//1070 1002//1002 +f 1070//1070 1076//1076 1077//1077 +f 1077//1077 1071//1071 1070//1070 +f 1071//1071 1077//1077 1078//1078 +f 1078//1078 1072//1072 1071//1071 +f 1079//1079 1073//1073 1078//1078 +f 1072//1072 1078//1078 1073//1073 +f 1080//1080 1074//1074 1079//1079 +f 1073//1073 1079//1079 1074//1074 +f 1081//1081 1075//1075 1080//1080 +f 1074//1074 1080//1080 1075//1075 +f 1009//1009 938//938 1010//1010 +f 1010//1010 1076//1076 1009//1009 +f 1076//1076 1010//1010 1012//1012 +f 1012//1012 1077//1077 1076//1076 +f 1077//1077 1012//1012 1014//1014 +f 1014//1014 1078//1078 1077//1077 +f 1017//1017 1079//1079 1014//1014 +f 1078//1078 1014//1014 1079//1079 +f 1019//1019 1080//1080 1017//1017 +f 1079//1079 1017//1017 1080//1080 +f 1021//1021 1081//1081 1019//1019 +f 1080//1080 1019//1019 1081//1081 +f 1082//1082 1083//1083 1084//1084 +f 1084//1084 1083//1083 1085//1085 +f 1085//1085 1083//1083 1086//1086 +f 1086//1086 1083//1083 1087//1087 +f 1087//1087 1083//1083 1088//1088 +f 1088//1088 1083//1083 1089//1089 +f 1089//1089 1083//1083 1090//1090 +f 1090//1090 1083//1083 1091//1091 +f 1091//1091 1083//1083 1092//1092 +f 1092//1092 1083//1083 1093//1093 +f 1093//1093 1083//1083 1094//1094 +f 1094//1094 1083//1083 1095//1095 +f 1095//1095 1083//1083 1096//1096 +f 1096//1096 1083//1083 1097//1097 +f 1097//1097 1083//1083 1098//1098 +f 1098//1098 1083//1083 1099//1099 +f 1099//1099 1083//1083 1100//1100 +f 1100//1100 1083//1083 1101//1101 +f 1101//1101 1083//1083 1102//1102 +f 1102//1102 1083//1083 1103//1103 +f 1103//1103 1083//1083 1104//1104 +f 1104//1104 1083//1083 1105//1105 +f 1105//1105 1083//1083 1106//1106 +f 1106//1106 1083//1083 1082//1082 +f 1107//1107 1108//1108 1084//1084 +f 1082//1082 1084//1084 1108//1108 +f 1109//1109 1110//1110 1108//1108 +f 1108//1108 1107//1107 1109//1109 +f 1111//1111 1112//1112 1110//1110 +f 1110//1110 1109//1109 1111//1111 +f 1113//1113 1114//1114 1112//1112 +f 1112//1112 1111//1111 1113//1113 +f 1115//1115 1107//1107 1085//1085 +f 1084//1084 1085//1085 1107//1107 +f 1116//1116 1109//1109 1107//1107 +f 1107//1107 1115//1115 1116//1116 +f 1117//1117 1111//1111 1109//1109 +f 1109//1109 1116//1116 1117//1117 +f 1118//1118 1113//1113 1111//1111 +f 1111//1111 1117//1117 1118//1118 +f 1119//1119 1115//1115 1086//1086 +f 1085//1085 1086//1086 1115//1115 +f 1120//1120 1116//1116 1115//1115 +f 1115//1115 1119//1119 1120//1120 +f 1121//1121 1117//1117 1116//1116 +f 1116//1116 1120//1120 1121//1121 +f 1122//1122 1118//1118 1117//1117 +f 1117//1117 1121//1121 1122//1122 +f 1123//1123 1119//1119 1086//1086 +f 1086//1086 1087//1087 1123//1123 +f 1124//1124 1120//1120 1123//1123 +f 1119//1119 1123//1123 1120//1120 +f 1125//1125 1121//1121 1124//1124 +f 1120//1120 1124//1124 1121//1121 +f 1126//1126 1122//1122 1125//1125 +f 1121//1121 1125//1125 1122//1122 +f 1127//1127 1123//1123 1087//1087 +f 1087//1087 1088//1088 1127//1127 +f 1128//1128 1124//1124 1127//1127 +f 1123//1123 1127//1127 1124//1124 +f 1129//1129 1125//1125 1128//1128 +f 1124//1124 1128//1128 1125//1125 +f 1130//1130 1126//1126 1129//1129 +f 1125//1125 1129//1129 1126//1126 +f 1131//1131 1127//1127 1088//1088 +f 1088//1088 1089//1089 1131//1131 +f 1132//1132 1128//1128 1131//1131 +f 1127//1127 1131//1131 1128//1128 +f 1133//1133 1129//1129 1132//1132 +f 1128//1128 1132//1132 1129//1129 +f 1134//1134 1130//1130 1133//1133 +f 1129//1129 1133//1133 1130//1130 +f 1135//1135 1131//1131 1090//1090 +f 1089//1089 1090//1090 1131//1131 +f 1136//1136 1132//1132 1131//1131 +f 1131//1131 1135//1135 1136//1136 +f 1137//1137 1133//1133 1132//1132 +f 1132//1132 1136//1136 1137//1137 +f 1138//1138 1134//1134 1133//1133 +f 1133//1133 1137//1137 1138//1138 +f 1139//1139 1135//1135 1091//1091 +f 1090//1090 1091//1091 1135//1135 +f 1140//1140 1136//1136 1135//1135 +f 1135//1135 1139//1139 1140//1140 +f 1141//1141 1137//1137 1136//1136 +f 1136//1136 1140//1140 1141//1141 +f 1142//1142 1138//1138 1137//1137 +f 1137//1137 1141//1141 1142//1142 +f 1143//1143 1139//1139 1092//1092 +f 1091//1091 1092//1092 1139//1139 +f 1144//1144 1140//1140 1139//1139 +f 1139//1139 1143//1143 1144//1144 +f 1145//1145 1141//1141 1140//1140 +f 1140//1140 1144//1144 1145//1145 +f 1146//1146 1142//1142 1141//1141 +f 1141//1141 1145//1145 1146//1146 +f 1147//1147 1143//1143 1092//1092 +f 1092//1092 1093//1093 1147//1147 +f 1148//1148 1144//1144 1147//1147 +f 1143//1143 1147//1147 1144//1144 +f 1149//1149 1145//1145 1148//1148 +f 1144//1144 1148//1148 1145//1145 +f 1150//1150 1146//1146 1149//1149 +f 1145//1145 1149//1149 1146//1146 +f 1151//1151 1147//1147 1093//1093 +f 1093//1093 1094//1094 1151//1151 +f 1152//1152 1148//1148 1151//1151 +f 1147//1147 1151//1151 1148//1148 +f 1153//1153 1149//1149 1152//1152 +f 1148//1148 1152//1152 1149//1149 +f 1154//1154 1150//1150 1153//1153 +f 1149//1149 1153//1153 1150//1150 +f 1155//1155 1151//1151 1094//1094 +f 1094//1094 1095//1095 1155//1155 +f 1156//1156 1152//1152 1155//1155 +f 1151//1151 1155//1155 1152//1152 +f 1157//1157 1153//1153 1156//1156 +f 1152//1152 1156//1156 1153//1153 +f 1158//1158 1154//1154 1157//1157 +f 1153//1153 1157//1157 1154//1154 +f 1159//1159 1155//1155 1096//1096 +f 1095//1095 1096//1096 1155//1155 +f 1160//1160 1156//1156 1155//1155 +f 1155//1155 1159//1159 1160//1160 +f 1161//1161 1157//1157 1156//1156 +f 1156//1156 1160//1160 1161//1161 +f 1162//1162 1158//1158 1157//1157 +f 1157//1157 1161//1161 1162//1162 +f 1163//1163 1159//1159 1097//1097 +f 1096//1096 1097//1097 1159//1159 +f 1164//1164 1160//1160 1159//1159 +f 1159//1159 1163//1163 1164//1164 +f 1165//1165 1161//1161 1160//1160 +f 1160//1160 1164//1164 1165//1165 +f 1166//1166 1162//1162 1161//1161 +f 1161//1161 1165//1165 1166//1166 +f 1167//1167 1163//1163 1098//1098 +f 1097//1097 1098//1098 1163//1163 +f 1168//1168 1164//1164 1163//1163 +f 1163//1163 1167//1167 1168//1168 +f 1169//1169 1165//1165 1164//1164 +f 1164//1164 1168//1168 1169//1169 +f 1170//1170 1166//1166 1165//1165 +f 1165//1165 1169//1169 1170//1170 +f 1171//1171 1167//1167 1098//1098 +f 1098//1098 1099//1099 1171//1171 +f 1172//1172 1168//1168 1171//1171 +f 1167//1167 1171//1171 1168//1168 +f 1173//1173 1169//1169 1172//1172 +f 1168//1168 1172//1172 1169//1169 +f 1174//1174 1170//1170 1173//1173 +f 1169//1169 1173//1173 1170//1170 +f 1175//1175 1171//1171 1099//1099 +f 1099//1099 1100//1100 1175//1175 +f 1176//1176 1172//1172 1175//1175 +f 1171//1171 1175//1175 1172//1172 +f 1177//1177 1173//1173 1176//1176 +f 1172//1172 1176//1176 1173//1173 +f 1178//1178 1174//1174 1177//1177 +f 1173//1173 1177//1177 1174//1174 +f 1179//1179 1175//1175 1100//1100 +f 1100//1100 1101//1101 1179//1179 +f 1180//1180 1176//1176 1179//1179 +f 1175//1175 1179//1179 1176//1176 +f 1181//1181 1177//1177 1180//1180 +f 1176//1176 1180//1180 1177//1177 +f 1182//1182 1178//1178 1181//1181 +f 1177//1177 1181//1181 1178//1178 +f 1183//1183 1179//1179 1102//1102 +f 1101//1101 1102//1102 1179//1179 +f 1184//1184 1180//1180 1179//1179 +f 1179//1179 1183//1183 1184//1184 +f 1185//1185 1181//1181 1180//1180 +f 1180//1180 1184//1184 1185//1185 +f 1186//1186 1182//1182 1181//1181 +f 1181//1181 1185//1185 1186//1186 +f 1187//1187 1183//1183 1103//1103 +f 1102//1102 1103//1103 1183//1183 +f 1188//1188 1184//1184 1183//1183 +f 1183//1183 1187//1187 1188//1188 +f 1189//1189 1185//1185 1184//1184 +f 1184//1184 1188//1188 1189//1189 +f 1190//1190 1186//1186 1185//1185 +f 1185//1185 1189//1189 1190//1190 +f 1191//1191 1187//1187 1104//1104 +f 1103//1103 1104//1104 1187//1187 +f 1192//1192 1188//1188 1187//1187 +f 1187//1187 1191//1191 1192//1192 +f 1193//1193 1189//1189 1188//1188 +f 1188//1188 1192//1192 1193//1193 +f 1194//1194 1190//1190 1189//1189 +f 1189//1189 1193//1193 1194//1194 +f 1195//1195 1191//1191 1104//1104 +f 1104//1104 1105//1105 1195//1195 +f 1196//1196 1192//1192 1195//1195 +f 1191//1191 1195//1195 1192//1192 +f 1197//1197 1193//1193 1196//1196 +f 1192//1192 1196//1196 1193//1193 +f 1198//1198 1194//1194 1197//1197 +f 1193//1193 1197//1197 1194//1194 +f 1199//1199 1195//1195 1105//1105 +f 1105//1105 1106//1106 1199//1199 +f 1200//1200 1196//1196 1199//1199 +f 1195//1195 1199//1199 1196//1196 +f 1201//1201 1197//1197 1200//1200 +f 1196//1196 1200//1200 1197//1197 +f 1202//1202 1198//1198 1201//1201 +f 1197//1197 1201//1201 1198//1198 +f 1108//1108 1199//1199 1106//1106 +f 1106//1106 1082//1082 1108//1108 +f 1110//1110 1200//1200 1108//1108 +f 1199//1199 1108//1108 1200//1200 +f 1112//1112 1201//1201 1110//1110 +f 1200//1200 1110//1110 1201//1201 +f 1114//1114 1202//1202 1112//1112 +f 1201//1201 1112//1112 1202//1202 diff --git a/css/app.css b/css/app.css new file mode 100644 index 00000000..37a92321 --- /dev/null +++ b/css/app.css @@ -0,0 +1,151 @@ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +a, .btn-link { + color: #0366d6; +} + +.body-flex { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.table { + width: 100%; + margin-bottom: 1rem; + border-collapse: collapse; +} + + .table > tbody { + padding: 1rem; + + border-top-color: black; + border-top-style: dotted; + border-top-width: 0.2rem; + + border-bottom-color: black; + border-bottom-style: dotted; + border-bottom-width: 0.2rem; + } + + .table > tbody > tr > td { + padding: 1rem; + + border-left-color: black; + border-left-style: dotted; + border-left-width: 0.2rem; + + border-right-color: black; + border-right-style: dotted; + border-right-width: 0.2rem; + } + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +app { + position: relative; + display: flex; + flex-direction: column; +} + +.top-row { + height: 3.5rem; + display: flex; + align-items: center; +} + +.main { + flex: 1; + width: 100%; +} + + .main .top-row { + background-color: #f7f7f7; + border-bottom: 1px solid #d6d5d5; + justify-content: flex-end; + } + + .main .top-row > a, .main .top-row .btn-link { + white-space: nowrap; + margin-left: 1.5rem; + } + +.main .top-row a:first-child { + overflow: hidden; + text-overflow: ellipsis; +} + +.content { + padding-top: 1.1rem; +} + +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid red; +} + +.validation-message { + color: red; +} + +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + +#blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; +} + +@media (max-width: 767.98px) { + .main .top-row.auth { + justify-content: space-between; + } + + .main .top-row a, .main .top-row .btn-link { + margin-left: 0; + } +} + +@media (min-width: 768px) { + app { + flex-direction: row; + } + + .main .top-row { + position: sticky; + top: 0; + } + + .main > div { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } + + .navbar-toggler { + display: none; + } +} \ No newline at end of file diff --git a/css/components/TextEdit/styles.css b/css/components/TextEdit/styles.css new file mode 100644 index 00000000..00655572 --- /dev/null +++ b/css/components/TextEdit/styles.css @@ -0,0 +1,9 @@ +.text-edit {} + +.text-edit-editor-container {} + +.text-edit-editor {} + +.text-edit-preview-container { + all: initial; +} diff --git a/css/dabby/home.css b/css/dabby/home.css new file mode 100644 index 00000000..06a3fe74 --- /dev/null +++ b/css/dabby/home.css @@ -0,0 +1,11 @@ +.dancing-skeletons { + background-image: url("/img/dabby/dancing-skeleton.gif"); + background-repeat: round; + background-size: contain; + height: 6rem; + width: 100%; +} + +.content { + font-size: 1.5rem; +} \ No newline at end of file diff --git a/css/dabby/ramen-blog/ramen-blog.css b/css/dabby/ramen-blog/ramen-blog.css new file mode 100644 index 00000000..c6d2a6ed --- /dev/null +++ b/css/dabby/ramen-blog/ramen-blog.css @@ -0,0 +1,83 @@ +#blog { + margin-top: 2rem; + display: grid; + grid-template-columns: 1fr 4fr 1fr; + grid-template-areas: "ramen-bag ramen-bag-content ramen-bag-content" + "ramen-ingredients-content ramen-ingredients-content ramen-ingredients" + "ramen-nutrition-facts ramen-nutrition-facts-content ramen-nutrition-facts-content" + "ramen-stove-content ramen-stove-content ramen-stove" + "ramen-bowl ramen-bowl-content ramen-bowl-content"; + gap: 1rem; +} + +#ramen-bag { + grid-area: ramen-bag; + width: 20rem; +} + +#ramen-bag-content { + grid-area: ramen-bag-content; +} + +#ramen-bowl { + grid-area: ramen-bowl; + width: 20rem; +} + +#ramen-bowl-content { + grid-area: ramen-bowl-content; +} + +#ramen-ingredients { + grid-area: ramen-ingredients; + width: 20rem; +} + +#ramen-ingredients-content { + grid-area: ramen-ingredients-content; +} + +#ramen-nutrition-facts { + grid-area: ramen-nutrition-facts; + width: 20rem; +} + +#ramen-nutrition-facts-content { + grid-area: ramen-nutrition-facts-content; +} + +#ramen-stove { + grid-area: ramen-stove; + width: 20rem; +} + +#ramen-stove-content { + grid-area: ramen-stove-content; +} + +.blog-content { + font-size: 2rem; +} + +@media screen and (max-width: 650px) { + #blog { + display: grid; + grid-template-columns: 1fr; + grid-template-areas: "ramen-bag" + "ramen-bag-content" + "ramen-ingredients" + "ramen-ingredients-content" + "ramen-nutrition-facts" + "ramen-nutrition-facts-content" + "ramen-stove" + "ramen-stove-content" + "ramen-bowl" + "ramen-bowl-content"; + gap: 2rem; + } + + .blog-image { + justify-self: center; + width: 80%; + } +} \ No newline at end of file diff --git a/css/dabby/styles.css b/css/dabby/styles.css new file mode 100644 index 00000000..d2001755 --- /dev/null +++ b/css/dabby/styles.css @@ -0,0 +1,18 @@ +@font-face { + font-family: 'NewRocker'; + src: url('/fonts/dabby/newrocker/newrocker.ttf'); +} + +body { + background-color: #151515; + color: #D0D0D0; +} + +#body { + font-family: 'NewRocker'; + margin: 2rem 2rem; +} + +.top-row { + display: none; +} diff --git a/css/jorson/games/corporationTycoon.css b/css/jorson/games/corporationTycoon.css new file mode 100644 index 00000000..89eb6ad7 --- /dev/null +++ b/css/jorson/games/corporationTycoon.css @@ -0,0 +1,6 @@ +#corporation-tycoon-container { + margin: auto; + display: grid; + justify-content: center; + align-items: center; +} diff --git a/css/jorson/games/kaiju.css b/css/jorson/games/kaiju.css new file mode 100644 index 00000000..3ea704c2 --- /dev/null +++ b/css/jorson/games/kaiju.css @@ -0,0 +1,6 @@ +#kaiju-container { + margin: auto; + display: grid; + justify-content: center; + align-items: center; +} diff --git a/css/jorson/games/nox.css b/css/jorson/games/nox.css new file mode 100644 index 00000000..5c6d8880 --- /dev/null +++ b/css/jorson/games/nox.css @@ -0,0 +1,6 @@ +#nox-container { + margin: auto; + display: grid; + justify-content: center; + align-items: center; +} diff --git a/css/jorson/games/pong.css b/css/jorson/games/pong.css new file mode 100644 index 00000000..73f962b3 --- /dev/null +++ b/css/jorson/games/pong.css @@ -0,0 +1,6 @@ +#pong-container { + margin: auto; + display: grid; + justify-content: center; + align-items: center; +} diff --git a/css/jorson/home.css b/css/jorson/home.css new file mode 100644 index 00000000..bbedae15 --- /dev/null +++ b/css/jorson/home.css @@ -0,0 +1,52 @@ +.home-body-image { + height: auto; + width: 15rem; +} + +#home-body-content { + display: grid; + grid-template-columns: 1fr 4fr 1fr; + grid-template-areas: "who-am-i-heading who-am-i-heading who-am-i-heading" + "who-am-i who-am-i who-am-i-image" + "what-do-i-care-about-heading what-do-i-care-about-heading what-do-i-care-about-heading" + "what-do-i-care-about-image what-do-i-care-about what-do-i-care-about"; + column-gap: 2rem; +} + +#who-am-i { + grid-area: who-am-i; +} + +#who-am-i-heading { + grid-area: who-am-i-heading; +} + +#who-am-i-image { + grid-area: who-am-i-image; +} + +#what-do-i-care-about { + grid-area: what-do-i-care-about; +} + +#what-do-i-care-about-heading { + grid-area: what-do-i-care-about-heading; +} + +#what-do-i-care-about-image { + grid-area: what-do-i-care-about-image; +} + +@media screen and (max-width: 650px) { + #home-body-content { + display: grid; + grid-template-columns: 1fr; + grid-template-areas: "who-am-i-heading" + "who-am-i-image" + "who-am-i" + "what-do-i-care-about-heading" + "what-do-i-care-about-image" + "what-do-i-care-about"; + gap: 2rem; + } +} diff --git a/css/jorson/styles.css b/css/jorson/styles.css new file mode 100644 index 00000000..83f1b58a --- /dev/null +++ b/css/jorson/styles.css @@ -0,0 +1,19 @@ +@import url('https://fonts.googleapis.com/css?family=Montserrat'); + +#body { + font-family: Montserrat, sans-serif; + margin: 2rem 2rem; +} + +.top-row { + display: none; +} + +.recipe-image-item { + list-style-type: none; +} + +.recipe-image-item div img { + height: 30rem; + transform: rotate(270deg); +} diff --git a/css/nbarlow/home.css b/css/nbarlow/home.css new file mode 100644 index 00000000..7324cf73 --- /dev/null +++ b/css/nbarlow/home.css @@ -0,0 +1,11 @@ +.creeper-crunch-me { + background-image: url("/img/nbarlow/creeper-crunch-me.jpg"); + background-repeat: round; + background-size: contain; + height: 30rem; + width: 100%; +} + +.content { + font-size: 1.5rem; +} \ No newline at end of file diff --git a/css/nbarlow/how-old-am-i/how-old-am-i.css b/css/nbarlow/how-old-am-i/how-old-am-i.css new file mode 100644 index 00000000..e5ae76b4 --- /dev/null +++ b/css/nbarlow/how-old-am-i/how-old-am-i.css @@ -0,0 +1,4 @@ +input#birthdate { + border-radius: 5px; + border-color: #d69503; +} \ No newline at end of file diff --git a/css/nbarlow/styles.css b/css/nbarlow/styles.css new file mode 100644 index 00000000..3207ae8f --- /dev/null +++ b/css/nbarlow/styles.css @@ -0,0 +1,26 @@ +@font-face { + font-family: 'Rubik'; + src: url('/fonts/nbarlow/Rubik-Regular.ttf'); +} + +body { + background-color: #274194; + color: #D0D0D0; +} + +#body { + font-family: 'Rubik'; + margin: 2rem 2rem; +} + +.top-row { + display: none; +} + +a { + color: #d69503; +} + +a:hover { + color: #bd76d3; +} \ No newline at end of file diff --git a/css/open-iconic/FONT-LICENSE b/css/open-iconic/FONT-LICENSE new file mode 100644 index 00000000..8ae8650d --- /dev/null +++ b/css/open-iconic/FONT-LICENSE @@ -0,0 +1,86 @@ +SIL OPEN FONT LICENSE Version 1.1 + +Copyright (c) 2014 Waybury + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/css/open-iconic/ICON-LICENSE b/css/open-iconic/ICON-LICENSE new file mode 100644 index 00000000..af73356f --- /dev/null +++ b/css/open-iconic/ICON-LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Waybury + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/css/open-iconic/README.md b/css/open-iconic/README.md new file mode 100644 index 00000000..e2e831ed --- /dev/null +++ b/css/open-iconic/README.md @@ -0,0 +1,114 @@ +[Open Iconic v1.1.1](http://useiconic.com/open) +=========== + +### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons) + + + +## What's in Open Iconic? + +* 223 icons designed to be legible down to 8 pixels +* Super-light SVG files - 61.8 for the entire set +* SVG sprite—the modern replacement for icon fonts +* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats +* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats +* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px. + + +## Getting Started + +#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections. + +### General Usage + +#### Using Open Iconic's SVGs + +We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute). + +``` +icon name +``` + +#### Using Open Iconic's SVG Sprite + +Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. + +Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* + +``` + + + +``` + +Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. + +``` +.icon { + width: 16px; + height: 16px; +} +``` + +Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. + +``` +.icon-account-login { + fill: #f00; +} +``` + +To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). + +#### Using Open Iconic's Icon Font... + + +##### …with Bootstrap + +You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` + + +``` + +``` + + +``` + +``` + +##### …with Foundation + +You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` + +``` + +``` + + +``` + +``` + +##### …on its own + +You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` + +``` + +``` + +``` + +``` + + +## License + +### Icons + +All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). + +### Fonts + +All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). diff --git a/css/open-iconic/font/css/open-iconic-bootstrap.min.css b/css/open-iconic/font/css/open-iconic-bootstrap.min.css new file mode 100644 index 00000000..4664f2e8 --- /dev/null +++ b/css/open-iconic/font/css/open-iconic-bootstrap.min.css @@ -0,0 +1 @@ +@font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} \ No newline at end of file diff --git a/css/open-iconic/font/fonts/open-iconic.eot b/css/open-iconic/font/fonts/open-iconic.eot new file mode 100644 index 00000000..f98177db Binary files /dev/null and b/css/open-iconic/font/fonts/open-iconic.eot differ diff --git a/css/open-iconic/font/fonts/open-iconic.otf b/css/open-iconic/font/fonts/open-iconic.otf new file mode 100644 index 00000000..f6bd6846 Binary files /dev/null and b/css/open-iconic/font/fonts/open-iconic.otf differ diff --git a/css/open-iconic/font/fonts/open-iconic.svg b/css/open-iconic/font/fonts/open-iconic.svg new file mode 100644 index 00000000..cf429428 --- /dev/null +++ b/css/open-iconic/font/fonts/open-iconic.svg @@ -0,0 +1,543 @@ + + + + + +Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014 + By P.J. Onori +Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/css/open-iconic/font/fonts/open-iconic.ttf b/css/open-iconic/font/fonts/open-iconic.ttf new file mode 100644 index 00000000..fab60486 Binary files /dev/null and b/css/open-iconic/font/fonts/open-iconic.ttf differ diff --git a/css/open-iconic/font/fonts/open-iconic.woff b/css/open-iconic/font/fonts/open-iconic.woff new file mode 100644 index 00000000..f9309988 Binary files /dev/null and b/css/open-iconic/font/fonts/open-iconic.woff differ diff --git a/css/torson/home.css b/css/torson/home.css new file mode 100644 index 00000000..e69de29b diff --git a/css/torson/styles.css b/css/torson/styles.css new file mode 100644 index 00000000..cf132d80 --- /dev/null +++ b/css/torson/styles.css @@ -0,0 +1,10 @@ +@import url('https://fonts.googleapis.com/css?family=Montserrat'); + +#body { + font-family: Montserrat, sans-serif; + margin: 2rem 2rem; +} + +.top-row { + display: none; +} diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/data/dabby/blogs/ramen/blogs.json b/data/dabby/blogs/ramen/blogs.json new file mode 100644 index 00000000..61de6808 --- /dev/null +++ b/data/dabby/blogs/ramen/blogs.json @@ -0,0 +1,9 @@ +[ + { + "date": "2020-09-17", + "title": "Ottogi: Yeul Ramen (Super Spicy)", + "content": { + "text": "

This is going to be my first review, and we are setting the bar pretty low today. I am reviewing Ottogi brand yeul ramen. According to the packaging, this ramen should be super spicy: a claim I will be testing. The bag feels nice to my bony fingers. Crinkling loud and clear for my spoopy cats to hear. They came to investigate and managed to steal my right arm.

The noodles are a classic mix of wheat flour, tapioca, various starches, and wheat gluten. The soup mix is a mix of spice and other flavors. The spice is made up of a mix of red pepper, black pepper, and chili extract. Other flavors include kelp extract, dried chinese cabbage, and garlic. One interesting ingredient is green tea extract at the end. Is this normal? I don't have a clue. I'm just a bone daddy looking for a tasty time.

20mg calcium.

Once the water started boiling, I tossed in the contents of the soup packets and started mixing. I couldn't smell anything as it cooked. I wouldn't blame the ramen for my lack of olfaction.

After 4 minutes of cooking, was it worth it? The noodles were boring and thin. They barely seem to have increased in volume after cooking. Was it super spicy? Hardly. I downed the bowl and it may have left my jawbone red, but it failed to burn through the flesh I have left. One unique characteristic was the broth itself. It tasted quite similar to kimchi, stronger in flavor than other ramen broths I have encountered before. While not very spicy, the broth was uniquely flavorful and the noodles were standard fare. 4/10

" + } + } +] \ No newline at end of file diff --git a/data/jorson/blogs/food/_template.html b/data/jorson/blogs/food/_template.html new file mode 100644 index 00000000..1701dfd2 --- /dev/null +++ b/data/jorson/blogs/food/_template.html @@ -0,0 +1,43 @@ +
+ + +
+

+ Ingredients +

+
    +
  • + TODO: Ingredient +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + TODO: Direction +
  2. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/banana-bread.html b/data/jorson/blogs/food/banana-bread.html new file mode 100644 index 00000000..0994d236 --- /dev/null +++ b/data/jorson/blogs/food/banana-bread.html @@ -0,0 +1,87 @@ +
+
+

+ Images +

+
    +
  • +
    + Notecard containing the original ingredients for the following banana bread recipe +
    +
  • +
  • +
    + Notecard containing the original directions for the following banana bread recipe +
    +
  • +
+
+ +
+

+ Ingredients +

+
    +
  • + 3 bananas, overripe +
  • +
  • + 1 1/2 cups of flour +
  • +
  • + 1 cup of sugar +
  • +
  • + 1/2 tsp of baking soda +
  • +
  • + dash of salt +
  • +
  • + 1 egg (real or flax egg) +
  • +
  • + 1/2 stick of butter or coconut oil +
  • +
  • + 4 tbsp chocolate chips or M&M's +
  • +
  • + (Optional) 1/2 cup of sourdough starter +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Preheat oven to 325 +
  2. +
  3. + Mash bananas in a large bowl +
  4. +
  5. + Put flour, sugar, baking soda, salt, egg, and starter in the bowl +
  6. +
  7. + Melt butter and add it to the bowl, stirring until just blended +
  8. +
  9. + Pour into a greased load pan +
  10. +
  11. + Sprinkle on chocolate chips +
  12. +
  13. + Bake for 70 minutes, or until a toothpick comes out clean +
  14. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/beef-chili.html b/data/jorson/blogs/food/beef-chili.html new file mode 100644 index 00000000..f4902c75 --- /dev/null +++ b/data/jorson/blogs/food/beef-chili.html @@ -0,0 +1,176 @@ +
+ + +
+

Chili Powder

+
+

Ingredients

+
    +
  • + Dried chilis +
  • +
  • + 2 oz masa harina or tortilla chips +
  • +
  • + 2 tbsp ground cumin +
  • +
  • + 1 tbsp ground paprika +
  • +
  • + 1 tbsp garlic powder +
  • +
  • + 1 tbsp grouind coriander seed +
  • +
  • + 2 tsp dried oregano +
  • +
  • + 2 tsp black pepper +
  • +
  • + 1/2 tsp dried thyme +
  • +
+
+
+

Directions

+

+

    +
  1. + Take out stems and seeds +
  2. +
  3. + Throw dried chilis into hot Dutch oven +
  4. +
  5. + Toast the chilis for 4-6 minutes until you smell them, DO NOT THEM SMOKE +
  6. +
  7. + Put roasted chilis in food processor +
  8. +
  9. + Add 1 oz of tortilla chips/masa to thicken the chili powder +
  10. +
  11. + Add all of your spices +
  12. +
  13. + Process +
  14. +
+

+
+
+ +
+

Chili

+
+

Ingredients

+
    +
  • + 2 lbs 85% lean beef; if you want to use venison, use venison at a 25% ratio to 75% ratio of 73% lean beef +
  • +
  • + 3/4 tsp baking soda (for browning) +
  • +
  • + 1 1/2 tsp salt (for browning) +
  • +
  • + 2 tbsp water (for browning) +
  • +
  • + 14.5 oz whole peeled tomatoes +
  • +
  • + 1 tbsp olive oil or lard +
  • +
  • + 2 tsp sugar +
  • +
  • + 1 diced onion +
  • +
  • + 2 garlic cloves +
  • +
  • + 1 can of pinto beans +
  • +
  • + 2 tbsp of Apple Cider Vinegar (ACV) +
  • +
  • + Homemade chili powder +
  • +
+
+
+

Directions

+

+

    +
  1. + Mix meat together with the elements for browning, making sure not to use a metal bowl, and letting sit for 20 minutes before cooking +
  2. +
  3. + Process the whole peeled tomatoes into a smooth sauce +
  4. +
  5. + In the dutch oven, cook the diced onion in the oil/lard over medium high heat, until soft +
  6. +
  7. + Add garlic to the dutch oven, simmering for 1 minute +
  8. +
  9. + Add beef all at once to the dutch oven and cook for 12 to 14 minutes until brown +
  10. +
  11. + Add the homemade chili powder, once the beef's fat releases +
  12. +
  13. + Add a can of pinto beans, including the liquid +
  14. +
  15. + Add 2 tbsp sugar +
  16. +
  17. + Add tomatoes from food processor +
  18. +
  19. + Bring heat up to a simmer +
  20. +
  21. + Cover dutch oven, remove from heat, and move to a 275F oven +
  22. +
  23. + Cook in the oven for 1.5 to 2 hours +
  24. +
  25. + Mix in the layer of fat on the top of the chili +
  26. +
  27. + Add 2 tbsp of ACV and garnish with salt +
  28. +
+

+
+
+
+ diff --git a/data/jorson/blogs/food/biscuits.html b/data/jorson/blogs/food/biscuits.html new file mode 100644 index 00000000..ae29788d --- /dev/null +++ b/data/jorson/blogs/food/biscuits.html @@ -0,0 +1,146 @@ +
+ + +
+

Sawmill Gravy

+
+

Ingredients

+
    +
  • + 1 pound bulk breakfast sausage +
  • +
  • + 1/4 cup flour +
  • +
  • + 2 cups milk +
  • +
  • + Salt and pepper +
  • +
+
+
+

Directions

+

+

    +
  1. + Cook sausage in a cast iron skillet +
  2. +
  3. + When done, remove sausage from pan and pour off all but 2 tablespoons of fat +
  4. +
  5. + Whisk flour into the fat and cook over low heat for 5 minutes +
  6. +
  7. + Remove pan from heat and whisk in milk a little at a time +
  8. +
  9. + Return to medium-high heat and stir occasionally while the gravy comes to a simmer and thickens (Be sure to scrape up any brown bits that might be stuck to the bottom of the pan, that's where the flavor is) +
  10. +
  11. + Check seasoning +
  12. +
  13. + Add crumbled sausage +
  14. +
  15. + Serve over toast or biscuits +
  16. +
+

+
+
+ +
+

Biscuits

+
+

Ingredients

+
    +
  • + 2 cups flour +
  • +
  • + 4 teaspoons baking powder +
  • +
  • + 1/4 teaspoon baking soda +
  • +
  • + 3/4 teaspoon salt +
  • +
  • + 2 tablespoons butter +
  • +
  • + 2 tablespoons shortening +
  • +
+
+
+

Directions

+

+

    +
  1. + Preheat oven to 450 degrees +
  2. + In a large mixing bowl, combine flour, baking powder, baking soda and salt +
  3. +
  4. + Using your fingertips, rub butter and shortening into dry ingredients until mixture looks like crumbs (The faster the better, you don't want the fats to melt) +
  5. +
  6. + Make a well in the center and pour in the chilled buttermilk +
  7. +
  8. + Stir just until the dough comes together (The dough will be very sticky) +
  9. +
  10. + Turn dough onto floured surface, dust top with flour and gently fold dough over on itself 5 or 6 times +
  11. +
  12. + Press into a 1-inch thick round +
  13. +
  14. + Cut out biscuits with a 2-inch cutter, being sure to push straight down through the dough +
  15. +
  16. + Place biscuits on baking sheet so that they just touch +
  17. +
  18. + Reform scrap dough, working it as little as possible and continue cutting (Biscuits from the second pass will not be quite as light as those from the first, but hey, that's life) +
  19. +
  20. + Bake until biscuits are tall and light gold on top, 15 to 20 minutes +
  21. +
+

+
+
+
+ diff --git a/data/jorson/blogs/food/blogs.json b/data/jorson/blogs/food/blogs.json new file mode 100644 index 00000000..fb94dc0b --- /dev/null +++ b/data/jorson/blogs/food/blogs.json @@ -0,0 +1,195 @@ +[ + { + "id": "spicy-fried-chicken-tofu-sandwich", + "date": "2022-03-02", + "title": "Spicy Fried 'Chicken' Tofu Sandwich", + "content": { + "path": "blogs/food/spicy-fried-chicken-tofu-sandwich.html" + } + }, + { + "id": "mapo-tofu", + "date": "2022-03-05", + "title": "Mapo Tofu", + "content": { + "path": "blogs/food/mapo-tofu.html" + } + }, + { + "id": "chikn-alfredo", + "date": "2022-04-04", + "title": "Chik'n Alfredo", + "content": { + "path": "blogs/food/chikn-alfredo.html" + } + }, + { + "id": "lasagna", + "date": "2022-04-04", + "title": "Lasagna (Bonus: Tofu Ricotta)", + "content": { + "path": "blogs/food/lasagna.html" + } + }, + { + "id": "cashew-cheese", + "date": "2022-05-19", + "title": "Cashew Cheese", + "content": { + "path": "blogs/food/cashew-cheese.html" + } + }, + { + "id": "spinach-artichoke-dip", + "date": "2022-05-19", + "title": "Spinach Artichoke Dip", + "content": { + "path": "blogs/food/spinach-artichoke-dip.html" + } + }, + { + "id": "roasted-artichoke", + "date": "2022-07-11", + "title": "Roasted Artichoke", + "content": { + "path": "blogs/food/roasted-artichoke.html" + } + }, + { + "id": "french-onion-soup", + "date": "2022-07-23", + "title": "French Onion Soup (Bonus: Cashew Mozzarella Cheese)", + "content": { + "path": "blogs/food/french-onion-soup.html" + } + }, + { + "id": "chocolate-syrup", + "date": "2022-08-04", + "title": "Chocolate Syrup", + "content": { + "path": "blogs/food/chocolate-syrup.html" + } + }, + { + "id": "instant-pot-spaghetti", + "date": "2022-09-14", + "title": "Instant Pot Spaghetti", + "content": { + "path": "blogs/food/instant-pot-spaghetti.html" + } + }, + { + "id": "banana-bread", + "date": "2022-09-24", + "title": "Banana Bread", + "content": { + "path": "blogs/food/banana-bread.html" + } + }, + { + "id": "cookie-dough-balls", + "date": "2022-09-24", + "title": "Cookie Dough Balls", + "content": { + "path": "blogs/food/cookie-dough-balls.html" + } + }, + { + "id": "gingerbread-cookie", + "date": "2022-12-10", + "title": "Gingerbread/Pepparkakor", + "content": { + "path": "blogs/food/gingerbread-cookie.html" + } + }, + { + "id": "st-lucia-buns", + "date": "2022-09-24", + "title": "Lussekatter (St Lucia Buns)", + "content": { + "path": "blogs/food/st-lucia-buns.html" + } + }, + { + "id": "macadamia-nut-cookie", + "date": "2022-09-24", + "title": "White Chocolate Macadmia Cookies (Bonus: Vegan White Chocolate)", + "content": { + "path": "blogs/food/macadamia-nut-cookie.html" + } + }, + { + "id": "candy-cane-cookie", + "date": "2022-09-24", + "title": "Candy Cane Cookies", + "content": { + "path": "blogs/food/candy-cane-cookie.html" + } + }, + { + "id": "pbj-thumbprint-cookie", + "date": "2022-09-24", + "title": "Peanut Butter and Jelly Thumbprint Cookies", + "content": { + "path": "blogs/food/pbj-thumbprint-cookie.html" + } + }, + { + "id": "sugar-cookie", + "date": "2022-09-24", + "title": "Sugar Cookies", + "content": { + "path": "blogs/food/sugar-cookie.html" + } + }, + { + "id": "shepherds-pie", + "date": "2023-06-12", + "title": "Shepherd's Pie", + "content": { + "path": "blogs/food/shepherds-pie.html" + } + }, + { + "id": "beef-chili", + "date": "2023-08-17", + "title": "Beef Chili", + "content": { + "path": "blogs/food/beef-chili.html" + } + }, + { + "id": "frozen-custard", + "date": "2023-08-24", + "title": "Frozen Custard", + "content": { + "path": "blogs/food/frozen-custard.html" + } + }, + { + "id": "biscuits", + "date": "2023-08-24", + "title": "Biscuits 'n' Gravy", + "content": { + "path": "blogs/food/biscuits.html" + } + }, + { + "id": "pumpkin-pie", + "date": "2023-11-22", + "title": "Pumpkin Pie", + "content": { + "path": "blogs/food/pumpkin-pie.html" + } + }, + { + "id": "_template", + "date": "2022-03-04", + "title": "Template", + "content": { + "path": "blogs/food/_template.html" + }, + "IsHidden": true + } +] diff --git a/data/jorson/blogs/food/candy-cane-cookie.html b/data/jorson/blogs/food/candy-cane-cookie.html new file mode 100644 index 00000000..bddb7d4b --- /dev/null +++ b/data/jorson/blogs/food/candy-cane-cookie.html @@ -0,0 +1,99 @@ +
+ + +
+

Ingredients

+
+

+ Candy Cane Cookies +

+
    +
  • + 2 sticks (227g) unsalted butter, at room temperature +
  • +
  • + 1 cup (200g) sugar +
  • +
  • + 1 1/2 teaspoons peppermint extract +
  • +
  • + 1 teaspoon vanilla extract +
  • +
  • + 1 teaspoon baking powder +
  • +
  • + 1/2 teaspoon kosher salt +
  • +
  • + 1 large egg +
  • +
  • + 2 3/4 cup (385g) all-purpose flour +
  • +
  • + 1 teaspoon liquid red food coloring +
  • +
  • + 1 egg white +
  • +
  • + 2 tablespoons sparkling sugar +
  • +
+
+
+ +
+

+ Directions +

+
+

Candy Cane Cookies

+
+

+

    +
  1. + Make the dough: Place the butter, sugar, peppermint, vanilla, baking powder, and salt in the bowl of stand mixer. Beat until a paste forms and clings to the side of the bowl. Scrape down the side of the bowl and beat in the egg until it is absorbed. Add the flour and beat until just combined and no more dry streaks of flour remain. +
  2. +
  3. + Color half the dough: Divide and remove half the dough from the bowl. Carefully add the red food coloring to the remaining dough. Mix on low until the color is evenly distributed. +
  4. +
  5. + Chill the dough: Pat each piece of dough into a disk, wrap in plastic wrap, and refrigerate for at least 3 hours or overnight. +
  6. +
  7. + When ready to bake, preheat the oven to 350 F: Line a baking sheet with parchment paper or a silicon baking mat. +
  8. +
  9. + Shape the cookies: The chilled dough should be firm, but still easy to shape straight from the fridge. If not, let it warm for just a few minutes until malleable. Don't let it warm too much or it will be too soft to work with again. Pinch off a 1-inch round piece of the white dough and roll it out to a 5-inch rope. Do the same with a piece of the red dough (make sure the ropes are the same length). Place the ropes next to each other and twist together. Transfer to the baking sheet and curve the top of the dough into a candy cane shape. Repeat with the remaining dough, spacing the cookies about 2 inches apart. +
  10. +
  11. + Top the cookies with sparkling sugar: Make the egg white wash by beating the egg white with 1 tablespoon of water until foamy. Brush the top of each cookie with the egg white wash and then sprinkle with the sugar. +
  12. +
  13. + Bake the cookies: Bake in the oven for 8 to 10 minutes or until the edges are just barely brown. Let cool on the baking sheet for 10 minutes before moving to a wire cooling rack. These cookies will keep for a week or two in a sealed container at room temperature. +
  14. +
+

+
+
+
+
diff --git a/data/jorson/blogs/food/cashew-cheese.html b/data/jorson/blogs/food/cashew-cheese.html new file mode 100644 index 00000000..134f12ca --- /dev/null +++ b/data/jorson/blogs/food/cashew-cheese.html @@ -0,0 +1,58 @@ +
+
+

+ Ingredients +

+
    +
  • + 1 to 1 1/2 cups raw cashews, soaked for 6+ hours +
  • +
  • + 4 tbsp nutritional yeast +
  • +
  • + 1 1/2 cups unsweetened plain almond milk (or your favorite) or water +
  • +
  • + juice of 1 small lemon or 2 teaspoons apple cider vinegar +
  • +
  • + 3 garlic cloves, minced +
  • +
  • + salt and pepper (seasoning) +
  • +
  • + umami-inducing spices +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Combine all ingredients in a food processor +
  2. +
  3. + Blend until it starts to get smooth +
  4. +
  5. + Taste +
  6. +
  7. + Spice +
  8. +
  9. + Season +
  10. +
  11. + Repeat steps 3 through 5, until desired +
  12. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/chikn-alfredo.html b/data/jorson/blogs/food/chikn-alfredo.html new file mode 100644 index 00000000..c17c4f21 --- /dev/null +++ b/data/jorson/blogs/food/chikn-alfredo.html @@ -0,0 +1,52 @@ +
+
+

+ Ingredients +

+
    +
  • + 15.5 oz alfredo sauce +
  • +
  • + 8 oz pasta, cooked and drained +
  • +
  • + 8 oz Mindful Chik'n +
  • +
  • + Boiling water +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Cook your pasta +
  2. +
  3. + Cook your chik'n in a cast iron pan +
  4. +
  5. + When the chik'n is browned, add the alfredo to the cast iron and heat till bubbling +
  6. +
  7. + Spice and season! +
  8. +
  9. + Turn off the heat +
  10. +
  11. + Add the cooked and drained pasta +
  12. +
  13. + Mix well +
  14. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/chocolate-syrup.html b/data/jorson/blogs/food/chocolate-syrup.html new file mode 100644 index 00000000..41514af2 --- /dev/null +++ b/data/jorson/blogs/food/chocolate-syrup.html @@ -0,0 +1,64 @@ +
+ + +
+

+ Ingredients +

+
    +
  • + 1/2 cup unsweetened cocoa powder +
  • +
  • + 1 cup granulated sugar +
  • +
  • + 1/8 teaspoon kosher salt +
  • +
  • + 1/2 cup cold water +
  • +
  • + 1 1/2 teaspoons vanilla +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + In a cold saucepan, whisk together the cocoa and the sugar until all lumps are removed. Add the salt and the water and bring to a boil over medium-medium high heat. +
  2. +
  3. + Reduce to a gentle simmer; stirring constantly. Simmer for about 30 seconds and then remove from heat. Let cool and then add in the vanilla. +
  4. +
  5. + Pour into a glass jar and allow to cool. {The chocolate sauce will be very thin when it finishes boiling, but it will thicken quite a bit as it cools.} +
  6. +
  7. + Refrigerate until needed. +
  8. +
+

+
+
diff --git a/data/jorson/blogs/food/cookie-dough-balls.html b/data/jorson/blogs/food/cookie-dough-balls.html new file mode 100644 index 00000000..569fe1d0 --- /dev/null +++ b/data/jorson/blogs/food/cookie-dough-balls.html @@ -0,0 +1,81 @@ +
+
+

+ Images +

+
    +
  • +
    + Post-It note containing the original ingredients for the following cookie dough ball recipe +
    +
  • +
+
+ +
+

+ Ingredients +

+
    +
  • + 1.5 cups of rolled oats, ground up +
  • +
  • + 1 cup of rolled oats, whole +
  • +
  • + 4 tablespoons of ground flax +
  • +
  • + 10 tablespoons of water +
  • +
  • + 6 tablespoons of coconut oil +
  • +
  • + 3/4 cup of sugar +
  • +
  • + 1/4 cup of nutritional yeast +
  • +
  • + 1 teaspoon of vanilla +
  • +
  • + 1/4 cup of chocolate chips +
  • +
  • + 1/2 teaspoon of baking soda +
  • +
  • + 1/4 teaspoon of salt +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Preheat oven to 350 +
  2. +
  3. + Combine ground flax and water to create "flax eggs" +
  4. +
  5. + Combine the rest of the ingredients in a large bowl +
  6. +
  7. + Add the flax eggs in after a few minutes have passed +
  8. +
  9. + Bake for ?? minutes +
  10. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/french-onion-soup.html b/data/jorson/blogs/food/french-onion-soup.html new file mode 100644 index 00000000..a3a44dc0 --- /dev/null +++ b/data/jorson/blogs/food/french-onion-soup.html @@ -0,0 +1,177 @@ +
+ + +
+

Ingredients

+
+

+ Soup +

+
    +
  • + 1/4 cup vegan butter or olive oil (or a blend of both) +
  • +
  • + 4 medium yellow onions, sliced +
  • +
  • + 3/4 teaspoon granulated sugar +
  • +
  • + 4 cloves garlic, minced +
  • +
  • + 1 1/2 teaspoons dried thyme +
  • +
  • + 3/4 cup red wine +
  • +
  • + 3 tablespoons all-purpose flour +
  • +
  • + 2 quarts vegetable broth, low sodium +
  • +
  • + 2 bay leaves +
  • +
  • + 1 1/2 teaspoons sea salt, more to taste +
  • +
  • + Fresh ground pepper, to taste +
  • +
  • + 1 baguette, sliced and toasted +
  • +
+
+
+

Cheese

+
    +
  • + 1/4 cup raw cashews, soaked in water for 2 hours +
  • +
  • + 1 1/4 cup unsweetened plant-based milk, hot +
  • +
  • + 2 tablespoons tapioca flour/starch +
  • +
  • + 1 tablespoon nutritional yeast +
  • +
  • + 2 teaspoons lemon juice +
  • +
  • + 1/2 teaspoon garlic powder +
  • +
  • + 3/4 teaspoon sea salt +
  • +
+
+
+ +
+

+ Directions +

+
+

Soup, Part 1

+
+

+

    +
  1. + In a large pot, heat the butter or oil over medium-low heat. Add the onions and sugar. Sauté until the onions are very tender & caramelized, about 40-50 minutes. Stir often to avoid sticking or burning. +
  2. +
  3. + Now add the garlic and thyme. Sauté 30-60 seconds. +
  4. +
  5. + Add the red wine and turn heat up to bring to a simmer. Now reduce heat and gently simmer on medium-low for about 10-15 minutes, or until the wine has evaporated. +
  6. +
  7. + Stir the flour into the onions. Turn the heat down to low and cook for 1 minute. Stir constantly so the flour doesn't burn. +
  8. +
  9. + Add the vegetable broth, bay leaves, salt, and pepper. Turn heat up to to get things moving and turn right down to gently simmer for 10-15 minutes. +
  10. +
+

+
+
+
+

Interruption! Cheese!

+
+

+

    +
  1. + Drain cashews and discard water +
  2. +
  3. + Place all ingredients into a blender +
  4. +
  5. + Blend on high until smooth +
  6. +
  7. + Now pour mixture into a small pot and place over medium heat +
  8. +
  9. + Stir often, so it does not stick or burn +
  10. +
  11. + Scrape the sides and bottom as needed +
  12. +
  13. + The cheese will start to thicken up and get slightly stretchy +
  14. +
  15. + This whole process should take about 3-5 minutes +
  16. +
  17. + Remove from heat +
  18. +
+

+
+
+
+

Soup, Part 2

+
+

+

    +
  1. + When the soup is done, remove bay leaves and taste for seasoning. Add more if needed. +
  2. +
  3. + Heat the broiler to high. Carefully ladle the soup into oven-safe crocks or bowls. Fill halfway, and place 1-2 slices of toasted baguette into each bowl. Now add more soup, pouring directly over bread. Make sure not to overfill the bowls. Now top each baguette slice with a big scoop of cheese and place the bowls in the oven. I placed a big piece of parchment paper under the bowls. Sometimes the cheese melts over, so it avoids mess in your oven. +
  4. +
  5. + Broil for 2-3 minutes to slightly brown and melt the cheese. Watch carefully to avoid burning. +
  6. +
+

+
+
+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/frozen-custard.html b/data/jorson/blogs/food/frozen-custard.html new file mode 100644 index 00000000..36cd041a --- /dev/null +++ b/data/jorson/blogs/food/frozen-custard.html @@ -0,0 +1,61 @@ +
+ + +
+

Ingredients

+
    +
  • + 2/3 cup white sugar +
  • +
  • + 5 large egg yolks +
  • +
  • + 1 pinch salt +
  • +
  • + 2 cups heavy cream +
  • +
  • + 1 cup whole milk +
  • +
  • + 2 1/2 tsp pure vanilla extract +
  • +
+
+ +
+

Directions

+

+

    +
  1. +
  2. +
  3. Whisk sugar, egg yolks, and salt together until mixture becomes fluffy and changes from dark golden to pale yellow. +
  4. +
  5. Heat cream and milk in a heavy saucepan over medium heat, stirring occasionally to prevent sticking to the bottom. Cook just until mixture starts to simmer when little bubbles begin to appear on the surface, 5 to 8 minutes. Remove from the heat. +
  6. +
  7. Whisk a ladleful of hot cream mixture into egg yolk mixture. Add another ladleful and whisk thoroughly before adding the next (this will keep the eggs from cooking). Gradually add remaining cream mixture and whisk thoroughly. Whisk in vanilla, then let cool completely, 30 to 45 minutes. You can place the bowl in a larger bowl filled with ice water to cool it faster. +
  8. +
  9. Pour cooled mixture into a pitcher, cover, and refrigerate until ice cold, 4 hours to overnight. +
  10. \ +
  11. Pour cold custard mixture into an ice cream maker and process according to the manufacturer's instructions until it reaches the consistency of soft ice cream, about 20 minutes. Quickly transfer to a plastic container and place a piece of plastic wrap over the surface of the custard. Cover the container and freeze until firm enough to scoop, at least 3 hours. +
  12. +
+

+
+
diff --git a/data/jorson/blogs/food/gingerbread-cookie.html b/data/jorson/blogs/food/gingerbread-cookie.html new file mode 100644 index 00000000..5a356e20 --- /dev/null +++ b/data/jorson/blogs/food/gingerbread-cookie.html @@ -0,0 +1,133 @@ +
+ + +
+

Ingredients

+
+

+ Gingerbread Cookies +

+
    +
  • + 3 cups all-purpose flour +
  • +
  • + 3/4 cup dark brown sugar, packed +
  • +
  • + 3/4 teaspoon baking soda +
  • +
  • + 1 Tablespoon ground cinnamon +
  • +
  • + 1 Tablespoon ground ginger +
  • +
  • + 1/2 teaspoon ground cloves +
  • +
  • + 1/2 teaspoon salt +
  • +
  • + 12 Tablespoons butter, room temperature, cut into 12 pieces +
  • +
  • + 3/4 cup molasses (dark molasses) +
  • +
  • + 2 Tablespoons milk +
  • +
+
+
+

+ Frosting +

+
    +
  • + 2 Tbs butter, room temperature +
  • +
  • + 2 cups powdered sugar +
  • +
  • + 2 Tablespoons milk +
  • +
+
+
+ +
+

+ Directions +

+
+

Gingerbread Cookies

+
+

+

    +
  1. + Add flour, brown sugar, baking soda, cinnamon, ginger, cloves and salt to a mixing bowl and mix. +
  2. +
  3. + Add the butter pieces and use a pastry blender to cut the butter in until the mixture resembles fine meal. +
  4. +
  5. + With a mixer running on low speed gradually add the molasses and milk and mix until combined, about 30 seconds. +
  6. +
  7. + Divide the dough in half, forming each into a ball. Wrap each in plastic wrap and refrigerate for 2 hours or overnight, or place in the freezer for about 20 minutes, until firm, if you’re in a hurry. +
  8. +
  9. + Preheat the oven to 350 degrees. Line 2 baking sheets with parchment paper. +
  10. +
  11. + Remove one dough sheet from the fridge/freezer and place on the counter. Roll out the dough (use a little flour on your rolling pin if needed), until it’s about ½ inch thick. Cut gingerbread men and place them on prepared baking sheets. +
  12. +
  13. + Refrigerate the gingerbread men for 5 minutes (meanwhile you can roll out the other dough ball). +
  14. +
  15. + Bake the cookies until set in the centers and the dough barely retains and imprint when touched very gently with fingertip, 8 to 11 minutes (depending on the size of your cookie cutter). Do not overbake!! +
  16. +
  17. + Remove the cookies to a wire rack. Allow to cool to room temperature before frosting. +
  18. +
  19. + Store gingerbread cookies in an airtight container with parchment paper between the layers. Freeze for up to 3 months. +
  20. +
+

+
+
+
+

Frosting

+
+

+

    +
  • + Add butter, milk, and 1 cup of powdered sugar to a bowl. Mix until smooth. Add additional cup of powdered sugar and mix until smooth. Add frosting to piping bag if desired. +
  • +
+

+
+
+
+
diff --git a/data/jorson/blogs/food/instant-pot-spaghetti.html b/data/jorson/blogs/food/instant-pot-spaghetti.html new file mode 100644 index 00000000..7cbcb224 --- /dev/null +++ b/data/jorson/blogs/food/instant-pot-spaghetti.html @@ -0,0 +1,64 @@ +
+
+

+ Ingredients +

+
    +
  • + 1 tablespoon olive oil +
  • +
  • + 1 pound vegan beef +
  • +
  • + 1 teaspoon kosher salt +
  • +
  • + 1 teaspoon onion powder +
  • +
  • + 1/2 teaspoon garlic powder +
  • +
  • + 2 cups water, divided +
  • +
  • + 1 (24-ounce) jar marinara or tomato-based pasta sauce +
  • +
  • + 8 ounces dry spaghetti +
  • +
  • + Grated Parmesan cheese, for serving +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Sauté the beef. Turn an electric pressure cooker on to sauté. Once heated, add the olive oil and beef. Break the beef up into large pieces with a wooden spoon and season with the salt, onion powder, and garlic powder. Cook, stirring and breaking the beef into smaller and smaller pieces, until cooked through and no longer pink, about 5 minutes. +
  2. +
  3. + Add 1/2 cup of the water, then the sauce. Turn off the sauté function and add 1/2 cup of the water to the pot. Scrape the bottom of the pot to remove any stuck-on bits. Add the sauce and stir to combine well. +
  4. +
  5. + Break the spaghetti in half and layer in the pot. Break the spaghetti strands in half and spread them in one or two layers over the ground beef mixture. Do not stir from this point on. +
  6. +
  7. + Add the remaining water but don’t stir. Rinse the pasta sauce jar with the remaining 1 1/2 cups water (pour the water into the jar, twist on the lid, and shake gently) and then pour the water over the pasta. Remember — no stirring here. +
  8. +
  9. + Set the pressure cooker to HIGH for 8 minutes cook time. Seal the pressure cooker. Set to cook on HIGH pressure for 8 minutes. The cooker should take between 10 and 12 minutes to come up to pressure. +
  10. +
  11. + Use a quick release to release pressure and stir. Open the pressure release valve (quick release) as soon as the 8 minutes cook time is up. Open the pressure cooker and stir the spaghetti into the sauce. Turn off the pressure cooker and remove the insert from the pressure cooker. Serve immediately with a flurry of grated Parmesan cheese. +
  12. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/lasagna.html b/data/jorson/blogs/food/lasagna.html new file mode 100644 index 00000000..e2a05192 --- /dev/null +++ b/data/jorson/blogs/food/lasagna.html @@ -0,0 +1,204 @@ +
+ + +
+

Ingredients

+
+

+ Tofu Ricotta +

+
    +
  • + 14 oz firm tofu drained and patted dry +
  • +
  • + 1 lemon juiced +
  • +
  • + 1 tablespoon vegan parmesan +
  • +
  • + 1 tablespoon olive oil +
  • +
  • + 1 clove garlic peeled +
  • +
  • + salt & pepper +
  • +
+
+
+

Lasagna

+
+

Sauce:

+
    +
  • + 1 tablespoon olive oil +
  • +
  • + 1/2 yellow onion diced +
  • +
  • + 3 cloves garlic diced +
  • +
  • + salt and pepper to taste +
  • +
  • + red pepper flakes to taste, optional +
  • +
  • + 8 oz vegan Italian sausage +
  • +
  • + water to deglaze the pan +
  • +
  • + 1 15-ounce can diced fire roasted tomatoes +
  • +
  • + 1 28-ounce jar marinara +
  • +
  • + 3 tablespoon tomato paste +
  • +
  • + 1 tablespoon Italian seasoning +
  • +
  • + ¼ cup chopped parsley +
  • +
+
+
+

Filling:

+
    +
  • + 8 oz vegan ricotta +
  • +
  • + 8 oz frozen spinach thawed and drained +
  • +
  • + 4 oz non-dairy half & half +
  • +
  • + 1/2 tablespoon Italian seasoning +
  • +
  • + salt & pepper to taste +
  • +
+
+
+

Topping:

+
    +
  • + Ingredient +
  • +
  • + 4 oz vegan cream cheese +
  • +
  • + 4 oz non-dairy half & half +
  • +
+
+
+

Other:

+
    +
  • + 9-12 lasagna noodles +
  • +
  • + parsley for topping +
  • +
+
+
+
+ +
+

+ Directions +

+
+

Tofu Ricotta

+
+

+

    +
  1. + Combine all of the ingredients in a food processor and blend until combined. +
  2. +
  3. + Taste and adjust seasonings as needed. +
  4. +
  5. + Transfer to a bowl and use immediately or place in the fridge until ready to use. +
  6. +
+

+
+
+
+

Lasagna

+
+

+

    +
  1. + Prepare the lasagna noodles. Bring a large pot of water to a boil. Add the lasagna noodles and cook for 4 minutes, stirring regularly so they don't stick. Drain the noodles and rinse them with cold water. Transfer the noodles to a bowl of water to stop them from cooking. Place the noodles in a single layer on a parchment lined baking sheet - use 2 baking sheets if needed. Set aside. +
  2. +
  3. + Place the same pot back on the stove. Heat the olive oil over medium heat. Add the onion, garlic, salt, pepper and red pepper flakes. Stir to combine and cook for 2 minutes. Add the sausage and break it apart with a wooden spoon. Cook for a couple minutes or until it begins to brown. Add a splash of water to the pot to deglaze the pan - scraping down the brown bits. +
  4. +
  5. + Add the fire roasted tomatoes, marinara, tomato paste and Italian seasoning to the pot and stir to combine. Cook for at least 15 minutes, stirring frequently - you can cook this longer if you have the time. Right before assembling add the fresh parsley. +
  6. +
  7. + Combine all of the filling ingredients in a bowl and stir to combine. Set aside. +
  8. +
  9. + Combine the topping ingredients and mix until smooth. Set aside. +
  10. +
  11. + Preheat the oven to 375 degrees. To assemble add 1 cup of the sauce to the bottom of a 9x13 baking dish. Add a layer of lasagna noodles, followed by 1.5 cups sauce and ½ of the ricotta mixture. Repeat with noodles, sauce and ricotta. For the final layer add a layer of noodles, the rest of the sauce and pour over the cream cheese mixture. +
  12. +
  13. + Spray a piece of foil with non-stick spray and cover the lasagna. Bake in the oven for 30 minutes. Remove the foil and cook for an additional 10 minutes.** You can remove the lasagna now, or for an extra crispy top, turn the oven to broil. Cook for an additional 3-5 minutes until browned and bubbly on top - be sure to keep an eye on it so it doesn't burn. +
  14. +
  15. + Remove from the oven and allow the lasagna to rest for 10 minutes. Cut into 8 pieces and top with fresh parsley. +
  16. +
+

+
+
+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/macadamia-nut-cookie.html b/data/jorson/blogs/food/macadamia-nut-cookie.html new file mode 100644 index 00000000..5440156e --- /dev/null +++ b/data/jorson/blogs/food/macadamia-nut-cookie.html @@ -0,0 +1,161 @@ +
+ + +
+

Ingredients

+
+

+ White Chocolate Macadamia Nut Cookies +

+
    +
  • + 3/4 cup salted butter, softened to room temperature (170 grams) +
  • +
  • + 1 cup packed light or dark brown sugar (213 grams) +
  • +
  • + 1/2 cup granulated sugar (100 grams) +
  • +
  • + 1 large egg +
  • +
  • + 1 teaspoon vanilla extract +
  • +
  • + 2 1/4 cup all-purpose flour (270 grams) +
  • +
  • + 1 teaspoon baking soda +
  • +
  • + 1/4 teaspoon salt +
  • +
  • + 1 cup white chocolate chips (170 grams) +
  • +
  • + 1 cup macadamia nuts, coarsely chopped (150 grams) +
  • +
  • + Coarse salt, for sprinkling (optional) +
  • +
+
+
+

+ Vegan White Chocolate +

+
    +
  • + 2 oz Raw Cocoa Butter +
  • +
  • + 2 tablespoons Melted Vegan Butter - or refined coconut oil +
  • +
  • + 2-3 tablespoons Maple Syrup +
  • +
  • + 2 teaspoons Cashew Butter +
  • +
  • + 1/2 teaspoon Vanilla Extract +
  • +
+
+
+ +
+

+ Directions +

+
+

Gingerbread Cookies

+
+

+

    +
  1. + Preheat oven to 350°F and line sheet pans with parchment paper. +
  2. +
  3. + Add macadamia nuts to 1 sheet pan and spread into an even layer. Toast in oven for about 5 minutes, then let cool completely. +
  4. +
  5. + In the bowl of an electric mixer, cream together the butter and sugars on medium high until light and fluffy, about 4 minutes. Add the egg and vanilla and mix to combine. +
  6. +
  7. + Add flour, soda, and salt to the butter and sugar mixture and mix until just combined. Add the white chocolate chips and the macadamia nuts. +
  8. +
  9. + Portion into rounded tablespoon for medium cookies, or 3 tablespoon scoop for large cookies and place onto prepared sheet pans, with about 2 inch spacing. Bake until lightly golden, about 10 to 12 minutes (14-15 minutes for large cookies). Cool on a wire rack. +
  10. +
  11. + When hot from the oven, sprinkle with coarse salt. Let cool for 5 minutes on the pan, then transfer for a wire rack to cool completely. +
  12. +
+

+
+
+
+

Vegan White Chocolate

+
+

+

    +
  • + First, prepare a chocolate silicone tab mold, place it on a wooden board. Set aside. +
  • +
  • + In a small saucepan, add cocoa butter and vegan butter. If using coconut oil, use refined coconut oil to avoid the coconut flavor. +
  • +
  • + Bring over medium/low heat and occasionally stir until melted. The mixture will be really thin and yellow. +
  • +
  • + Keep the saucepan over low heat, and stir in cashew butter until melted. +
  • +
  • + Finally, stir in maple syrup and vanilla extract. +
  • +
  • + Turn off the heat and let the mixture cool down slightly before pouring it on the mold. +
  • +
  • + Pop the mold in the freezer for 10-12 minutes until the chocolate bar is hard and set. +
  • +
  • + Store in the fridge or in the freezer for an ultra-crunchy bar. The chocolate melts fast under 85°F (30°C). +
  • +
+

+
+
+
+
diff --git a/data/jorson/blogs/food/mapo-tofu.html b/data/jorson/blogs/food/mapo-tofu.html new file mode 100644 index 00000000..78a69114 --- /dev/null +++ b/data/jorson/blogs/food/mapo-tofu.html @@ -0,0 +1,127 @@ +
+ + +
+

+ Ingredients +

+
    +
  • + 1 tbsp oil +
  • +
  • + 700g tofu, cubed +
  • +
  • + 4 tbsp (60g) minced onion +
  • +
  • + 1 tbsp (15g) minced garlic +
  • +
  • + 1 tbsp (15g) minced ginger +
  • +
  • + 120g minced "pork" (Textured Soy Protein to make it vegan) +
  • +
  • + 1.5 tbsp Doubanjiang (hot chili paste) +
  • +
  • + 1 tsp hoisin sauce +
  • +
  • + 1 tbsp chili garlic sauce +
  • +
  • + 1 tbsp cooking wine +
  • +
  • + 1.75 (140 mL) cup water +
  • +
  • + Starch mixture (1 tbsp water, 1/2 tbsp starch) +
  • +
  • + 2 tbsp (30g) green onion +
  • +
  • + 2 tbsp (30g) red onion +
  • +
  • + 0.5 tsp salt +
  • +
  • + 0.5 tsp sugar +
  • +
  • + 0.5 tsp chicken powder +
  • +
  • + 1 tsp Sichuan peppercorn oil +
  • +
  • + 1 tbsp sesame oil +
  • +
  • + 1 tbsp (15g) minced green onion +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + To prep your tofu, cut it into even bite-sized cubes. +
  2. +
  3. + Boil a pot of hot water, add cubed tofu in with 1 tsp of salt. Cook for 2 minutes, then drain and set aside. +
  4. +
  5. + Heat your pan/wok until hot. Add your oil, onion, minced garlic, and ginger and stir fry until fragrant. +
  6. +
  7. + Add minced pork and stir fry on high heat for one minute. +
  8. +
  9. + Add your Doubanjiang, hoisin sauce, and chilli garlic sauce, then stir fry until fragrant and thoroughly covered in that gorgeous red. +
  10. +
  11. + Add cooking wine, water, and tofu, and cook for about 5 minutes. +
  12. +
  13. + Add your diced peppers, along with 1/3 of your starch mixture. Stir frequently to prevent sticking on the bottom. +
  14. +
  15. + Wait 30 seconds and stir in another 1/3 of your starch mixture. +
  16. +
  17. + When everything is boiling, add the remaining 1/3 of your starch mixture. +
  18. +
  19. + Add your sichuan pepper oil, a drizzle of sesame oil, and green onion, mix well and pour on a plate to serve. +
  20. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/pbj-thumbprint-cookie.html b/data/jorson/blogs/food/pbj-thumbprint-cookie.html new file mode 100644 index 00000000..0fb370dd --- /dev/null +++ b/data/jorson/blogs/food/pbj-thumbprint-cookie.html @@ -0,0 +1,90 @@ +
+ + +
+

Ingredients

+
+

+ Peanut Butter and Jelly Thumbprint Cookies +

+
    +
  • + 1 1/4 cups all-purpose flour +
  • +
  • + 1/2 teaspoon baking powder +
  • +
  • + 1/2 teaspoon baking soda +
  • +
  • + 1/2 teaspoon salt +
  • +
  • + 3/4 cup smooth peanut butter +
  • +
  • + 4 ounces (1 stick) unsalted butter, softened +
  • +
  • + 1/3 cup packed light-brown sugar +
  • +
  • + 1/3 cup granulated sugar, plus more for rolling +
  • +
  • + 1 large egg +
  • +
  • + 1 teaspoon pure vanilla extract +
  • +
  • + 1/2 cup raspberry jam +
  • +
+
+
+ +
+

+ Directions +

+
+

Peanut Butter and Jelly Thumbprint Cookies

+
+

+

    +
  1. + Preheat oven to 350 degrees. Whisk together flour, baking powder, baking soda, and salt. Beat peanut butter and butter with a mixer on medium speed until smooth. Add sugars, and beat until pale and fluffy. Add egg and vanilla, and beat until incorporated. Reduce speed to low. Add dry ingredients, and mix until combined. +
  2. +
  3. + Scoop level tablespoons of dough, and form into balls. Roll each ball in granulated sugar, and transfer to parchment-lined baking sheets, spacing about 2 inches apart. +
  4. +
  5. + Bake until cookies are puffy, about 10 minutes. Remove from oven, and make indentations in centers by pressing with the handle end of a wooden spoon. Return to oven, and bake until edges are golden, 6 to 7 minutes more. Transfer sheets to wire racks, and let cool completely. +
  6. +
  7. + Heat jam in a small saucepan, stirring, until loosened, about 30 seconds. Spoon about 1/2 teaspoon into each indentation. Cookies can be stored in a single layer for up to 1 week. +
  8. +
+

+
+
+
+
diff --git a/data/jorson/blogs/food/pumpkin-pie.html b/data/jorson/blogs/food/pumpkin-pie.html new file mode 100644 index 00000000..c9504eb4 --- /dev/null +++ b/data/jorson/blogs/food/pumpkin-pie.html @@ -0,0 +1,226 @@ +
+ + +
+

Ingredients

+
+

+ Simple Pie Crust +

+
    +
  • + 1 1/2 cups cold butter +
  • +
  • + 3 cups unbleached flour +
  • +
  • + 1 large egg +
  • +
  • + 5 tablespoons very cold water +
  • +
  • + 1 tablespoon white vinegar +
  • +
  • + 1 teaspoon fine ground salt +
  • +
+
+
+

+ Sourdough Pie Crust +

+
    +
  • + 250 g All Purpose Flour +
  • +
  • + 5 g Salt (or to taste) +
  • +
  • + 10 g Sugar (optional - see notes) +
  • +
  • + 230 g Unsalted Butter must be COLD +
  • +
  • + 200 g Sourdough Starter or Sourdough Discard +
  • +
  • + 10 g White Vinegar or Apple Cider Vinegar +
  • +
  • + 50 g Iced Water (just in case) +
  • +
+
+
+

Pie Filling

+
+
    +
  • + 29 ounces pumpkin puree +
  • +
  • + 4 eggs +
  • +
  • + 1 teaspoon salt +
  • +
  • + 2 cups sugar +
  • +
  • + 2 cups cream, half and half, or evaporated milk (cream preferred) +
  • +
  • + 3 teaspoons cinnamon powder +
  • +
  • + 1 teaspoon ground ginger +
  • +
  • + ½ teaspoon ground nutmeg +
  • +
  • + ½ teaspoon ground cloves +
  • +
+
+
+
+ +
+

+ Directions +

+
+

Simple Pie Crust

+
+

+

    +
  1. + In a large bowl, combine the cold butter and unbleached flour. Cut the butter into the flour until you have a crumbly texture. +
  2. +
  3. + In a separate small bowl, whisk together the egg, very cold water, and white vinegar. +
  4. +
  5. + Pour the wet mixture into the butter and flour mixture, and add the fine ground salt. Mix until the dough comes together. You may need to use your hands to form a ball. +
  6. +
  7. + Divide the dough into two equal portions. Wrap each portion in plastic wrap and refrigerate for at least 30 minutes. +
  8. +
+

+
+
+
+

Sourdough Pie Crust

+
+

+

    +
  1. + This dough makes enough pastry for a top and bottom crust. If only need the top or bottom, just halve the amounts listed. +
  2. +
  3. + Add all purpose flour, salt and sugar to a large mixing bowl and stir together until well combined. Set aside for now. +
  4. +
  5. + Grate the cold butter into a bowl. If the butter starts to melt or is very soft once grated, place the bowl into the freezer. This will help to firm the butter up and make the next step much easier. I cannot stress enough how important it is for the butter to be COLD. +
  6. +
  7. + Place the cold, grated butter into the bowl with the flour, salt and sugar and use a spatula, pastry cutter or simply your finger tips to coat the butter in the flour. You want the butter to stay cold, so try to touch it as little as you can. +
  8. +
  9. + Now, add the sourdough starter or discard and vinegar and bring the mixture into a dry, shaggy dough. It's best just to use your hands to squeeze the pastry dough together. It will be a rough, dry dough. +
  10. +
  11. + If the dough really isn't coming together at all, add a little iced water until you are able to bring it together. +
  12. +
  13. + Tip the rough dough out onto the counter, divide the dough into two pieces and bring each piece into a rough ball. Wrap each ball of pastry dough in parchment paper and squash it down into a disc shape. Wrap each disc in cling wrap and place both discs into the fridge. +
  14. +
  15. + If you prefer to just refrigerate as one ball, that's fine too. You can just divide the pastry into two pieces when you want to roll it out. +
  16. +
  17. + Leave the dough a minimum of one hour to fully hydrate and become cold. You can leave the dough in the fridge for up to 48 hours before you use it. +
  18. +
  19. + When you are ready to use the sourdough pastry to make a pie crust, take the dough out of the fridge and unwrap it. Dust the dough lightly with flour and use a rolling pin to roll the dough out to your desired size. +
  20. +
  21. + This recipe makes enough for a top and bottom crust. I have used a 1.4L pie dish and it generously filled the dish with some to spare. +
  22. +
+

+
+
+
+

Pie Filling

+
+

+

    +
  1. + In a large mixing bowl, combine the pumpkin puree, eggs, salt, sugar, cream (or half and half, or evaporated milk), cinnamon powder, ground ginger, ground nutmeg, and ground cloves. Mix until all ingredients are well incorporated. +
  2. +
  3. + Preheat your oven to 450°F (232°C) if you want a flakier crust. Alternatively, preheat to 350°F (175°C). +
  4. +
+

+
+
+
+

Assembly

+
+

+

    +
  1. + Roll out one of the pie crusts on a floured surface to fit your pie pan. Place the crust in the pan. +
  2. +
  3. + Pour the pumpkin pie filling into the unbaked crust. +
  4. +
  5. + If you want a flakier crust, bake the pie at 450°F (232°C) for 10 minutes, then lower the temperature to 350°F (175°C) and bake for an additional 45 minutes. If not, simply bake at 350°F (175°C) for 50-60 minutes. +
  6. +
  7. + Remove the pie from the oven and let it cool on a countertop for at least 2 hours before serving. +
  8. +
+

+
+
+ +
+
diff --git a/data/jorson/blogs/food/roasted-artichoke.html b/data/jorson/blogs/food/roasted-artichoke.html new file mode 100644 index 00000000..b2968ca3 --- /dev/null +++ b/data/jorson/blogs/food/roasted-artichoke.html @@ -0,0 +1,76 @@ +
+ + +
+

+ Ingredients +

+
    +
  • + 3 artichokes +
  • +
  • + 2 lemons +
  • +
  • + 2 tbsp olive oil +
  • +
  • + 6 garlic cloves +
  • +
  • + Rosemary +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Heat oven to 400°F +
  2. +
  3. + Use a knife to slice off the bottom 1/2-inch (or more, if you’d like) of the artichoke stems, and the top 1 inch of the artichoke globes (the leaves on top). Remove and discard any small leaves toward the bottoms of the stems. Rinse the artichokes with water. +
  4. +
  5. + Slice the artichokes in half vertically. Use a spoon to scoop out the fuzzy “choke” in the middle of the artichoke. Then use kitchen shears to trim about 1/4/-inch off the pointy tips of each of the artichoke leaves (so that they don’t poke you when you eat them). Rub a lemon wedge all over the entire surface of each artichoke half, to prevent browning. +
  6. +
  7. + Place the artichoke halves in a baking dish or on a baking sheet cut-side-up. Brush the cut sides of the artichokes evenly with the olive oil. Then fill the cavities evenly with the garlic, followed by a few small sprigs of the fresh herbs. Season with salt and pepper. +
  8. +
  9. + Flip the artichokes over, using the herbs to help hold in the garlic, so that they are cut-side-down. Brush the tops of the artichokes with oil, and season with salt and pepper. +
  10. +
  11. + Bake uncovered for 15 minutes. Then remove and cover the pan with aluminum foil, and bake for an additional 25-35 minutes, or until the artichokes are tender and the leaves pull off easily. +
  12. +
  13. + Place the tray on a cooling rack. Carefully remove, discard the herbs (or stir them into your dipping sauce for extra flavor), and drizzle the artichokes with extra lemon juice. +
  14. +
  15. + Serve the roasted artichokes warm with your desired dipping sauce. +
  16. +
+

+
+
diff --git a/data/jorson/blogs/food/shepherds-pie.html b/data/jorson/blogs/food/shepherds-pie.html new file mode 100644 index 00000000..98eccc96 --- /dev/null +++ b/data/jorson/blogs/food/shepherds-pie.html @@ -0,0 +1,153 @@ +
+ + +
+

+ Ingredients +

+
+

Meat Filling

+
    +
  • + 2 tablespoons olive oil +
  • +
  • + 1 cup chopped yellow onion +
  • +
  • + 1 lb. 90% lean ground beef -or ground lamb +
  • +
  • + 2 teaspoons dried parsley leaves +
  • +
  • + 1 teaspoon dried rosemary leaves +
  • +
  • + 1 teaspoon dried thyme leaves +
  • +
  • + 1/2 teaspoon salt +
  • +
  • + 1/2 teaspoon ground black pepper +
  • +
  • + 1 tablespoon Worcestershire sauce +
  • +
  • + 2 garlic cloves -minced +
  • +
  • + 2 tablespoons all purpose flour +
  • +
  • + 2 tablespoons tomato paste +
  • +
  • + 1 cup beef broth +
  • +
  • + 1 cup frozen mixed peas & carrots* +
  • +
  • + 1/2 cup frozen corn kernels +
  • +
+
+
+

Potato Topping

+
    +
  • + 1 1/2 - 2 lb. russet potatoes -about 2 large potatoes peeled and cut into 1 inch cubes +
  • +
  • + 8 tablespoons unsalted butter -1 stick +
  • +
  • + 1/3 cup half & half +
  • +
  • + 1/2 teaspoon garlic powder +
  • +
  • + 1/2 teaspoon salt +
  • +
  • + 1/4 teaspoon ground black pepper +
  • +
  • + 1/4 cup parmesan cheese +
  • +
+
+
+ +
+

+ Directions +

+

+

    +
  1. + Add the oil to a large skillet and place it over medium-high heat for 2 minutes. Add the onions. Cook 5 minutes, stirring occasionally. +
  2. +
  3. + Add the ground beef (or ground lamb) to the skillet and break it apart with a wooden spoon. Add the parsley, rosemary, thyme, salt, and and pepper. Stir well. Cook for 6-8 minutes, until the meat is browned, stirring occasionally. +
  4. +
  5. + Add the Worcestershire sauce and garlic. Stir to combine. Cook for 1 minute. +
  6. +
  7. + Add the flour and tomato paste. Stir until well incorporated and no clumps of tomato paste remain. +
  8. +
  9. + Add the broth, frozen peas and carrots, and frozen corn. Bring the liquid to a boil then reduce to simmer. Simmer for 5 minutes, stirring occasionally. +
  10. +
  11. + Set the meat mixture aside. Preheat oven to 400 degrees F. +
  12. +
  13. + Make the potato topping. +
  14. +
  15. + Place the potatoes in a large pot. Cover the potatoes with water. Bring the water to a boil. Reduce to a simmer. Cook until potatoes are fork tender, 10-15 minutes. +
  16. +
  17. + Drain the potatoes in a colander. Return the potatoes to the hot pot. Let the potatoes rest in the hot pot for 1 minute to evaporate any remaining liquid. +
  18. +
  19. + Add butter, half & half, garlic powder, salt, and pepper. Mash the potatoes and stir until all the ingredients are mixed together. +
  20. +
  21. + Add the parmesan cheese to the potatoes. Stir until well combined. +
  22. +
  23. + Assemble the casserole. +
  24. +
  25. + Pour the meat mixture into a 9x9 (or 7x11) inch baking dish. Spread it out into an even layer. Spoon the mashed potatoes on top of the meat. Carefully spread into an even layer. +
  26. +
  27. + If the baking dish looks very full, place it on a rimmed baking sheet so that the filling doesn’t bubble over into your oven. Bake uncovered for 25-30 minutes.** Cool for 15 minutes before serving. +
  28. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/spicy-fried-chicken-tofu-sandwich.html b/data/jorson/blogs/food/spicy-fried-chicken-tofu-sandwich.html new file mode 100644 index 00000000..1460ae5e --- /dev/null +++ b/data/jorson/blogs/food/spicy-fried-chicken-tofu-sandwich.html @@ -0,0 +1,106 @@ +
+ + +
+

+ Ingredients +

+
    +
  • + 2 (14-ounce) blocks extra-firm tofu, drained +
  • +
  • + 1/4 c. Dijon mustard +
  • +
  • + 1/4 c. brine from bread and butter pickles, plus pickle slices, for serving +
  • +
  • + 1/4 c. hot sauce, plus more for serving +
  • +
  • + 2 tbsp. apple cider vinegar +
  • +
  • + 1 c. all-purpose flour +
  • +
  • + 1/2 c. finely ground cornmeal +
  • +
  • + 1 tbsp. cornstarch +
  • +
  • + 2 tsp. chili powder +
  • +
  • + 1 1/2 tsp. cayenne pepper +
  • +
  • + 1 tsp. onion powder +
  • +
  • + 1/2 tsp. baking powder +
  • +
  • + 1/2 tsp. garlic powder +
  • +
  • + 1/2 tsp. kosher salt +
  • +
  • + Vegetable oil, for frying +
  • +
  • + 4 soft hamburger buns +
  • +
  • + 4 leaves green leaf lettuce +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Arrange the tofu blocks in a single layer on a freezer-safe plate or in a large plastic container and cover with plastic or a lid. Freeze until solid, at least 5 hours and up to a month in advance. +
  2. +
  3. + Remove tofu from freezer and let defrost completely, about 4 hours on the counter or overnight in refrigerator. Drain off any excess water that may have accumulated. +
  4. +
  5. + Arrange defrosted tofu in a single layer on a rimmed baking sheet lined with several sheets of paper towel. Place a few more layers of paper towels and another rimmed baking sheet on top of tofu. Weight baking sheet with a few cookbooks or cans of beans. Let drain, changing paper towels when saturated with water, at least 1 hour or up to overnight in refrigerator. +
  6. +
  7. + When tofu is finished draining, make sandwich. In a shallow bowl, whisk together Dijon mustard, pickle brine, hot sauce, and vinegar. In another shallow bowl, whisk together flour, cornmeal, cornstarch, chili powder, cayenne pepper, onion powder, baking powder, garlic powder, and ½ teaspoon salt. +
  8. +
  9. + Cut each piece of tofu crosswise into 2 planks; you should have 4 planks total. Working with one piece of tofu at a time, coat tofu in dry mixture then dip it in wet mixture. Return to dry mixture, then wet and one more time in the dry mixture. Place on a clean plate. Repeat with remaining tofu. +
  10. +
  11. + Pour oil into a large cast-iron skillet until it comes ½ inch up side of skillet. Place over medium-high heat. When oil is hot and just starts to shimmer, reduce heat to medium. Fry tofu, turning once, until golden on both sides, about 5 minutes per side. Transfer to a paper towel–lined plate to drain. +
  12. +
+

+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/spinach-artichoke-dip.html b/data/jorson/blogs/food/spinach-artichoke-dip.html new file mode 100644 index 00000000..38b1b7b1 --- /dev/null +++ b/data/jorson/blogs/food/spinach-artichoke-dip.html @@ -0,0 +1,100 @@ +
+ + +
+

+ Ingredients +

+
    +
  • + Prepared cashew cheese +
  • +
  • + 14 oz. spinach, frozen or fresh +
  • +
  • + 1 can (14oz.) artichoke hearts in brine, drained and finely chopped +
  • +
+
+ +
+

+ Directions +

+

+

    +
  1. + Preheat oven to 400 degrees fahrenheit +
  2. +
  3. + Dice the artichoke hearts +
  4. +
  5. + Wash and chop the spinach leaves +
  6. +
  7. + Combine in a food processor with the cashew cheese +
  8. +
  9. + In a medium baking dish, add the mixture +
  10. +
  11. + Cover +
  12. +
  13. + Bake 10 minutes +
  14. +
  15. + Uncover +
  16. +
  17. + Bake 10 minutes +
  18. +
  19. + Continue adding time as needed +
  20. +
+

+
+ +
+

+ Notes +

+
    +
  • + Reheat at 375 degrees for 10 to 15 minutes +
  • +
  • + Store for up to 4 days in a refrigerated, covered container +
  • +
+
+
\ No newline at end of file diff --git a/data/jorson/blogs/food/st-lucia-buns.html b/data/jorson/blogs/food/st-lucia-buns.html new file mode 100644 index 00000000..88de24d1 --- /dev/null +++ b/data/jorson/blogs/food/st-lucia-buns.html @@ -0,0 +1,141 @@ + +
+ + +
+

Ingredients

+
+

+ Tangzhong +

+
    +
  • + 5 tablespoons water +
  • +
  • + 1/8-1/4 teaspoon saffron threads crumbled +
  • +
  • + 1/8 teaspoon ground turmeric +
  • +
  • + 5 tablespoons whole milk +
  • +
  • + 3 tablespoons all-purpose flour +
  • +
+
+
+

+ Dough +

+
    +
  • + 5 tablespoons melted unsalted butter cooled +
  • +
  • + 1/2 cup whole milk slightly warm +
  • +
  • + 2 teaspoons instant yeast +
  • +
  • + 1 teaspoon fine salt +
  • +
  • + 1/4 cup granulated sugar +
  • +
  • + 3 cups + 2 tablespoons all-purpose flour +
  • +
  • + 1 large egg +
  • +
  • + All of the Tangzhong cooled +
  • +
  • + 1/3 cup raisins chopped +
  • +
+
+
+

+ Egg Wash +

+
    +
  • + 1 large egg +
  • +
  • + 1 tablespoon water +
  • +
  • + Pearl sugar for topping +
  • +
+
+
+ +
+

+ Directions +

+
+

St Lucia Buns

+
+

+

    +
  1. + Make the tangzhong: Bring water to a boil in a medium saucepan. Remove from heat and add saffrom and turmeric. Steep for 15 minutes. Add milk and flour. Whisk until combined and no lumps remain. Place saucepan over medium heat and cook mixture, whisking constantly, until it thickens, about 1-2 minutes. Set aside to cool. +
  2. +
  3. + Make the dough: While the tangzhong is cooling, begin preparing the rest of the ingredients for the dough. Combine yeast, salt, sugar and flour in the bowl of a stand mixer. Whisk briefly by hand to combine.  +
  4. +
  5. + Attach the dough hook to the mixer. Add melted and cooled butter, slightly warm milk, egg and the cooled Tangzhong (it can be slightly warm to the touch) to the dry ingredients. Mix on medium low until fully combined. +
  6. +
  7. + Increase mixer speed to medium and knead mixture for 3-4 minutes or until dough is slightly tacky but not sticky and clears the side of the bowl. Add raisins and continue to knead until they are evenly distributed throughout the dough. You can also mix and knead the dough by hand but it will take longer, more like 8-10 minutes. +
  8. +
  9. + Cover bowl with plastic wrap and allow the dough to rise for an hour or until 1 ½ or 2 times its original size. The time will largely depend on the temperature of your kitchen. +
  10. +
  11. + Once the dough has risen, preheat oven to 350 degrees and adjust oven racks so that they are in the upper and lower middle positions. Line two baking sheets with parchment paper. Remove the dough from the bowl and place it onto a clean countertop. Roll out with a rolling pin until it is in the shape of a rectangle that is about 16 by 6 inches in size. The dough should be smooth enough that you do not need to add flour during the rolling process. If yours is sticking the rolling pin, however, sprinkle a little flour over the dough as necessary to prevent this from happening.   +
  12. +
  13. + Using a pizza wheel, cut the folded dough lengthwise into 16 one inch strips. Cover with plastic wrap. +
  14. +
  15. + Working with one piece of dough at a time and keeping the rest of the dough covered, roll and stretch the strip of dough between the palms of your hands and the countertop into a 16 inch rope. Coil the ends of the rope in opposite directions creating an “S” shape. Place bun onto prepared baking pan. Repeat with remaining dough, spacing buns about 2 ½ inches apart with 8 buns on each baking pan. Cover with plastic wrap and let rise for 30-45 minutes. +
  16. +
  17. + Meanwhile, make the egg wash. Whisk the egg and water together in a small bowl. Once the buns have risen and are ready to go into the oven, remove plastic wrap and gently brush the surface of each bun with the egg wash Sprinkle pearl sugar over the top of each bun. +
  18. +
  19. + Bake buns for 15-20 minutes or until golden brown, switching and rotating the pans halfway through the baking time. Cool slightly on a wire rack and serve warm. Buns are best when eaten the day they are made. +
  20. +
+

+
+
+
+
diff --git a/data/jorson/blogs/food/sugar-cookie.html b/data/jorson/blogs/food/sugar-cookie.html new file mode 100644 index 00000000..009acd7e --- /dev/null +++ b/data/jorson/blogs/food/sugar-cookie.html @@ -0,0 +1,145 @@ +
+ + +
+

Ingredients

+
+

+ Sugar Cookies +

+
    +
  • + 2 and 1/4 cups (281g) all-purpose flour (spoon and leveled) +
  • +
  • + 1/2 teaspoon baking powder +
  • +
  • + 1/4 teaspoon salt +
  • +
  • + 3/4 cup (170g) unsalted butter, slightly softened to room temperature +
  • +
  • + 3/4 cup (150g) granulated sugar +
  • +
  • + 1 large egg* +
  • +
  • + 2 teaspoons pure vanilla extract +
  • +
  • + 1/2 teaspoon almond extract (optional, but makes the flavor outstanding) +
  • +
+
+
+

+ Icing +

+
    +
  • + 3 cups (360g) confectioners' sugar +
  • +
  • + 1/2 teaspoon pure vanilla extract (omit and replace with water for stark white icing) +
  • +
  • + 2 teaspoons light corn syrup* +
  • +
  • + 4 1/2 - 5 Tablespoons (67 - 75ml) room temperature water +
  • +
  • + pinch of salt +
  • +
  • + gel food coloring & sprinkles for decorating +
  • +
+
+
+ +
+

+ Directions +

+
+

Sugar Cookies

+
+

+

    +
  1. + Make sure you have allotted enough time (and enough counter space!) to make these cookies. The cookie dough needs to chill, the cookies need to cool completely, and the icing needs 24 hours to completely set. If enjoying right away and hardened icing isn't a concern, you'll only need about 3-4 hours to make these. +
  2. +
  3. + Make the cookie dough: Whisk the flour, baking powder, and salt together in a medium bowl. Set aside. +
  4. +
  5. + In a large bowl using a hand mixer or a stand mixer fitted with a paddle attachment, beat the butter and sugar together on high speed until completely smooth and creamy, about 2 minutes. Add the egg, vanilla, and almond extract (if using), and beat on high speed until combined, about 1 minute. Scrape down the sides and up the bottom of the bowl and beat again as needed to combine. +
  6. +
  7. + Add the dry ingredients to the wet ingredients and mix on low until combined. Dough will be relatively soft. If the dough seems too soft and sticky for rolling, add 1 more Tablespoon of flour. +
  8. +
  9. + Divide the dough into 2 equal parts. Place each portion onto a piece of lightly floured parchment paper or a lightly floured silicone baking mat. With a lightly floured rolling pin, roll the dough out to about 1/4-inch thickness. Use more flour if the dough seems too sticky. The rolled-out dough can be any shape, as long as it is evenly 1/4-inch thick. +
  10. +
  11. + Lightly dust one of the rolled-out doughs with flour. Place a piece of parchment on top. (This prevents sticking.) Place the second rolled-out dough on top. Cover with plastic wrap or aluminum foil, then refrigerate for at least 1-2 hours and up to 2 days. +
  12. +
  13. + Once chilled, preheat oven to 350°F (177°C). Line 2-3 large baking sheets with parchment paper or silicone baking mats. Carefully remove the top dough piece from the refrigerator. If it's sticking to the bottom, run your hand under it to help remove it. Using a cookie cutter, cut the dough into shapes. Re-roll the remaining dough and continue cutting until all is used. Repeat with second piece of dough. (Note: It doesn't seem like a lot of dough, but you get a lot of cookies from the dough scraps you re-roll.) +
  14. +
  15. + Arrange cookies on baking sheets about 3 inches apart. Bake for 11-12 minutes or until lightly browned around the edges. If your oven has hot spots, rotate the baking sheet halfway through bake time. Allow cookies to cool on the baking sheet for 5 minutes, then transfer to a wire rack to cool completely before decorating. No need to cover the cookies as they cool. +
  16. +
+

+
+
+
+

Icing

+
+

+

    +
  • + Make the icing: Using a fork, stir the confectioners' sugar, vanilla, corn syrup, and 4.5 Tablespoons (67ml) of water together in a medium bowl. It will be very thick and almost impossible to stir. Switch to a whisk and whisk in 1/2 Tablespoon (8ml) more of water. If you lift the whisk and let the icing drizzle back into the bowl, the ribbon of icing will hold shape for a few seconds before melting back into the icing. That is when you know it's the right consistency and is ready to use. If it's too thick (sometimes it is), whisk in another 1/2 Tablespoon (8ml) of water or a little more until you reach the proper consistency. +
  • +
  • + If you're tinting the icing another color, stir in the food coloring. You can pour some icing into different bowls if using multiple colors. When tinting icing, use only 1-2 drops at first, stir it in, then add more as needed to reach your desired color. Remember, color darkens as icing dries. +
  • +
  • + Decorate the cookies: You can dip the cookies into the icing or use squeeze bottles or piping bags fitted with piping tips (I usually use Wilton Piping Tip #4). Decorate your cookies as desired. If using the squeeze bottles or piping tips, I usually outline cookies with icing first, then fill in the middle. If adding sprinkles on top of the icing, add them right after applying icing on your cookie. +
  • +
  • + Let icing dry/set: Feel free to enjoy cookies before icing completely dries. Icing dries in 24 hours. No need to cover the decorated cookies as you wait for the icing to set. If it's helpful, decorate the cookies directly on a baking sheet so you can place the entire baking sheet in the refrigerator to help slightly speed up the icing setting. Once the icing has dried, these cookies are great for gifting or for sending. +
  • +
  • + Cover and store decorated cookies for up to 5 days at room temperature or up to 10 days in the refrigerator. +
  • +
  • + Add butter, milk, and 1 cup of powdered sugar to a bowl. Mix until smooth. Add additional cup of powdered sugar and mix until smooth. Add frosting to piping bag if desired. +
  • +
+

+
+
+
+
diff --git a/data/jorson/blogs/life/2020-08-20.html b/data/jorson/blogs/life/2020-08-20.html new file mode 100644 index 00000000..2e7b924e --- /dev/null +++ b/data/jorson/blogs/life/2020-08-20.html @@ -0,0 +1,11 @@ +
+

I have really been chipping away at this site for a bit. I have wanted a place to dump my thoughts and projects for + a long time now, and it is finally here! Thank you for being willing to listen to my musings. +

+ Will I post at a consistent rate? Of course not, I struggle to remember to eat during a given day. Typing into this + void of a webpage is going to occur when extra-special super awesome glints of mania push me to dump my thoughts. +

+

+ This first one was a short one, and far from the best one. +

+
diff --git a/data/jorson/blogs/life/2020-08-22.html b/data/jorson/blogs/life/2020-08-22.html new file mode 100644 index 00000000..7d539227 --- /dev/null +++ b/data/jorson/blogs/life/2020-08-22.html @@ -0,0 +1,20 @@ +
+

+ The morning has been an interesting one. I woke up around 11 am after a late night of Mystery Science Theater 3000. I got up, dressed, and went to do the dishes. I got + to the end and lo, some unholy, moldy coffee grounds needed dealt with. My ignorant mind said, "THROW THEM IN THE + HOLE!", and down they went into the disposal. I turned it on and the hum of death went brrrrrrrr. + Maintenance came by and found it wasn't the grounds, but it was sticks...sticks...from outside. My wife has + collected sticks on occasion, and we believe our kitties must have dropped the sticks into the disposal as an act of + rebellion. +

+ With my first-world problem resolved, I started on some pasta and meatballs. Vodka sauce has + become a secret passion of mine. We found some vegan vodka sauce at Whole Foods, and the meatballs are just the + Gardein branch frozen meatballs. I always make pasta in the Instant Pot and I can't + recommend it enough. +

+ With the pasta done and the rest of the Saturday ahead of me, I think I will daydream about making games and start + Twin Peaks. +

+
diff --git a/data/jorson/blogs/life/2020-08-27.html b/data/jorson/blogs/life/2020-08-27.html new file mode 100644 index 00000000..90483698 --- /dev/null +++ b/data/jorson/blogs/life/2020-08-27.html @@ -0,0 +1,20 @@ +
+

Have you ever been playing Blaseball when something really tugged at your heart and made you ask, "Where am I going + to play Papa's Pizzeria after December 2020?" +

Many browsers are ending Flash support + come December of this year. My generation grew up on these games, and I would argue that these games paved the way + for the modern indie video game market. The newest generation won't have these games, but instead has the Android + and Apple app stores. Maybe I have nostalgia blinders, but I really do believe that the mediocre titles of the Flash + era either matched, or at least came near to matching the quality of modern mobile games. Many influential mobile + games even started as Flash, such as Kingdom Rush, Canabalt, and Bloons Tower Defense. +

+ Flash is not inherently good. From a technical standpoint, we have made incredible progress in enabling developers + to build their creations beyond the likes of + Flash. The spirit of Flash is what was special. Before commercialization and ad profits entered the picture, these + games were made by developers with simple wishes to share their dreams with others. +

+ I work on games in the hopes of pushing myself and others to do this very thing. In the memory of Flash, I will + continue to recreate my + favorite Flash games on this site, and hopefully bring some unique creations up along the way. +

" +
diff --git a/data/jorson/blogs/life/2021-02-02.html b/data/jorson/blogs/life/2021-02-02.html new file mode 100644 index 00000000..a1222bcf --- /dev/null +++ b/data/jorson/blogs/life/2021-02-02.html @@ -0,0 +1,26 @@ +
+

+ Oh dear Lord there has been a lot since last time. Amongst an insurrection on the US capitol and a stock war over + GameStop, my wife and I bought a house and got a third cat, Fish. +

+ I learned a few new programming languages including two new favorites of mine: Scala and Nim (All good languages + seem to have website domains of the form www.[language name here]-lang.com). I mostly ported the Komodo + game engine to Scala using LibGDX and only gave up once Java UI threads were getting in the way of easy UI + development. It was fun and all, but I think the real winner and final home for the Komodo engine is with Nim. +

+ Nim satisfies my urge to write what looks like pseudocode while enjoying the benefits of a statically typed and + compiled language. No attempt by the Nim developers to make a compiler smarter than two of some of the largest + open-source communities (
GCC and Clang), + but instead harnesses these behemoths by simply generating C-family code and passing it off to your local system + compiler. With a powerful macro system, Komodo has never looked better and I am excited to see what can be done with + Nim and Raylib. +

+ Apart from code, my life has changed in other ways. My teammates at work left for other teams or other + companies, leaving me alone to develop and maintain an app servicing a workforce around ~2,000 strong. I am + excited to say that this will not be the case forever, as I will be transitioning to an SRE position once my + project is ready to hand off to a new team. Work is great. Life is great. For those who cannot say these same + things for themselves, reach out to those who love you and have faith that this will all come to an end + eventually. +

+
diff --git a/data/jorson/blogs/life/2021-03-30.html b/data/jorson/blogs/life/2021-03-30.html new file mode 100644 index 00000000..0bcd9fd1 --- /dev/null +++ b/data/jorson/blogs/life/2021-03-30.html @@ -0,0 +1,40 @@ +
+

+ Somehow my blog posting is more consistent than I expected it would be and that is sad. Like always, a lot has been + going on in my life with much of it being generally positive. I am currently transitioning off of the team I started + on at my work. I thought I would be more nostalgic in this moment, but I am simply relieved. Feature development for + users is not my cup of tea any longer. I have been steeping myself deeper and deeper into different programming + languages (primarily Nim and Elm) and + even found a new code editor I intend to slowly replace VSCode with (the + editor is called Lite, but I am specifically using the Lite-XL fork). Needless to say, the technology I use in my life is + in a constant state of change and I wouldn't have it any other way. +

+ From a non-technical standpoint, I have some general exciting life updates! I have struggled with my weight for my + entire life. I have been a vegan for the past few years, experienced some improvement in general with my health, but + I was still struggling to fight my food addiction and lose weight. I had been spiralling in private, feeling + hopeless and getting scared I would end up like many others around me who never got their weight under control. + After watching the documentary Diet Fiction, I decided to remove + processed foods from my life and eat just whole foods. Eating only whole foods has had both a physical and spiritual + effect on me already. I was 277 lbs on March 5th, and over the course of this month I have steadily dropped down to + 262.2 lbs and I intend to keep going. My mood has improved, my energy levels have skyrocketed, and my understanding + of food has changed forever. +

+ My wife and I have also been making great progress on our backyard homestead and these two things combined are + prompting me to think. As a Christian, I have been thinking about what eating only whole foods means from a + spiritual perspective and my thoughts are best summed up in this nearly two hour documentary on YouTube. As succinctly as + possible, eating whole foods and my wife and I's work to grow our household's food are driven by an innate desire to + connect with the roles and skills God imbued us with as stewards of the Earth. It is hard to argue against the + damage humans have caused throughout all of history, and maybe the answer to humanity's environmental woes lies in + the creation narrative. The spiritual aspects of this will not connect for everyone, but the benefits of growing + your own food and consuming what comes from the Earth can be taken on their own merits. +

+ Do I believe processed foods are inherently evil? No. +

+ Do I believe you can't live a healthy life unless you only eat whole foods? Of course not. +

+ Though, I leave you with a question to ask yourself: Why do humans act as if we are not a party within + nature, but rather some strictly destructive external force on nature? +

+
diff --git a/data/jorson/blogs/life/blogs.json b/data/jorson/blogs/life/blogs.json new file mode 100644 index 00000000..72104780 --- /dev/null +++ b/data/jorson/blogs/life/blogs.json @@ -0,0 +1,27 @@ +[ + { + "date": "2020-08-20", + "title": "Hello World!", + "content": {} + }, + { + "date": "2020-08-22", + "title": "Coffee grounds, vodka sauce, and daydreams", + "content": {} + }, + { + "date": "2020-08-27", + "title": "Flashy Ideas", + "content": {} + }, + { + "date": "2021-02-02", + "title": "Oh dear", + "content": {} + }, + { + "date": "2021-03-30", + "title": "Two blogs in two months, nice", + "content": {} + } +] diff --git a/data/jorson/games/nox/adventure.json b/data/jorson/games/nox/adventure.json new file mode 100644 index 00000000..e2c903b8 --- /dev/null +++ b/data/jorson/games/nox/adventure.json @@ -0,0 +1,92 @@ +{ + "defaultState": "default", + "states": [ + { + "info": { + "id": "default" + }, + "nextStates": [ + "pantry", + "food bowl", + "homicide" + ], + "options": [ + "Go to the pantry", + "Feed Nox", + "Pet Luna" + ], + "requiredItem": null, + "text": "Nox and Luna are both in the room and very soft.\nNox looks angry about something.\n\"I am fat. Feed me now!\" says Nox." + }, + { + "info": { + "id": "pantry" + }, + "nextStates": [ + "grab food", + "default" + ], + "options": [ + "Grab the cat food", + "Go back to the cats" + ], + "acquiredItem": null, + "requiredItem": null, + "text": "You look in the pantry and see some cat food." + }, + { + "info": { + "id": "grab food" + }, + "nextStates": [ + "pantry", + "default" + ], + "options": [ + "Go back to the pantry", + "Go back to the cats" + ], + "acquiredItem": { + "id": "food" + }, + "requiredItem": null, + "text": "You grab the cat food and have it in your hand." + }, + { + "info": { + "id": "food bowl" + }, + "nextStates": [ + "end", + "homicide" + ], + "options": [ + "Pet Nox", + "Pet Luna" + ], + "acquiredItem": null, + "requiredItem": { + "id": "food" + }, + "text": "Nox is satisfied, and still very soft.\nHis sister Luna wants to be pet." + }, + { + "info": { + "id": "homicide" + }, + "nextStates": [], + "options": [], + "requiredItem": null, + "text": "Nox killed you.\nTry again." + }, + { + "info": { + "id": "end" + }, + "nextStates": [], + "options": [], + "requiredItem": null, + "text": "You made Nox happy by ignoring Luna.\nCongratulations!" + } + ] +} \ No newline at end of file diff --git a/data/jorson/staging/index.html b/data/jorson/staging/index.html new file mode 100644 index 00000000..158f318f --- /dev/null +++ b/data/jorson/staging/index.html @@ -0,0 +1,3 @@ +
+ hello world from injected html land +
\ No newline at end of file diff --git a/data/pages.json b/data/pages.json new file mode 100644 index 00000000..45bfb85a --- /dev/null +++ b/data/pages.json @@ -0,0 +1,29 @@ +[ + { + "id": "dabby", + "name": "Dabbington" + }, + { + "id": "jorson", + "name": "James Orson" + }, + { + "id": "nbarlow", + "name": "Nathan Barlow", + "linkOverride": "/webring/nbarlow" + }, + { + "id": "torson", + "name": "Tasha Simone Orson" + }, + { + "id": "accessible-ally", + "name": "Accessible A11y", + "linkOverride": "https://www.accessiblea11y.com" + }, + { + "id": "the-lisp-curse", + "name": "The LISP Curse", + "linkOverride": "http://winestockwebdesign.com/Essays/Lisp_Curse.html" + } +] diff --git a/data/torson/blogs/baby-carrier/_template.html b/data/torson/blogs/baby-carrier/_template.html new file mode 100644 index 00000000..83024b83 --- /dev/null +++ b/data/torson/blogs/baby-carrier/_template.html @@ -0,0 +1,3 @@ +
+

Hello baby carrier blog

+
\ No newline at end of file diff --git a/data/torson/blogs/baby-carrier/blogs.json b/data/torson/blogs/baby-carrier/blogs.json new file mode 100644 index 00000000..79b58b06 --- /dev/null +++ b/data/torson/blogs/baby-carrier/blogs.json @@ -0,0 +1,9 @@ +[ + { + "id": "template", + "title": "Template", + "content": { + "path": "blogs/baby-carrier/_template.html" + } + } +] diff --git a/data/torson/blogs/book/_template.html b/data/torson/blogs/book/_template.html new file mode 100644 index 00000000..9fcadb59 --- /dev/null +++ b/data/torson/blogs/book/_template.html @@ -0,0 +1,3 @@ +
+

Hello book blog

+
\ No newline at end of file diff --git a/data/torson/blogs/book/blogs.json b/data/torson/blogs/book/blogs.json new file mode 100644 index 00000000..d17a80c6 --- /dev/null +++ b/data/torson/blogs/book/blogs.json @@ -0,0 +1,9 @@ +[ + { + "id": "template", + "title": "Template", + "content": { + "path": "blogs/book/_template.html" + } + } +] diff --git a/data/torson/blogs/life/2021-08-15.html b/data/torson/blogs/life/2021-08-15.html new file mode 100644 index 00000000..03800e65 --- /dev/null +++ b/data/torson/blogs/life/2021-08-15.html @@ -0,0 +1,3 @@ +
+

Words, writing, and overly complicated thoughts have been my relationship to the world ever since I learned to read and finished speech therapy so people could understand me. Yadda yadda yadda, this is not the first time I've started a blog but it might just stick this time. I'm in a transformative part of life and getting to a place where I have more time dedicated to myself, which partly displays as writing out my experiences and feelings as a form of self care and decided vulnerability to the world. Speaking is still tough for me sometimes, but writing gives my brain the space to formulate and readress in a flashier fashion. That is, I think I sound more interesting over long form text than any other medium of communication. In recent years (since graduating college) my need to write in longform manner ceased, and electively I made attempts at journaling but as per usual my neurodivergent brain had trouble resuming the routine when interrupted, leading to sporadic entries. I like timeliness and order as a person, yet I struggle to maintain it on completely self-driven projects. If a third party is dependent on me for something, it will get done, but I fail to value my projects and time enough to pursue them independently. Rather than grind against this nature, I'm choosing to accept the cyclicly sporadic nature of my content creation and interests and just do something whenever I feel the urge. Otherwise I'm conditioned to endlessly plan and what if things and feel the need to perfectly execute some monetizable SEO perfect blog with a dozen entries from the getgo... which is just setting myself up to never sit down and do the 50 hours of work that would take me to make it feel good enough before even telling a single soul. Instead, here I am on a cute Blazer project setup by James ready to be a little less particular about what I write into the world.

+
diff --git a/data/torson/blogs/life/2021-08-30.html b/data/torson/blogs/life/2021-08-30.html new file mode 100644 index 00000000..24998335 --- /dev/null +++ b/data/torson/blogs/life/2021-08-30.html @@ -0,0 +1,3 @@ +
+

Roommate birthday and finally taking time to think lands me writing again. Last time I worked on this site, two weeks ago, it was my husbands birthday - me getting back into some level of coding was the gift he wanted, so that's when he got me set up to write these on ExoKomodo since it's his passion project. Frankly I know I can benefit from it too, and having the encouragement of living with the guy who runs it helps me remember it exists. Eventually I may come up with some elaborate structure, tone, voice, and style for my blog posts but for now I simply need to get out of my own head and practice writing again. As a child I was a prolific reader and writer, but the demands of acadamia since I started college at 14 quelled my exuberance for language and communication beyond strict necessity. Sounds cheesy, but I've always felt like I was a 'writer' despite not actually writing much; how many thoughts have I had about writing? Since I'm on the autism spectrum, I think written words have been the most reliable form of communication. Without overthinking, I can express thoughts more fully, without feeling rushed and with just the slight restriction on flow by how fast I can write. I started lots of writing projects, diaries, journals, blogs, etc as a kid but nothing serial made it past three editions on any sort of regular timeline, accidentally abandoned by my neurodivergence. Writing these as a stream of conciousness, I hope to unlock parts of my inner dialogue that I've sealed in soundproof coffins for too long. By more actively letting go of my thought reins, I may undo some of my habituated anxiety. Old habits won't go away because you wish they would, only when you replace them with different behaviors. Part of the reason I'm writing this now is because I am establishing new routines to break old habits. Each day of the week has a theme or features - Monday is Media-Free (and for planning the week ahead), so we have app limits set on social and streaming media to encourage more creative or interactive activity. Thus, I'm writing and enjoying myself in a way that is not passively consuming the lives of others; instead I'm doing something with my own, even if it's as little as writing some sentences into an HTML file to push via VSCode. This is the wild frontier, we don't need your dang PressWord and SpaceSquares. Don't worry, I don't expect anyone to understand all of my references - except maybe James. Anyway, since it's our bestie's birthday I'm gonna DoorDash some food... maybe chikn wings, since last post was the Pilot. :)

+
diff --git a/data/torson/blogs/life/2022-07-18.html b/data/torson/blogs/life/2022-07-18.html new file mode 100644 index 00000000..eed32136 --- /dev/null +++ b/data/torson/blogs/life/2022-07-18.html @@ -0,0 +1,3 @@ +
+

I gave birth for the first time nearly 6 months ago but I'm still struggling to feel like a mother. I quit my six figure career to rest the third trimester and be a stay at home mom. The vision was that I would immediately transform into a wizard matriarchal homemaker, who both knows what's for dinner and has the ingredients (and time and energy) to make it every night. Also lunch. And breakfast. In reality, meals get skipped and blood sugars crash and we lack the energy to clean a kitchen only to dirty it again so more energy is spent crying about it than is able to be used to form a long term solution. Help is needed, but I don't know how to articulate my issues, or where to even begin. I get distracted easily, but also need to have a tangible goal in mind to work towards. I feel so busy trying to keep our house somewhat clean and usable that I never feel I have a chance to look up before another week has passed, and oh the weekend has come, which means my partner is off work and able to help but the combination of wanting to finish things while I have a chance but also wanting to rest from full time babyminding means I end up in an anxious spiral of neither happening well. What I realized today is the hard part at this point is opening up at all. I'm in the throes of months-long postpartum depression, and feel mostly responsible for getting myself here, how true that is, I'm not sure. Incredible amounts of self restraint and biting my tongue out of learned shame responses has gotten me to this point. My dad once got mad at me for posting vague details about my home life on the internet when I was 14, declaring I was bringing shame to our family and lying. Now I'm 25 and still scared to post what I think on the internet for just anyone to read even though that's all I've ever wanted to do. I adored reading diaries, journals, and autobiographies growing up, and have always been inspired to make one of my own but failed to have the confidence in being interesting, pointed, concise, or consistent enough to make it worthwhile. Well now, I am a fully grown adult woman and mother, discarding shame and trusting my own intuition on what is and isn't okay to post on the internet. No, I am not at my best when writing this. But there are no definitions of what my best is anymore. There are no guarantees of progression, ever. But if something might work, like venting personal history on the fringes of the web, I should give it a go.

+
diff --git a/data/torson/blogs/life/2022-07-19.html b/data/torson/blogs/life/2022-07-19.html new file mode 100644 index 00000000..c59dd104 --- /dev/null +++ b/data/torson/blogs/life/2022-07-19.html @@ -0,0 +1,4 @@ +
+

My first ventures into mom van life have gone less than stellar. When baby was about 3.5 months, I had to pull over twice driving the 18 miles back from the horse barn because my body-mind system could not handle the sound of her crying out of boredom and loneliness in the back seat. No amount of talking, singing, or promises of how soon we would be home can placate a small baby who cannot see their parent. She was fed and pottied just before departing, so it seemed she was just lonely (maybe she needed to burp, frankly that's been the hardest issue for me to diagnose as a mom). But on the second time pulling over, I climbed in the backseat on the carpool lane shoulder of 280 through downtown San Jose, accidentally kicking my Prius's gear shift into neutral, sending us rolling backward in my panic to comfort my baby in the backseat. Curse words filling the car's air, I got the car truly parked before facetiming my husband to talk me through getting the 13 minutes remaining home. It took a month for me to attempt leaving the house alone with my child again. We survived the 7 minutes to the Target parking lot, but the cries started when we turned in and I was in tears myself by the time I found a parking spot, which was too far from the entrance for the shopping cart to be pushed all the way to my car. On the way back, we took a wrong turn because of crying and had to yet again facetime dad to calmly talk us through getting the mile home. So it's been another month of relegating my trips out of the house to his schedule of being able to watch her or drive us all where I want to go. This means grocery shopping doesn't really happen, and I have yet to venture to wherever it is that moms go to make mom friends. Of course, groups and mama meetups have been suggested to me by an older pre-covid generation trying to help me out of this hole, but the missing piece is that I can't make it driving anywhere with child in tow. Now another month has gone by for my will to face my fears and try again. But with so much pressure on myself to leave the house, maybe I overlook a pottytunity and don't really secure the iPad I've finally decided to utilize as special car seat screen time, so it falls 4 minutes into our 13 minute drive and the potential energy of that effort goes to waste. We hit every long red light, and I visualize my cry-resistant coping shield blocking the noise, but 7 minutes later, 1.2 miles from my initial destination of the pet food and grocery stores, I abandon course and pull into the nearest parking lot with tears and comfort her. A shaken, quaking mess I text my partner a quick update. He calls, and assures me he can order the pet food for delivery and that I should try to enjoy the mall with baby, as she was due for a nap in a wrap anyway. Taking deep breaths and a step at a time, I jaywalked across the mall road as there was no reasonable pedestrian crossing from the market parking lot I ended up in, and had minimal effort left to give. Get to the froyo shop, and go from there. Baby conked in the carrier almost immediately, but 18 lbs strapped to my chest and the incessant echoing of coin operated ride music quickly becomes overstimulating for me. I consumed a bowl full of cold fruity sugar on my way to manage goal number two, purchasing forever stamps from the post office downstairs, not that we're mailing anything but because they won't get any cheaper. With a freshly sleeping baby, it's best to avoid conversations in loud places with strangers, so I wandered to the self service machine, and selected my options for forever stamps, expecting it to dispense the usual graphic stickers. Instead, after commiting to the purchase, it had to bypass and start printing QR code postage on thermal paper labels. Each label printed and cut individually, so my 20 count purchase and the slamming of the drop box label from the elderly woman next to us was too cacophanous in the tile and metal P.O. Box walls to let a baby rest. She was about 50 minutes into her rest on my chest, so while a sufficient nap for her I was overwhelmed by my suddenly less easily stored stamp hoard and hadn't had time to recuperate my mental state and figure out a next step or purpose for being at the mall, so my heart sank in my chest as it does when she wakes up before I feel ready. I hate that I feel like that, and want to naturally greet my child with joy when they wake, not be scaredly shushing a silent happy baby hoping they'll fall asleep when I know damn well that was enough sleep for a less stimulated baby and then the mom guilt cycle starts of feeling like I'll never know how to stay ahead of my kid and properly engage them to optimize development. I have all these tools (the internet) at my disposal, why aren't I the perfect super parent and early childhood development expert I want to be already? Time. Experience. Observation. Three elements I lack, which I can't rush. I can practice observation, by being more mindful in the moment and developing habits for myself like this of writing down my experiences and actively learning from them. Key word is active learning. I do so much passive learning by having a Curiosity Stream video playing in the background of my daily tasks, but I've disengaged from the active learning and reflection that so dearly sits with me. Writing out the reports for a science experiment always felt tedious to me when homeschooling, but that was definitely how the information locked into my brain. I had to experience it once, but then play it back through in my incredible short term visual memory and actually experience it again, observing and learning from it. Like watching a movie again, you notice more and connect mroe dots. This practice of reflecting and writing will help seal my day to day memories, and process the purpose of many life experiences that I've become too caught up in trying to maximize. Going to work on reliving my own life and being intimate with myself in that way. Letting myself dwell on what is. With an alert infant and temp sensitive stamps shoved in my fanny pack, I trudged back to the car, jaywalking again, just trying to breathe. Secured the iPad playing Frozen so it wouldn't fall again, and headed home feeling defeated with a dash of halfhearted accomplishment. She barely made a noise on the drive back, so the secured screen really might be my ticket to the world again.

+

Baby types: nnb ;l. v ? ,,,,,,,,,,hynj mq`Q;';``````` qq 6t

+
diff --git a/data/torson/blogs/life/blogs.json b/data/torson/blogs/life/blogs.json new file mode 100644 index 00000000..7a5356fe --- /dev/null +++ b/data/torson/blogs/life/blogs.json @@ -0,0 +1,22 @@ +[ + { + "date": "2021-08-15", + "title": "Pilot", + "content": {} + }, + { + "date": "2021-08-30", + "title": "Wings", + "content": {} + }, + { + "date": "2022-07-18", + "title": "Crew", + "content": {} + }, + { + "date": "2022-07-19", + "title": "Passengers", + "content": {} + } +] diff --git a/favicons/favicon.ico b/favicons/favicon.ico new file mode 100644 index 00000000..79490212 Binary files /dev/null and b/favicons/favicon.ico differ diff --git a/favicons/jorson/android-chrome-192x192.png b/favicons/jorson/android-chrome-192x192.png new file mode 100644 index 00000000..a0c0b3ff Binary files /dev/null and b/favicons/jorson/android-chrome-192x192.png differ diff --git a/favicons/jorson/android-chrome-512x512.png b/favicons/jorson/android-chrome-512x512.png new file mode 100644 index 00000000..b483be0d Binary files /dev/null and b/favicons/jorson/android-chrome-512x512.png differ diff --git a/favicons/jorson/apple-touch-icon.png b/favicons/jorson/apple-touch-icon.png new file mode 100644 index 00000000..190fae24 Binary files /dev/null and b/favicons/jorson/apple-touch-icon.png differ diff --git a/favicons/jorson/favicon-16x16.png b/favicons/jorson/favicon-16x16.png new file mode 100644 index 00000000..058d016a Binary files /dev/null and b/favicons/jorson/favicon-16x16.png differ diff --git a/favicons/jorson/favicon-32x32.png b/favicons/jorson/favicon-32x32.png new file mode 100644 index 00000000..dea52bdd Binary files /dev/null and b/favicons/jorson/favicon-32x32.png differ diff --git a/favicons/jorson/favicon.ico b/favicons/jorson/favicon.ico new file mode 100644 index 00000000..1050bf22 Binary files /dev/null and b/favicons/jorson/favicon.ico differ diff --git a/favicons/jorson/site.webmanifest b/favicons/jorson/site.webmanifest new file mode 100644 index 00000000..45dc8a20 --- /dev/null +++ b/favicons/jorson/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/fonts/.gitkeep b/fonts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/fonts/dabby/newrocker/misc/FONTLOG-8401.txt b/fonts/dabby/newrocker/misc/FONTLOG-8401.txt new file mode 100644 index 00000000..0e8bb580 --- /dev/null +++ b/fonts/dabby/newrocker/misc/FONTLOG-8401.txt @@ -0,0 +1,70 @@ +FONTLOG for the NewRocker fonts + +This file provides detailed information on the NewRocker Font Software. + +This information should be distributed along with the NewRocker fonts and any derivative works. + +Basic Font Information: + +NewRocker is a loud, harsh, screaming font. +With Blackletter, Tattoo and Heavy Metal logos as inspiration. + +The NewRocker character set covers 103 Latin languages: Afar, Afrikaans, +Albanian, Azerbaijani, Basque, Belarusian, Bislama, Bosnian, Breton, Catalan, +Chamorro, Chichewa, Comorian, Czech, Danish, Dutch, English, Esperanto, +Estonian, Faroese, Fijian, Filipino/Tagalog, Finnish, Flemish, French, Gaelic +(Irish / Manx / Scottish), Gagauz, German, Gikuyu, Gilbertese/Kiribati, +Greenlandic, Guarani, Haitian_Creole, Hawaiian, Hungarian, Icelandic, +Igo/Igbo, Indonesian, Irish, Italian, Javanese, Kashubian, Kinyarwanda, +Kirundi, Latin, Latvian, Lithuanian, Luba/Ciluba/Kasai, Luxembourgish, +Malagasy, Malay, Maltese, Maori, Marquesan, Marshallese, +Moldovan/Moldovian/Romanian, Montenegrin, Nauruan, Ndebele, Norwegian, Oromo, +Palauan/Belauan, Polish, Portuguese, Quechua, Romanian, Romansh, Sami, Samoan, +Sango, Serbian, Sesotho, Setswana/Sitswana/Tswana, Seychellois_Creole, +SiSwati/Swati/Swazi, Silesian, Slovak, Slovenian, Somali, Sorbian, Sotho, +Spanish, Swahili, Swedish, Tahitian, Tetum, Tok_Pisin, Tongan, Tsonga, Tswana, +Tuareg/Berber, Turkish, Turkmen, Tuvaluan, Uzbek/Usbek, Wallisian, Walloon, +Welsh, Xhosa, Yoruba, Zulu. + +Join the project at: +http://www.impallari.com/projects/overview/newrocker + +Documentation can be found at www.impallari.com + +To contribute to the project contact Pablo Impallari at impallari@gmail.com + +ChangeLog + +28 nov 2012 (Brenda Gallo, Rodrigo Fuenzalida, Pablo Impallari) NewRocker v1.0 +- Ikerned +- v1 Release + +23 nov 2012 (Brenda Gallo, Rodrigo Fuenzalida, Pablo Impallari) NewRocker v0.45 +- Ready for Ikern + +19 June 2012 (Brenda Gallo, Rodrigo Fuenzalida, Pablo Impallari) NewRocker v0.17 +- Initial Beta release + +Acknowledgements + +If you make modifications be sure to add your name (N), +email (E), web-address (if you have one) (W) and +description (D). This list is in alphabetical order. + +N: Pablo Impallari +E: impallari@gmail.com +W: http://www.impallari.com +D: Designer + +N: Brenda Gallo +E: gbrenda1987@gmail.com +W: http://www.impallari.com +D: Designer + +N: Rodrigo Fuenzalida +E: hello@rfuenzalida.com +W: http://www.rfuenzalida.com +D: Designer + + + diff --git a/fonts/dabby/newrocker/misc/OFL-0e5e.txt b/fonts/dabby/newrocker/misc/OFL-0e5e.txt new file mode 100644 index 00000000..060f0034 --- /dev/null +++ b/fonts/dabby/newrocker/misc/OFL-0e5e.txt @@ -0,0 +1,96 @@ +Copyright (c) 2011, Pablo Impallari (www.impallari.com|impallari@gmail.com), +Copyright (c) 2011, Brenda Gallo (gbrenda1987@gmail.com), +Copyright (c) 2011, Rodrigo Fuenzalida (www.rfuenzalida.com|hello@rfuenzalida.com), +with Reserved Font Name NewRocker. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/dabby/newrocker/newrocker.ttf b/fonts/dabby/newrocker/newrocker.ttf new file mode 100644 index 00000000..bb343709 Binary files /dev/null and b/fonts/dabby/newrocker/newrocker.ttf differ diff --git a/fonts/jorson/Roboto-Regular.ttf b/fonts/jorson/Roboto-Regular.ttf new file mode 100644 index 00000000..2b6392ff Binary files /dev/null and b/fonts/jorson/Roboto-Regular.ttf differ diff --git a/fonts/nbarlow/Rubik-Regular.ttf b/fonts/nbarlow/Rubik-Regular.ttf new file mode 100644 index 00000000..06a67a2d Binary files /dev/null and b/fonts/nbarlow/Rubik-Regular.ttf differ diff --git a/img/.gitkeep b/img/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/img/dabby/car-sign.jpg b/img/dabby/car-sign.jpg new file mode 100644 index 00000000..55b297ca Binary files /dev/null and b/img/dabby/car-sign.jpg differ diff --git a/img/dabby/closet.jpg b/img/dabby/closet.jpg new file mode 100644 index 00000000..2401e1dc Binary files /dev/null and b/img/dabby/closet.jpg differ diff --git a/img/dabby/dancing-skeleton.gif b/img/dabby/dancing-skeleton.gif new file mode 100644 index 00000000..0e5d719f Binary files /dev/null and b/img/dabby/dancing-skeleton.gif differ diff --git a/img/dabby/holding-sign.jpg b/img/dabby/holding-sign.jpg new file mode 100644 index 00000000..48885d61 Binary files /dev/null and b/img/dabby/holding-sign.jpg differ diff --git a/img/dabby/ramen-blog/2020-09-17/bag.png b/img/dabby/ramen-blog/2020-09-17/bag.png new file mode 100644 index 00000000..fe26ab70 Binary files /dev/null and b/img/dabby/ramen-blog/2020-09-17/bag.png differ diff --git a/img/dabby/ramen-blog/2020-09-17/bowl.png b/img/dabby/ramen-blog/2020-09-17/bowl.png new file mode 100644 index 00000000..4b9f4f9b Binary files /dev/null and b/img/dabby/ramen-blog/2020-09-17/bowl.png differ diff --git a/img/dabby/ramen-blog/2020-09-17/ingredients.png b/img/dabby/ramen-blog/2020-09-17/ingredients.png new file mode 100644 index 00000000..a96fedcc Binary files /dev/null and b/img/dabby/ramen-blog/2020-09-17/ingredients.png differ diff --git a/img/dabby/ramen-blog/2020-09-17/nutrition-facts.png b/img/dabby/ramen-blog/2020-09-17/nutrition-facts.png new file mode 100644 index 00000000..49d6476d Binary files /dev/null and b/img/dabby/ramen-blog/2020-09-17/nutrition-facts.png differ diff --git a/img/dabby/ramen-blog/2020-09-17/stove.png b/img/dabby/ramen-blog/2020-09-17/stove.png new file mode 100644 index 00000000..75341617 Binary files /dev/null and b/img/dabby/ramen-blog/2020-09-17/stove.png differ diff --git a/img/geekring.gif b/img/geekring.gif new file mode 100644 index 00000000..068676bc Binary files /dev/null and b/img/geekring.gif differ diff --git a/img/jorson/about/family.png b/img/jorson/about/family.png new file mode 100644 index 00000000..b67cd4ae Binary files /dev/null and b/img/jorson/about/family.png differ diff --git a/img/jorson/about/headshot.png b/img/jorson/about/headshot.png new file mode 100644 index 00000000..bdbaee5f Binary files /dev/null and b/img/jorson/about/headshot.png differ diff --git a/img/jorson/blogs/food/banana-bread/notecard-directions.jpg b/img/jorson/blogs/food/banana-bread/notecard-directions.jpg new file mode 100644 index 00000000..84cf2a6f Binary files /dev/null and b/img/jorson/blogs/food/banana-bread/notecard-directions.jpg differ diff --git a/img/jorson/blogs/food/banana-bread/notecard-ingredients.jpg b/img/jorson/blogs/food/banana-bread/notecard-ingredients.jpg new file mode 100644 index 00000000..e618d826 Binary files /dev/null and b/img/jorson/blogs/food/banana-bread/notecard-ingredients.jpg differ diff --git a/img/jorson/james-logo-transparent.png b/img/jorson/james-logo-transparent.png new file mode 100644 index 00000000..0c810930 Binary files /dev/null and b/img/jorson/james-logo-transparent.png differ diff --git a/img/jorson/james-logo.png b/img/jorson/james-logo.png new file mode 100644 index 00000000..60d61666 Binary files /dev/null and b/img/jorson/james-logo.png differ diff --git a/img/jorson/james-logo.svg b/img/jorson/james-logo.svg new file mode 100644 index 00000000..9929580c --- /dev/null +++ b/img/jorson/james-logo.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/jorson/knuckles.jpg b/img/jorson/knuckles.jpg new file mode 100644 index 00000000..79fcb6b2 Binary files /dev/null and b/img/jorson/knuckles.jpg differ diff --git a/img/jorson/nox_and_luna.jpg b/img/jorson/nox_and_luna.jpg new file mode 100644 index 00000000..602517ac Binary files /dev/null and b/img/jorson/nox_and_luna.jpg differ diff --git a/img/jorson/nox_closeup.jpg b/img/jorson/nox_closeup.jpg new file mode 100644 index 00000000..0e71a9fa Binary files /dev/null and b/img/jorson/nox_closeup.jpg differ diff --git a/img/nbarlow/creeper-crunch-me.jpg b/img/nbarlow/creeper-crunch-me.jpg new file mode 100644 index 00000000..d025c3ed Binary files /dev/null and b/img/nbarlow/creeper-crunch-me.jpg differ diff --git a/img/torson/loading-bunny.gif b/img/torson/loading-bunny.gif new file mode 100644 index 00000000..218012d6 Binary files /dev/null and b/img/torson/loading-bunny.gif differ diff --git a/img/torson/logo-t.png b/img/torson/logo-t.png new file mode 100644 index 00000000..cc8015dc Binary files /dev/null and b/img/torson/logo-t.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..a3c99933 --- /dev/null +++ b/index.html @@ -0,0 +1,31 @@ + + + + + + + ExoKomodo + + + + + + + + + + + + + + ExoKomodo is rising + +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + diff --git a/js/browserHelpers.js b/js/browserHelpers.js new file mode 100644 index 00000000..6dc782b4 --- /dev/null +++ b/js/browserHelpers.js @@ -0,0 +1,29 @@ +function loadFromLocalStorage(key) { + return JSON.parse(localStorage.getItem(key)); +} + +function saveToLocalStorage(key, obj) { + localStorage.setItem(key, JSON.stringify(obj)); +} + +function scrollIntoView(elementId) { + const elem = document.getElementById(elementId); + if (elem) { + elem.scrollIntoView(); + window.location.hash = elementId; + } +} + +function updateFavicon(faviconUri) { + const favicon = document.getElementById('favicon'); + if (!favicon) { + console.error('Could not find favicon tag.'); + return; + } + let href = favicon.getAttributeNode('href'); + if (!href) { + href = document.createAttribute('href'); + favicon.setAttributeNode(href); + } + href.value = faviconUri; +} \ No newline at end of file diff --git a/js/p5Wrapper.js b/js/p5Wrapper.js new file mode 100644 index 00000000..8a8cbcc6 --- /dev/null +++ b/js/p5Wrapper.js @@ -0,0 +1,546 @@ + +function startP5(p5Implementation, container) { + let sketch = function(p) { + window.p5Instance = p; + + // #region Main functions + p.deviceMoved = function() { + p5Implementation.invokeMethod('deviceMoved'); + } + + p.deviceShaken = function() { + p5Implementation.invokeMethod('deviceShaken'); + } + + p.deviceTurned = function() { + p5Implementation.invokeMethod('deviceTurned'); + } + + p.disableFriendlyErrorsDotnet = function(value) { + this.disableFriendlyErrors = !!value; + } + + p.doubleClicked = function() { + return p5Implementation.invokeMethod('doubleClicked'); + } + + p.draw = function() { + p5Implementation.invokeMethod('draw'); + } + + p.getValue = function(valueName) { + return this[valueName]; + } + + p.invokeP5Function = function(functionName) { + var args = Array.prototype.splice.call(arguments, 1); + this[functionName].apply(this, args); + } + + p.invokeP5FunctionAndReturn = function(functionName) { + var args = Array.prototype.splice.call(arguments, 1); + return this[functionName].apply(this, args); + } + + p.keyPressed = function() { + return p5Implementation.invokeMethod('keyPressed'); + } + + p.keyReleased = function() { + return p5Implementation.invokeMethod('keyReleased'); + } + + p.keyTyped = function() { + return p5Implementation.invokeMethod('keyTyped'); + } + + p.mouseClicked = function() { + return p5Implementation.invokeMethod('mouseClicked'); + } + + p.mouseDragged = function() { + return p5Implementation.invokeMethod('mouseDragged'); + } + + p.mouseMoved = function() { + return p5Implementation.invokeMethod('mouseMoved'); + } + + p.mousePressed = function() { + return p5Implementation.invokeMethod('mousePressed'); + } + + p.mouseReleased = function() { + return p5Implementation.invokeMethod('mouseReleased'); + } + + p.mouseWheel = function(event) { + return p5Implementation.invokeMethod('mouseWheel', event.delta); + } + + p.preload = function() { + p5Implementation.invokeMethod('preload'); + } + + p.setup = function() { + p5Implementation.invokeMethod('setup'); + } + + p.touchEnded = function() { + return p5Implementation.invokeMethod('touchEnded'); + } + + p.touchMoved = function() { + return p5Implementation.invokeMethod('touchMoved'); + } + + p.touchStarted = function() { + return p5Implementation.invokeMethod('touchStarted'); + } + + p.windowResized = function() { + p5Implementation.invokeMethod('windowResized'); + } + // #endregion + + // #region Camera + p.cameras = {}; + p.nextCameraId = 0; + + p._getCamera = function(id) { + let camera = this.cameras[id]; + if (!camera) { + console.error(`Camera with id '${id}' is not loaded`); + return null; + } + return camera; + } + + p.createCameraDotnet = function() { + p.cameras[p.nextCameraId] = this.createCamera(); + return { + id: p.nextCameraId++, + }; + } + + p.frustumDotnet = function(id, left, right, bottom, top, near, far) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.frustum(left, right, bottom, top, near, far); + } + + p.lookAtDotnet = function(id, x, y, z) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.lookAt(x, y, z); + } + + p.moveDotnet = function(id, x, y, z) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.move(x, y, z); + } + + p.orthoDotnet = function(id, left, right, bottom, top, near, far) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.ortho(left, right, bottom, top, near, far); + } + + p.panDotnet = function(id, angle) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.pan(angle); + } + + p.perspectiveDotnet = function(id, fovY, aspect, near, far) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.perspective(fovY, aspect, near, far); + } + + p.setCameraDotnet = function(id) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + this.setCamera(camera); + } + + p.setCameraParametersDotnet = function(id, x, y, z, centerX, centerY, centerZ, upX, upY, upZ) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.camera(x, y, z, centerX, centerY, centerZ, upX, upY, upZ); + } + + p.setCameraPositionDotnet = function(id, x, y, z) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.setPosition(x, y, z); + } + + p.tiltDotnet = function(id, angle) { + let camera = this._getCamera(id); + if (!camera) { + return; + } + camera.tilt(angle); + } + // #endregion + + // #region Font + p.fonts = {}; + + p._getFont = function(id) { + let font = this.fonts[id]; + if (!font) { + console.error(`Font with id '${id}' is not loaded`); + return null; + } + return font; + } + + p.fontDotnet = function(id, size) { + let font = this._getFont(id); + if (!font) { + return; + } + if (!size) { + this.textFont(font); + } else { + this.textFont(font, size); + } + } + + p.loadFontDotnet = function(fontPath) { + if (!this.fonts[fontPath]) + { + this.fonts[fontPath] = this.loadFont(fontPath); + } + return { + id: fontPath, + }; + } + + p.textFontDotnet = function(id, size) { + let font = this._getFont(id); + if (!font) { + return; + } + if (!size) { + this.textFont(this.fonts[id]); + } else { + this.textFont(this.fonts[id], size); + } + } + // #endregion + + // #region Image + p.images = {}; + + p._getImage = function(id) { + let image = this.images[id]; + if (!image) { + console.error(`Image with id '${id}' is not loaded`); + return null; + } + return image; + } + + p.imageDotnet = function(id, x, y, width, height) { + let image = this._getImage(id); + if (!image) { + return; + } + this.image( + image, + x, + y, + width, + height + ); + } + + p.imageHeightDotnet = function(id) { + let image = this._getImage(id); + if (!image) { + return; + } + return image.height; + } + + p.imageWidthDotnet = function(id) { + let image = this._getImage(id); + if (!image) { + return; + } + return image.width; + } + + p.loadImageDotnet = function(imagePath) { + if (!this.images[imagePath]) + { + this.images[imagePath] = this.loadImage(imagePath); + } + return { + id: imagePath, + }; + } + + p.loadPixelsDotnet = function(id) { + let image = this._getImage(id); + if (!image) { + return; + } + image.loadPixels(); + } + + p.textureDotnet = function(id) { + let image = this._getImage(id); + if (!image) { + return; + } + this.texture(image); + } + // #endregion + + // #region Model + p.models = {}; + + p._getModel = function(id) { + let model = this.models[id]; + if (!model) { + console.error(`Model with id '${id}' is not loaded`); + return null; + } + return model; + } + + p.loadModelDotnet = function(modelPath, normalize) { + if (!this.models[modelPath]) + { + this.models[modelPath] = this.loadModel(modelPath, normalize); + } + return { + id: modelPath, + }; + } + + p.modelDotnet = function(id) { + let model = this._getModel(id); + if (!model) { + return; + } + this.model(model); + } + // #endregion + + // #region Shader + p.shaders = {}; + + p._getShader = function(id) { + let shader = this.shaders[id]; + if (!shader) { + console.error(`Shader with id '${id}' is not loaded`); + return null; + } + return shader; + } + + p.loadShaderDotnet = function(vertexShaderPath, fragmentShaderPath) { + let id = `${vertexShaderPath}-${fragmentShaderPath}`; + if (!this.shaders[id]) + { + this.shaders[id] = this.loadShader(vertexShaderPath, fragmentShaderPath); + } + return { + id, + }; + } + + p.shaderDotnet = function(id) { + let shader = this._getShader(id); + if (!shader) { + return; + } + this.shader(shader); + } + + p.setUniformDotnet = function(id, uniformName, value) { + let shader = this._getShader(id); + if (!shader) { + return; + } + shader.setUniform(uniformName, value); + } + // #endregion + + // #region Sound + p.sounds = {}; + + p._getSound = function(id) { + let sound = this.sounds[id]; + if (!sound) { + console.error(`Sound with id '${id}' is not loaded`); + return null; + } + return sound; + } + + p.getCurrentTimeDotnet = function(id) { + let sound = this._getSound(id); + if (!sound) { + return 0.0; + } + return sound.currentTime(); + } + + p.getDurationDotnet = function(id) { + let sound = this._getSound(id); + if (!sound) { + return 0.0; + } + return sound.duration(); + } + + p.getPanSoundDotnet = function(id) { + let sound = this._getSound(id); + if (!sound) { + return 0.0; + } + return sound.getPan(); + } + + p.isLoadedDotnet = function(id) { + let sound = this._getSound(id); + return !sound ? false : sound.isLoaded(); + } + + p.isLoopingDotnet = function(id) { + let sound = this._getSound(id); + return !sound ? false : sound.isLooping(); + } + + p.isPausedDotnet = function(id) { + let sound = this._getSound(id); + return !sound ? false : sound.isPaused(); + } + + p.isPlayingDotnet = function(id) { + let sound = this._getSound(id); + return !sound ? false : sound.isPlaying(); + } + + p.loadSoundDotnet = function(soundPath) { + if (!this.sounds[soundPath]) + { + this.sounds[soundPath] = this.loadSound(soundPath); + } + return { + id: soundPath, + }; + } + + p.loopDotnet = function(id, startTime, rate, amp, cueStart, duration) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.loop( + startTime, + rate, + amp, + cueStart === null ? undefined : cueStart, + duration === null ? undefined : duration + ); + } + + p.panSoundDotnet = function(id, panValue, delay) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.pan(panValue, delay); + } + + p.pauseDotnet = function(id, delay) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.pause(delay); + } + + p.playDotnet = function(id, startTime, rate, amp, cueStart, duration) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.play( + startTime, + rate, + amp, + cueStart === null ? undefined : cueStart, + duration === null ? undefined : duration + ); + } + + p.playModeDotnet = function(id, mode) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.playMode(mode); + } + + p.setIsLoopingDotnet = function(id, shouldLoop) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.setLoop(shouldLoop); + } + + p.setRateDotnet = function(id, rate) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.rate(rate); + } + + p.setVolumeDotnet = function(id, volume, rampTime, delay) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.setVolume(volume, rampTime, delay); + } + + p.stopDotnet = function(id, delay) { + let sound = this._getSound(id); + if (!sound) { + return; + } + sound.stop(delay); + } + // #endregion + }; + new p5(sketch, document.getElementById(container)); +} \ No newline at end of file