diff --git a/Examples/Complete/Camera/Blazor/_Imports.razor b/Examples/Complete/Camera/Blazor/_Imports.razor
index f760fd3419..09c1aa8ac8 100644
--- a/Examples/Complete/Camera/Blazor/_Imports.razor
+++ b/Examples/Complete/Camera/Blazor/_Imports.razor
@@ -3,11 +3,8 @@
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
-
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using Fusee.Examples.Camera.Blazor
-@using Fusee.Examples.Camera.Blazor.Shared
-@using Fusee.Base.Imp.Blazor
-@using Fusee.Engine.Imp.Graphics.Blazor
\ No newline at end of file
+@using Fusee.Examples.Camera.Blazor.Layout
diff --git a/Examples/Complete/ThreeDFont/Core/Assets/FuseeIconTop32.png b/Examples/Complete/Camera/Blazor/wwwroot/Assets/FuseeIconTop32.png
similarity index 100%
rename from Examples/Complete/ThreeDFont/Core/Assets/FuseeIconTop32.png
rename to Examples/Complete/Camera/Blazor/wwwroot/Assets/FuseeIconTop32.png
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/PixelShader.frag b/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/PixelShader.frag
deleted file mode 100644
index 8b0610e539..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/PixelShader.frag
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "Blinn/Blinn_CalculatePixelColor.frag"
-
-out vec4 oColor;
-
-void main(void)
-{
- oColor = CalculatePixelColor();
-}
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/VertexShader.vert b/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/VertexShader.vert
deleted file mode 100644
index d9e524c785..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/VertexShader.vert
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "Blinn/Blinn_CalculateVertexPosition.vert"
-
-void main(void)
-{
- gl_Position = CalculateVertexPosition();
-}
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.frag b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.frag
new file mode 100644
index 0000000000..61dadfad1f
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.frag
@@ -0,0 +1,11 @@
+#version 460 core
+
+uniform vec4 Albedo = vec4(1, 0, 1, 1);
+uniform bool EnableVertexColors = false;
+
+in vec4 gColor;
+out vec4 fragColor;
+
+void main() {
+ fragColor = EnableVertexColors ? gColor : Albedo;
+}
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.geom b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.geom
new file mode 100644
index 0000000000..95a0748233
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.geom
@@ -0,0 +1,55 @@
+#version 460 core
+
+layout (lines) in;// now we can access 2 vertices
+layout (triangle_strip, max_vertices = 4) out;// always (for now) producing 2 triangles (so 4 vertices)
+
+in vec4 vColor0[];
+out vec4 gColor;
+
+uniform float Thickness = 4;// just a test default
+uniform ivec2 FUSEE_ViewportPx;
+uniform mat4 FUSEE_MVP;
+uniform bool EnableVertexColors = false;
+
+void main()
+{
+ float u_width = float(FUSEE_ViewportPx.x);
+ float u_height = float(FUSEE_ViewportPx.y);
+ float u_aspect_ratio = u_height / u_width;
+
+ vec2 ndc_a = gl_in[0].gl_Position.xy / gl_in[0].gl_Position.w;
+ vec2 ndc_b = gl_in[1].gl_Position.xy / gl_in[1].gl_Position.w;
+
+ vec2 line_vector = ndc_b - ndc_a;
+ vec2 viewport_line_vector = line_vector * vec2(u_width, u_height);
+ vec2 dir = normalize(vec2(line_vector.x, line_vector.y * u_aspect_ratio));
+
+ float line_width = max(1.0, Thickness);
+ float line_length = length(viewport_line_vector);
+
+ vec2 normal = vec2(-dir.y, dir.x);
+ vec2 normal_a = vec2(line_width/u_width, line_width/u_height) * normal;
+ vec2 normal_b = vec2(line_width/u_width, line_width/u_height) * normal;
+
+ if(EnableVertexColors)
+ gColor = vColor0[0];
+ gl_Position = vec4((ndc_a + normal_a) * gl_in[0].gl_Position.w, gl_in[0].gl_Position.zw);
+ EmitVertex();
+
+ if(EnableVertexColors)
+ gColor = vColor0[0];
+ gl_Position = vec4((ndc_a - normal_a) * gl_in[0].gl_Position.w, gl_in[0].gl_Position.zw);
+ EmitVertex();
+
+ if(EnableVertexColors)
+ gColor = vColor0[1];
+ gl_Position = vec4((ndc_b + normal_b) * gl_in[1].gl_Position.w, gl_in[1].gl_Position.zw);
+ EmitVertex();
+
+ if(EnableVertexColors)
+ gColor = vColor0[1];
+ gl_Position = vec4((ndc_b - normal_b) * gl_in[1].gl_Position.w, gl_in[1].gl_Position.zw);
+ EmitVertex();
+
+ EndPrimitive();
+}
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.vert b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.vert
new file mode 100644
index 0000000000..47f914fe86
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.vert
@@ -0,0 +1,24 @@
+#version 460 core
+
+in vec3 fuVertex;
+in vec4 fuColor;
+
+uniform mat4 FUSEE_MV;
+uniform mat4 FUSEE_P;
+uniform bool EnableVertexColors = false;
+
+out vec4 vColor0;
+
+void main() {
+ vec4 viewPos = FUSEE_MV * vec4(fuVertex, 1.0);
+
+ //prevent clipping
+ if (viewPos.z <= 0.0)
+ {
+ viewPos.z = 0.001;
+ }
+
+ if(EnableVertexColors)
+ vColor0 = fuColor;
+ gl_Position = FUSEE_P * viewPos;
+}
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/lineAdjacency.geom b/Examples/Complete/Camera/Blazor/wwwroot/Assets/lineAdjacency.geom
new file mode 100644
index 0000000000..f134918abe
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/lineAdjacency.geom
@@ -0,0 +1,95 @@
+#version 460 core
+
+layout (lines_adjacency) in;// enables access to four vertices (line segment vertices, predecessor, successor)
+layout (triangle_strip, max_vertices = 256) out;
+
+in vec4 vColor0[];
+out vec4 gColor;
+
+uniform float Thickness = 4;// just a test default
+uniform ivec2 FUSEE_ViewportPx;
+uniform mat4 FUSEE_MVP;
+uniform bool EnableVertexColors = false;
+
+void main()
+{
+ float u_width = float(FUSEE_ViewportPx.x);
+ float u_height = float(FUSEE_ViewportPx.y);
+ float u_aspect_ratio = u_height / u_width;
+ vec2 Viewport = vec2(u_width, u_height);
+ float line_width = max(1.0, Thickness);
+ vec4 pos0 = gl_in[0].gl_Position;
+ vec4 pos1 = gl_in[1].gl_Position;
+ vec4 pos2 = gl_in[2].gl_Position;
+ vec4 pos3 = gl_in[3].gl_Position;
+
+ //ndc
+ vec2 ndc0 = gl_in[0].gl_Position.xy / gl_in[0].gl_Position.w;
+ vec2 ndc1 = gl_in[1].gl_Position.xy / gl_in[1].gl_Position.w;
+ vec2 ndc2 = gl_in[2].gl_Position.xy / gl_in[2].gl_Position.w;
+ vec2 ndc3 = gl_in[3].gl_Position.xy / gl_in[3].gl_Position.w;
+
+ //direction of the three segments (previous, current, next) */
+ vec2 line_vector0 = ndc1 - ndc0;
+ vec2 line_vector1 = ndc2 - ndc1;
+ vec2 line_vector2 = ndc3 - ndc2;
+ vec2 dir0 = normalize(vec2(line_vector0.x, line_vector0.y * u_aspect_ratio));
+ vec2 dir1 = normalize(vec2(line_vector1.x, line_vector1.y * u_aspect_ratio));
+ vec2 dir2 = normalize(vec2(line_vector2.x, line_vector2.y * u_aspect_ratio));
+
+ //normals of the three segments (previous, current, next)
+ vec2 n0 = vec2( -dir0.y, dir0.x );
+ vec2 n1 = vec2( -dir1.y, dir1.x );
+ vec2 n2 = vec2( -dir2.y, dir2.x );
+
+ // determine miter lines by averaging the normals of the 2 segments
+ vec2 miter_a = normalize( n0 + n1 );// miter at start of current segment
+ vec2 miter_b = normalize( n1 + n2 );// miter at end of current segment
+
+ // determine the length of the miter by projecting it onto normal and then inverse it
+ float an1 = dot(miter_a, n1);
+ float bn1 = dot(miter_b, n2);
+ if (an1==0) an1 = 1;
+ if (bn1==0) bn1 = 1;
+
+ float length_a = line_width / an1;
+ if( dot(dir0, dir1 ) < -0.1/*MiterLimit*/)
+ {
+ miter_a = n1;
+ length_a = Thickness;
+ }
+
+ float length_b = line_width / bn1;
+ if( dot(dir1, dir2) < -0.1/*MiterLimit*/) {
+ miter_b = n1;
+ length_b = Thickness;
+ }
+
+ n0 = vec2(line_width/u_width, line_width/u_height) * n0;
+ n1 = vec2(line_width/u_width, line_width/u_height) * n1;
+ n2 = vec2(line_width/u_width, line_width/u_height) * n2;
+ miter_a = vec2(length_a/u_width, length_a/u_height) * miter_a;
+ miter_b = vec2(length_b/u_width, length_b/u_height) * miter_b;
+
+ if(EnableVertexColors)
+ gColor = vColor0[0];
+ gl_Position = vec4((ndc1 + miter_a) * pos1.w, pos1.zw);
+ EmitVertex();
+
+ if(EnableVertexColors)
+ gColor = vColor0[0];
+ gl_Position = vec4((ndc1 - miter_a) * pos1.w, pos1.zw);
+ EmitVertex();
+
+ if(EnableVertexColors)
+ gColor = vColor0[1];
+ gl_Position = vec4((ndc2 + miter_b) * pos2.w, pos2.zw);
+ EmitVertex();
+
+ if(EnableVertexColors)
+ gColor = vColor0[1];
+ gl_Position = vec4((ndc2 - miter_b) * pos2.w, pos2.zw);
+ EmitVertex();
+
+ EndPrimitive();
+}
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Authorization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Authorization.dll
deleted file mode 100644
index 0fcca6f3b7..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Authorization.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Forms.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Forms.dll
deleted file mode 100644
index 98c83415ec..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Forms.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.dll
deleted file mode 100644
index 49240666a1..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll
deleted file mode 100644
index 03a467d8c9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.dll
deleted file mode 100644
index 8bc8bc1863..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Metadata.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Metadata.dll
deleted file mode 100644
index 83d35fa450..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Metadata.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.CSharp.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.CSharp.dll
deleted file mode 100644
index 60da2d01dd..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.CSharp.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.dll
deleted file mode 100644
index c9da0ee140..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Binder.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Binder.dll
deleted file mode 100644
index 547f622a84..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Binder.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.FileExtensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.FileExtensions.dll
deleted file mode 100644
index dc17b548a9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.FileExtensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.dll
deleted file mode 100644
index ee8f6cd466..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.dll
deleted file mode 100644
index 856e7c2e22..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll
deleted file mode 100644
index 0eb728cc8a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.dll
deleted file mode 100644
index 86ab7d2de0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Abstractions.dll
deleted file mode 100644
index 4c8b346f00..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Abstractions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Physical.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Physical.dll
deleted file mode 100644
index 92c3d654c7..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Physical.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileSystemGlobbing.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileSystemGlobbing.dll
deleted file mode 100644
index 3c01af84fe..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileSystemGlobbing.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.dll
deleted file mode 100644
index a9a16f431b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.dll
deleted file mode 100644
index d132872c7b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Options.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Options.dll
deleted file mode 100644
index 89de3610cf..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Options.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Primitives.dll
deleted file mode 100644
index befa607e66..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.dll
deleted file mode 100644
index 431affdeeb..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.dll
deleted file mode 100644
index 8783527a30..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.Core.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.Core.dll
deleted file mode 100644
index 5d99f81f8d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.Core.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.dll
deleted file mode 100644
index 583b36123e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Primitives.dll
deleted file mode 100644
index 1fdb499550..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Registry.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Registry.dll
deleted file mode 100644
index 70e23abe59..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Registry.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Mono.WebAssembly.Interop.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Mono.WebAssembly.Interop.dll
deleted file mode 100644
index a761f091d1..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Mono.WebAssembly.Interop.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/SharpFontManaged.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/SharpFontManaged.dll
deleted file mode 100644
index de3b06c4d5..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/SharpFontManaged.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.AppContext.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.AppContext.dll
deleted file mode 100644
index 77c26430b2..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.AppContext.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Buffers.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Buffers.dll
deleted file mode 100644
index 4b75e71f54..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Buffers.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Concurrent.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Concurrent.dll
deleted file mode 100644
index a5eebae0b4..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Concurrent.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Immutable.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Immutable.dll
deleted file mode 100644
index 87f365c2cf..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Immutable.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.NonGeneric.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.NonGeneric.dll
deleted file mode 100644
index 8a6290c6ba..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.NonGeneric.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Specialized.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Specialized.dll
deleted file mode 100644
index ef7ef57d0e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Specialized.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.dll
deleted file mode 100644
index 569db2ec5e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Annotations.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Annotations.dll
deleted file mode 100644
index e1552e9635..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Annotations.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.DataAnnotations.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.DataAnnotations.dll
deleted file mode 100644
index 77955e7928..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.DataAnnotations.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.EventBasedAsync.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.EventBasedAsync.dll
deleted file mode 100644
index a17a6dab43..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.EventBasedAsync.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Primitives.dll
deleted file mode 100644
index 7488ee6b89..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.TypeConverter.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.TypeConverter.dll
deleted file mode 100644
index e8ccde816b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.TypeConverter.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.dll
deleted file mode 100644
index 01e21562a7..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Configuration.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Configuration.dll
deleted file mode 100644
index 61eb6a9c8f..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Configuration.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Console.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Console.dll
deleted file mode 100644
index f46b862a00..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Console.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Core.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Core.dll
deleted file mode 100644
index 6d3e198ce0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Core.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.Common.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.Common.dll
deleted file mode 100644
index 9efd9cc9bd..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.Common.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.DataSetExtensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.DataSetExtensions.dll
deleted file mode 100644
index 959dbee6d0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.DataSetExtensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.dll
deleted file mode 100644
index c141a7b799..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Contracts.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Contracts.dll
deleted file mode 100644
index 371abd373a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Contracts.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Debug.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Debug.dll
deleted file mode 100644
index 468608936e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Debug.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.DiagnosticSource.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.DiagnosticSource.dll
deleted file mode 100644
index e09840443b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.DiagnosticSource.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.FileVersionInfo.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.FileVersionInfo.dll
deleted file mode 100644
index 0556d5f5d9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.FileVersionInfo.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Process.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Process.dll
deleted file mode 100644
index f34eb73af6..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Process.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.StackTrace.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.StackTrace.dll
deleted file mode 100644
index caf7d4809e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.StackTrace.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TextWriterTraceListener.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TextWriterTraceListener.dll
deleted file mode 100644
index 5c62c4652c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TextWriterTraceListener.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tools.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tools.dll
deleted file mode 100644
index 79e997a3c8..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tools.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TraceSource.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TraceSource.dll
deleted file mode 100644
index ae22edc713..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TraceSource.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tracing.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tracing.dll
deleted file mode 100644
index 157f983349..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tracing.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.Primitives.dll
deleted file mode 100644
index caa84df2c2..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.dll
deleted file mode 100644
index bae4a9f6c0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Dynamic.Runtime.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Dynamic.Runtime.dll
deleted file mode 100644
index 042fd66006..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Dynamic.Runtime.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Formats.Asn1.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Formats.Asn1.dll
deleted file mode 100644
index ed8bb6ec18..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Formats.Asn1.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Calendars.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Calendars.dll
deleted file mode 100644
index 30804991c4..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Calendars.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Extensions.dll
deleted file mode 100644
index 88678bf760..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Extensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.dll
deleted file mode 100644
index 21d4cccca1..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.Brotli.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.Brotli.dll
deleted file mode 100644
index 5d2f6eaec7..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.Brotli.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.FileSystem.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.FileSystem.dll
deleted file mode 100644
index e4b641ae00..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.FileSystem.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.ZipFile.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.ZipFile.dll
deleted file mode 100644
index 2aba28e753..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.ZipFile.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.dll
deleted file mode 100644
index 3502cc211e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.AccessControl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.AccessControl.dll
deleted file mode 100644
index d91a177e9c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.AccessControl.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.DriveInfo.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.DriveInfo.dll
deleted file mode 100644
index bd70932a12..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.DriveInfo.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Primitives.dll
deleted file mode 100644
index fdd2c7b446..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Watcher.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Watcher.dll
deleted file mode 100644
index b3f0cb0712..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Watcher.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.dll
deleted file mode 100644
index f8a545ca1e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.IsolatedStorage.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.IsolatedStorage.dll
deleted file mode 100644
index 913095d3f0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.IsolatedStorage.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.MemoryMappedFiles.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.MemoryMappedFiles.dll
deleted file mode 100644
index 9bc7f8456d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.MemoryMappedFiles.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipelines.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipelines.dll
deleted file mode 100644
index 74811b7125..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipelines.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.AccessControl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.AccessControl.dll
deleted file mode 100644
index d147cf2436..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.AccessControl.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.dll
deleted file mode 100644
index a290d31e0a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.UnmanagedMemoryStream.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.UnmanagedMemoryStream.dll
deleted file mode 100644
index 1d23401619..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.UnmanagedMemoryStream.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.dll
deleted file mode 100644
index c0fec502ef..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Expressions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Expressions.dll
deleted file mode 100644
index c01313755a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Expressions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Parallel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Parallel.dll
deleted file mode 100644
index b6f1964765..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Parallel.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Queryable.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Queryable.dll
deleted file mode 100644
index 7502256c46..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Queryable.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.dll
deleted file mode 100644
index 4443f7a1de..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Memory.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Memory.dll
deleted file mode 100644
index d80c59f58c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Memory.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.Json.dll
deleted file mode 100644
index fedabfa04a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.Json.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.dll
deleted file mode 100644
index 85a9a549c0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.HttpListener.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.HttpListener.dll
deleted file mode 100644
index 59a432f3b3..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.HttpListener.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Mail.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Mail.dll
deleted file mode 100644
index 146d3ae5e8..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Mail.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NameResolution.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NameResolution.dll
deleted file mode 100644
index 56a379d3e1..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NameResolution.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NetworkInformation.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NetworkInformation.dll
deleted file mode 100644
index 309afe171c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NetworkInformation.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Ping.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Ping.dll
deleted file mode 100644
index 20999f0c2d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Ping.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Primitives.dll
deleted file mode 100644
index 9855bd2516..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Quic.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Quic.dll
deleted file mode 100644
index d91360c638..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Quic.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Requests.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Requests.dll
deleted file mode 100644
index d932f29341..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Requests.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Security.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Security.dll
deleted file mode 100644
index b122cd5b86..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Security.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.ServicePoint.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.ServicePoint.dll
deleted file mode 100644
index a5f1b121d9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.ServicePoint.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Sockets.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Sockets.dll
deleted file mode 100644
index 543f853104..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Sockets.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebClient.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebClient.dll
deleted file mode 100644
index 2ad44437a0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebClient.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebHeaderCollection.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebHeaderCollection.dll
deleted file mode 100644
index c7b5034d5c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebHeaderCollection.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebProxy.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebProxy.dll
deleted file mode 100644
index b913d924b8..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebProxy.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.Client.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.Client.dll
deleted file mode 100644
index 66fa472a7f..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.Client.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.dll
deleted file mode 100644
index 100130e076..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.dll
deleted file mode 100644
index 197c44a5e2..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.Vectors.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.Vectors.dll
deleted file mode 100644
index 042cde451d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.Vectors.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.dll
deleted file mode 100644
index 21ded7acb7..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ObjectModel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ObjectModel.dll
deleted file mode 100644
index 5ea2468beb..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ObjectModel.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.CoreLib.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.CoreLib.dll
deleted file mode 100644
index ba0004e2b2..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.CoreLib.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.DataContractSerialization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.DataContractSerialization.dll
deleted file mode 100644
index 94c1267a78..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.DataContractSerialization.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Runtime.InteropServices.JavaScript.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Runtime.InteropServices.JavaScript.dll
deleted file mode 100644
index 91f7003549..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Runtime.InteropServices.JavaScript.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Uri.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Uri.dll
deleted file mode 100644
index 81f35cf335..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Uri.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.Linq.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.Linq.dll
deleted file mode 100644
index 233bb6762d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.Linq.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.dll
deleted file mode 100644
index df5614a795..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.DispatchProxy.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.DispatchProxy.dll
deleted file mode 100644
index 7b28892927..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.DispatchProxy.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.ILGeneration.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.ILGeneration.dll
deleted file mode 100644
index 7dadba587f..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.ILGeneration.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.Lightweight.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.Lightweight.dll
deleted file mode 100644
index e525bcc57d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.Lightweight.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.dll
deleted file mode 100644
index ea8aa432b3..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Extensions.dll
deleted file mode 100644
index d7eb56e5ed..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Extensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Metadata.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Metadata.dll
deleted file mode 100644
index 9e2ffa5634..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Metadata.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Primitives.dll
deleted file mode 100644
index b7a7072e86..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.TypeExtensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.TypeExtensions.dll
deleted file mode 100644
index a39ee9533a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.TypeExtensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.dll
deleted file mode 100644
index 43364c0d33..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Reader.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Reader.dll
deleted file mode 100644
index 030b64568b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Reader.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.ResourceManager.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.ResourceManager.dll
deleted file mode 100644
index b68a8dbe55..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.ResourceManager.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Writer.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Writer.dll
deleted file mode 100644
index 7e059fb307..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Writer.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.Unsafe.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.Unsafe.dll
deleted file mode 100644
index 57d2b4560f..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.Unsafe.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.VisualC.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.VisualC.dll
deleted file mode 100644
index 1520f9f509..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.VisualC.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Extensions.dll
deleted file mode 100644
index 1feb16a05f..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Extensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Handles.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Handles.dll
deleted file mode 100644
index af82d8aab5..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Handles.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.dll
deleted file mode 100644
index 62553ed915..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.dll
deleted file mode 100644
index fd49ab4fa9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Intrinsics.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Intrinsics.dll
deleted file mode 100644
index 1a08cf68d9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Intrinsics.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Loader.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Loader.dll
deleted file mode 100644
index f861d3a0f8..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Loader.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Numerics.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Numerics.dll
deleted file mode 100644
index 93fa6f662c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Numerics.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Formatters.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Formatters.dll
deleted file mode 100644
index 21f8c171ca..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Formatters.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Json.dll
deleted file mode 100644
index c00aedc175..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Json.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Primitives.dll
deleted file mode 100644
index 267db79373..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Xml.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Xml.dll
deleted file mode 100644
index 548e85e2a0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Xml.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.dll
deleted file mode 100644
index 7487f75fa5..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.dll
deleted file mode 100644
index fcc59106ad..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.AccessControl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.AccessControl.dll
deleted file mode 100644
index 78bd16e1cc..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.AccessControl.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Claims.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Claims.dll
deleted file mode 100644
index 7d607e0da0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Claims.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Algorithms.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Algorithms.dll
deleted file mode 100644
index 8bf434adc3..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Algorithms.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Cng.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Cng.dll
deleted file mode 100644
index 5bc6069497..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Cng.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Csp.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Csp.dll
deleted file mode 100644
index 4cf3830ebb..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Csp.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Encoding.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Encoding.dll
deleted file mode 100644
index e0000aff6e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Encoding.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.OpenSsl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.OpenSsl.dll
deleted file mode 100644
index 5d5645e8c8..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.OpenSsl.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Primitives.dll
deleted file mode 100644
index 1d591ae820..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Primitives.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.X509Certificates.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.X509Certificates.dll
deleted file mode 100644
index a351884fc4..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.X509Certificates.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.Windows.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.Windows.dll
deleted file mode 100644
index 107637b012..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.Windows.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.dll
deleted file mode 100644
index ec72940be9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.SecureString.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.SecureString.dll
deleted file mode 100644
index 6cb21adf2a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.SecureString.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.dll
deleted file mode 100644
index 14a91aeb10..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceModel.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceModel.Web.dll
deleted file mode 100644
index d80d3e0b02..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceModel.Web.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceProcess.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceProcess.dll
deleted file mode 100644
index 2adf58202c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceProcess.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.CodePages.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.CodePages.dll
deleted file mode 100644
index 5a5837a81d..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.CodePages.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.Extensions.dll
deleted file mode 100644
index cc4e8b098a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.Extensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.dll
deleted file mode 100644
index 0ee288c4fc..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encodings.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encodings.Web.dll
deleted file mode 100644
index 3c52c7c0f6..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encodings.Web.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Json.dll
deleted file mode 100644
index ee9f9e28d4..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Json.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.RegularExpressions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.RegularExpressions.dll
deleted file mode 100644
index a0d0c3df5b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.RegularExpressions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Channels.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Channels.dll
deleted file mode 100644
index 0e8139e54e..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Channels.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Overlapped.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Overlapped.dll
deleted file mode 100644
index 9ed5b6eb81..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Overlapped.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Dataflow.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Dataflow.dll
deleted file mode 100644
index 7f628bc8a8..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Dataflow.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Extensions.dll
deleted file mode 100644
index b5ec56f6aa..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Extensions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Parallel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Parallel.dll
deleted file mode 100644
index c946153098..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Parallel.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.dll
deleted file mode 100644
index 050b33f807..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Thread.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Thread.dll
deleted file mode 100644
index 88102cfb90..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Thread.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.ThreadPool.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.ThreadPool.dll
deleted file mode 100644
index 2b4892942b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.ThreadPool.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Timer.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Timer.dll
deleted file mode 100644
index 62a2b53fb4..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Timer.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.dll
deleted file mode 100644
index 86a749c856..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.Local.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.Local.dll
deleted file mode 100644
index 99dd4ba087..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.Local.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.dll
deleted file mode 100644
index 3c6d1d1b54..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ValueTuple.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ValueTuple.dll
deleted file mode 100644
index 8289674387..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ValueTuple.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.HttpUtility.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.HttpUtility.dll
deleted file mode 100644
index 031a9705f0..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.HttpUtility.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.dll
deleted file mode 100644
index d48482da36..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Windows.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Windows.dll
deleted file mode 100644
index 6a0805e688..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Windows.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Linq.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Linq.dll
deleted file mode 100644
index 73ad661f65..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Linq.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.ReaderWriter.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.ReaderWriter.dll
deleted file mode 100644
index 4d4bdd68da..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.ReaderWriter.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Serialization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Serialization.dll
deleted file mode 100644
index 180437bb40..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Serialization.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XDocument.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XDocument.dll
deleted file mode 100644
index 1aa86f9f2b..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XDocument.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.XDocument.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.XDocument.dll
deleted file mode 100644
index dc7c3e79df..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.XDocument.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.dll
deleted file mode 100644
index 5b2dc97430..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlDocument.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlDocument.dll
deleted file mode 100644
index ecc556ff24..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlDocument.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlSerializer.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlSerializer.dll
deleted file mode 100644
index 99c76de198..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlSerializer.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.dll
deleted file mode 100644
index d67460a9f5..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.dll
deleted file mode 100644
index 4c4524bb06..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WebAssembly.Bindings.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/WebAssembly.Bindings.dll
deleted file mode 100644
index fd882dd245..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WebAssembly.Bindings.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WindowsBase.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/WindowsBase.dll
deleted file mode 100644
index 453a23b63f..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WindowsBase.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/binding_support.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/binding_support.js
deleted file mode 100644
index 74a7e994e3..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/binding_support.js
+++ /dev/null
@@ -1,2277 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-var BindingSupportLib = {
- $BINDING__postset: 'BINDING.export_functions (Module);',
- $BINDING: {
- BINDING_ASM: "[System.Private.Runtime.InteropServices.JavaScript]System.Runtime.InteropServices.JavaScript.Runtime",
- mono_wasm_object_registry: [],
- mono_wasm_ref_counter: 0,
- mono_wasm_free_list: [],
- mono_wasm_owned_objects_frames: [],
- mono_wasm_owned_objects_LMF: [],
- mono_wasm_marshal_enum_as_int: true,
- mono_bindings_init: function (binding_asm) {
- this.BINDING_ASM = binding_asm;
- },
-
- export_functions: function (module) {
- module ["mono_bindings_init"] = BINDING.mono_bindings_init.bind(BINDING);
- module ["mono_bind_method"] = BINDING.bind_method.bind(BINDING);
- module ["mono_method_invoke"] = BINDING.call_method.bind(BINDING);
- module ["mono_method_get_call_signature"] = BINDING.mono_method_get_call_signature.bind(BINDING);
- module ["mono_method_resolve"] = BINDING.resolve_method_fqn.bind(BINDING);
- module ["mono_bind_static_method"] = BINDING.bind_static_method.bind(BINDING);
- module ["mono_call_static_method"] = BINDING.call_static_method.bind(BINDING);
- module ["mono_bind_assembly_entry_point"] = BINDING.bind_assembly_entry_point.bind(BINDING);
- module ["mono_call_assembly_entry_point"] = BINDING.call_assembly_entry_point.bind(BINDING);
- module ["mono_intern_string"] = BINDING.mono_intern_string.bind(BINDING);
- },
-
- bindings_lazy_init: function () {
- if (this.init)
- return;
-
- // avoid infinite recursion
- this.init = true;
-
- Array.prototype[Symbol.for("wasm type")] = 1;
- ArrayBuffer.prototype[Symbol.for("wasm type")] = 2;
- DataView.prototype[Symbol.for("wasm type")] = 3;
- Function.prototype[Symbol.for("wasm type")] = 4;
- Map.prototype[Symbol.for("wasm type")] = 5;
- if (typeof SharedArrayBuffer !== 'undefined')
- SharedArrayBuffer.prototype[Symbol.for("wasm type")] = 6;
- Int8Array.prototype[Symbol.for("wasm type")] = 10;
- Uint8Array.prototype[Symbol.for("wasm type")] = 11;
- Uint8ClampedArray.prototype[Symbol.for("wasm type")] = 12;
- Int16Array.prototype[Symbol.for("wasm type")] = 13;
- Uint16Array.prototype[Symbol.for("wasm type")] = 14;
- Int32Array.prototype[Symbol.for("wasm type")] = 15;
- Uint32Array.prototype[Symbol.for("wasm type")] = 16;
- Float32Array.prototype[Symbol.for("wasm type")] = 17;
- Float64Array.prototype[Symbol.for("wasm type")] = 18;
-
- this.assembly_load = Module.cwrap ('mono_wasm_assembly_load', 'number', ['string']);
- this.find_corlib_class = Module.cwrap ('mono_wasm_find_corlib_class', 'number', ['string', 'string']);
- this.find_class = Module.cwrap ('mono_wasm_assembly_find_class', 'number', ['number', 'string', 'string']);
- this._find_method = Module.cwrap ('mono_wasm_assembly_find_method', 'number', ['number', 'string', 'number']);
- this.invoke_method = Module.cwrap ('mono_wasm_invoke_method', 'number', ['number', 'number', 'number', 'number']);
- this.mono_string_get_utf8 = Module.cwrap ('mono_wasm_string_get_utf8', 'number', ['number']);
- this.mono_wasm_string_from_utf16 = Module.cwrap ('mono_wasm_string_from_utf16', 'number', ['number', 'number']);
- this.mono_get_obj_type = Module.cwrap ('mono_wasm_get_obj_type', 'number', ['number']);
- this.mono_array_length = Module.cwrap ('mono_wasm_array_length', 'number', ['number']);
- this.mono_array_get = Module.cwrap ('mono_wasm_array_get', 'number', ['number', 'number']);
- this.mono_obj_array_new = Module.cwrap ('mono_wasm_obj_array_new', 'number', ['number']);
- this.mono_obj_array_set = Module.cwrap ('mono_wasm_obj_array_set', 'void', ['number', 'number', 'number']);
- this.mono_wasm_register_bundled_satellite_assemblies = Module.cwrap ('mono_wasm_register_bundled_satellite_assemblies', 'void', [ ]);
- this.mono_wasm_try_unbox_primitive_and_get_type = Module.cwrap ('mono_wasm_try_unbox_primitive_and_get_type', 'number', ['number', 'number']);
- this.mono_wasm_box_primitive = Module.cwrap ('mono_wasm_box_primitive', 'number', ['number', 'number', 'number']);
- this.mono_wasm_intern_string = Module.cwrap ('mono_wasm_intern_string', 'number', ['number']);
- this.assembly_get_entry_point = Module.cwrap ('mono_wasm_assembly_get_entry_point', 'number', ['number']);
- this.mono_wasm_get_delegate_invoke = Module.cwrap ('mono_wasm_get_delegate_invoke', 'number', ['number']);
- this.mono_wasm_string_array_new = Module.cwrap ('mono_wasm_string_array_new', 'number', ['number']);
-
- this._box_buffer = Module._malloc(16);
- this._unbox_buffer = Module._malloc(16);
- this._class_int32 = this.find_corlib_class ("System", "Int32");
- this._class_uint32 = this.find_corlib_class ("System", "UInt32");
- this._class_double = this.find_corlib_class ("System", "Double");
- this._class_boolean = this.find_corlib_class ("System", "Boolean");
-
- // receives a byteoffset into allocated Heap with a size.
- this.mono_typed_array_new = Module.cwrap ('mono_wasm_typed_array_new', 'number', ['number','number','number','number']);
-
- var binding_fqn_asm = this.BINDING_ASM.substring(this.BINDING_ASM.indexOf ("[") + 1, this.BINDING_ASM.indexOf ("]")).trim();
- var binding_fqn_class = this.BINDING_ASM.substring (this.BINDING_ASM.indexOf ("]") + 1).trim();
-
- this.binding_module = this.assembly_load (binding_fqn_asm);
- if (!this.binding_module)
- throw "Can't find bindings module assembly: " + binding_fqn_asm;
-
- var namespace = null, classname = null;
- if (binding_fqn_class !== null && typeof binding_fqn_class !== "undefined")
- {
- namespace = "System.Runtime.InteropServices.JavaScript";
- classname = binding_fqn_class.length > 0 ? binding_fqn_class : "Runtime";
- if (binding_fqn_class.indexOf(".") != -1) {
- var idx = binding_fqn_class.lastIndexOf(".");
- namespace = binding_fqn_class.substring (0, idx);
- classname = binding_fqn_class.substring (idx + 1);
- }
- }
-
- var wasm_runtime_class = this.find_class (this.binding_module, namespace, classname);
- if (!wasm_runtime_class)
- throw "Can't find " + binding_fqn_class + " class";
-
- var get_method = function(method_name) {
- var res = BINDING.find_method (wasm_runtime_class, method_name, -1);
- if (!res)
- throw "Can't find method " + namespace + "." + classname + ":" + method_name;
- return res;
- };
-
- var bind_runtime_method = function (method_name, signature) {
- var method = get_method (method_name);
- return BINDING.bind_method (method, 0, signature, "BINDINGS_" + method_name);
- };
-
- // NOTE: The bound methods have a _ prefix on their names to ensure
- // that any code relying on the old get_method/call_method pattern will
- // break in a more understandable way.
-
- this._bind_js_obj = bind_runtime_method ("BindIJSObjectReference", "iii");
- this._bind_core_clr_obj = bind_runtime_method ("BindCoreCLRObject", "ii");
- this._bind_existing_obj = bind_runtime_method ("BindExistingObject", "mi");
- this._unbind_raw_obj_and_free = bind_runtime_method ("UnBindRawIJSObjectReferenceAndFree", "ii");
- this._get_js_id = bind_runtime_method ("GetIJSObjectReferenceId", "m");
- this._get_raw_mono_obj = bind_runtime_method ("GetDotNetObject", "i!");
-
- this._is_simple_array = bind_runtime_method ("IsSimpleArray", "m");
- this.setup_js_cont = get_method ("SetupJSContinuation");
-
- this.create_tcs = get_method ("CreateTaskSource");
- this.set_tcs_result = get_method ("SetTaskSourceResult");
- this.set_tcs_failure = get_method ("SetTaskSourceFailure");
- this.tcs_get_task_and_bind = get_method ("GetTaskAndBind");
- this.get_call_sig = get_method ("GetCallSignature");
-
- this._object_to_string = bind_runtime_method ("ObjectToString", "m");
- this.get_date_value = get_method ("GetDateValue");
- this.create_date_time = get_method ("CreateDateTime");
- this.create_uri = get_method ("CreateUri");
-
- this.safehandle_addref = get_method ("SafeHandleAddRef");
- this.safehandle_release = get_method ("SafeHandleRelease");
- this.safehandle_get_handle = get_method ("SafeHandleGetHandle");
- this.safehandle_release_by_handle = get_method ("SafeHandleReleaseByHandle");
-
- this._are_promises_supported = ((typeof Promise === "object") || (typeof Promise === "function")) && (typeof Promise.resolve === "function");
-
- this._empty_string = "";
- this._empty_string_ptr = 0;
- this._interned_string_full_root_buffers = [];
- this._interned_string_current_root_buffer = null;
- this._interned_string_current_root_buffer_count = 0;
- this._interned_string_table = new Map ();
- this._managed_pointer_to_interned_string_table = new Map ();
- },
-
- // Ensures the string is already interned on both the managed and JavaScript sides,
- // then returns the interned string value (to provide fast reference comparisons like C#)
- mono_intern_string: function (string) {
- if (string.length === 0)
- return this._empty_string;
-
- var ptr = this.js_string_to_mono_string_interned (string);
- var result = this._managed_pointer_to_interned_string_table.get (ptr);
- return result;
- },
-
- _store_string_in_intern_table: function (string, ptr, internIt) {
- if (!ptr)
- throw new Error ("null pointer passed to _store_string_in_intern_table");
- else if (typeof (ptr) !== "number")
- throw new Error (`non-pointer passed to _store_string_in_intern_table: ${typeof(ptr)}`);
-
- const internBufferSize = 8192;
-
- if (this._interned_string_current_root_buffer_count >= internBufferSize) {
- this._interned_string_full_root_buffers.push (this._interned_string_current_root_buffer);
- this._interned_string_current_root_buffer = null;
- }
- if (!this._interned_string_current_root_buffer) {
- this._interned_string_current_root_buffer = MONO.mono_wasm_new_root_buffer (internBufferSize, "interned strings");
- this._interned_string_current_root_buffer_count = 0;
- }
-
- var rootBuffer = this._interned_string_current_root_buffer;
- var index = this._interned_string_current_root_buffer_count++;
- rootBuffer.set (index, ptr);
-
- // Store the managed string into the managed intern table. This can theoretically
- // provide a different managed object than the one we passed in, so update our
- // pointer (stored in the root) with the result.
- if (internIt)
- rootBuffer.set (index, ptr = this.mono_wasm_intern_string (ptr));
-
- if (!ptr)
- throw new Error ("mono_wasm_intern_string produced a null pointer");
-
- this._interned_string_table.set (string, ptr);
- this._managed_pointer_to_interned_string_table.set (ptr, string);
-
- if ((string.length === 0) && !this._empty_string_ptr)
- this._empty_string_ptr = ptr;
-
- return ptr;
- },
-
- js_string_to_mono_string_interned: function (string) {
- var text = (typeof (string) === "symbol")
- ? (string.description || Symbol.keyFor(string) || "")
- : string;
-
- if ((text.length === 0) && this._empty_string_ptr)
- return this._empty_string_ptr;
-
- var ptr = this._interned_string_table.get (string);
- if (ptr)
- return ptr;
-
- ptr = this.js_string_to_mono_string_new (text);
- ptr = this._store_string_in_intern_table (string, ptr, true);
-
- return ptr;
- },
-
- js_string_to_mono_string: function (string) {
- if (string === null)
- return null;
- else if (typeof (string) === "symbol")
- return this.js_string_to_mono_string_interned (string);
- else if (typeof (string) !== "string")
- throw new Error ("Expected string argument");
-
- // Always use an interned pointer for empty strings
- if (string.length === 0)
- return this.js_string_to_mono_string_interned (string);
-
- // Looking up large strings in the intern table will require the JS runtime to
- // potentially hash them and then do full byte-by-byte comparisons, which is
- // very expensive. Because we can not guarantee it won't happen, try to minimize
- // the cost of this and prevent performance issues for large strings
- if (string.length <= 256) {
- var interned = this._interned_string_table.get (string);
- if (interned)
- return interned;
- }
-
- return this.js_string_to_mono_string_new (string);
- },
-
- js_string_to_mono_string_new: function (string) {
- var buffer = Module._malloc ((string.length + 1) * 2);
- var buffer16 = (buffer / 2) | 0;
- for (var i = 0; i < string.length; i++)
- Module.HEAP16[buffer16 + i] = string.charCodeAt (i);
- Module.HEAP16[buffer16 + string.length] = 0;
- var result = this.mono_wasm_string_from_utf16 (buffer, string.length);
- Module._free (buffer);
- return result;
- },
-
- find_method: function (klass, name, n) {
- var result = this._find_method(klass, name, n);
- if (result) {
- if (!this._method_descriptions)
- this._method_descriptions = new Map();
- this._method_descriptions.set(result, name);
- }
- return result;
- },
-
- get_js_obj: function (js_handle) {
- if (js_handle > 0)
- return this.mono_wasm_require_handle(js_handle);
- return null;
- },
-
- conv_string: function (mono_obj, interned) {
- var interned_instance = this._managed_pointer_to_interned_string_table.get (mono_obj);
- if (interned_instance !== undefined)
- return interned_instance;
-
- var result = MONO.string_decoder.copy (mono_obj);
- if (interned) {
- // This string is interned on the managed side but we didn't have it in our cache.
- this._store_string_in_intern_table (result, mono_obj, false);
- }
- return result;
- },
-
- is_nested_array: function (ele) {
- return this._is_simple_array(ele);
- },
-
- mono_array_to_js_array: function (mono_array) {
- if (mono_array === 0)
- return null;
-
- var arrayRoot = MONO.mono_wasm_new_root (mono_array);
- try {
- return this._mono_array_root_to_js_array (arrayRoot);
- } finally {
- arrayRoot.release();
- }
- },
-
- _mono_array_root_to_js_array: function (arrayRoot) {
- if (arrayRoot.value === 0)
- return null;
-
- let elemRoot = MONO.mono_wasm_new_root ();
-
- try {
- var len = this.mono_array_length (arrayRoot.value);
- var res = new Array (len);
- for (var i = 0; i < len; ++i)
- {
- elemRoot.value = this.mono_array_get (arrayRoot.value, i);
-
- if (this.is_nested_array (elemRoot.value))
- res[i] = this._mono_array_root_to_js_array (elemRoot);
- else
- res[i] = this._unbox_mono_obj_root (elemRoot);
- }
- } finally {
- elemRoot.release ();
- }
-
- return res;
- },
-
- js_array_to_mono_array: function (js_array, asString = false) {
- var mono_array = asString ? this.mono_wasm_string_array_new (js_array.length) : this.mono_obj_array_new (js_array.length);
- let [arrayRoot, elemRoot] = MONO.mono_wasm_new_roots ([mono_array, 0]);
-
- try {
- for (var i = 0; i < js_array.length; ++i) {
- var obj = js_array[i];
- if (asString)
- obj = obj.toString ();
-
- elemRoot.value = this.js_to_mono_obj (obj);
- this.mono_obj_array_set (arrayRoot.value, i, elemRoot.value);
- }
-
- return mono_array;
- } finally {
- MONO.mono_wasm_release_roots (arrayRoot, elemRoot);
- }
- },
-
- unbox_mono_obj: function (mono_obj) {
- if (mono_obj === 0)
- return undefined;
-
- var root = MONO.mono_wasm_new_root (mono_obj);
- try {
- return this._unbox_mono_obj_root (root);
- } finally {
- root.release();
- }
- },
-
- _unbox_delegate_rooted: function (mono_obj) {
- var obj = this.extract_js_obj (mono_obj);
- obj.__mono_delegate_alive__ = true;
- // FIXME: Should we root the object as long as this function has not been GCd?
- return function () {
- // TODO: Just use Function.bind
- return BINDING.invoke_delegate (obj, arguments);
- };
- },
-
- _unbox_task_rooted: function (mono_obj) {
- if (!this._are_promises_supported)
- throw new Error ("Promises are not supported thus 'System.Threading.Tasks.Task' can not work in this context.");
-
- var obj = this.extract_js_obj (mono_obj);
- var cont_obj = null;
- var promise = new Promise (function (resolve, reject) {
- cont_obj = {
- resolve: resolve,
- reject: reject
- };
- });
-
- this.call_method (this.setup_js_cont, null, "mo", [ mono_obj, cont_obj ]);
- obj.__mono_js_cont__ = cont_obj.__mono_gchandle__;
- cont_obj.__mono_js_task__ = obj.__mono_gchandle__;
- return promise;
- },
-
- _unbox_safehandle_rooted: function (mono_obj) {
- var addRef = true;
- var js_handle = this.call_method(this.safehandle_get_handle, null, "mi", [ mono_obj, addRef ]);
- var requiredObject = BINDING.mono_wasm_require_handle (js_handle);
- if (addRef)
- {
- if (typeof this.mono_wasm_owned_objects_LMF === "undefined")
- this.mono_wasm_owned_objects_LMF = [];
-
- this.mono_wasm_owned_objects_LMF.push(js_handle);
- }
- return requiredObject;
- },
-
- _unbox_mono_obj_rooted_with_known_nonprimitive_type: function (mono_obj, type) {
- //See MARSHAL_TYPE_ defines in driver.c
- switch (type) {
- case 26: // int64
- case 27: // uint64
- // TODO: Fix this once emscripten offers HEAPI64/HEAPU64 or can return them
- throw new Error ("int64 not available");
- case 3: // string
- return this.conv_string (mono_obj, false);
- case 29: // interned string
- return this.conv_string (mono_obj, true);
- case 4: //vts
- throw new Error ("no idea on how to unbox value types");
- case 5: // delegate
- return this._unbox_delegate_rooted (mono_obj);
- case 6: // Task
- return this._unbox_task_rooted (mono_obj);
- case 7: // ref type
- return this.extract_js_obj (mono_obj);
- case 10: // arrays
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- case 16:
- case 17:
- case 18:
- throw new Error ("Marshalling of primitive arrays are not supported. Use the corresponding TypedArray instead.");
- case 20: // clr .NET DateTime
- var dateValue = this.call_method(this.get_date_value, null, "md", [ mono_obj ]);
- return new Date(dateValue);
- case 21: // clr .NET DateTimeOffset
- var dateoffsetValue = this._object_to_string (mono_obj);
- return dateoffsetValue;
- case 22: // clr .NET Uri
- var uriValue = this._object_to_string (mono_obj);
- return uriValue;
- case 23: // clr .NET SafeHandle
- return this._unbox_safehandle_rooted (mono_obj);
- case 30:
- return undefined;
- default:
- throw new Error ("no idea on how to unbox object kind " + type + " at offset " + mono_obj);
- }
- },
-
- _unbox_mono_obj_root: function (root) {
- var mono_obj = root.value;
- if (mono_obj === 0)
- return undefined;
-
- var type = this.mono_wasm_try_unbox_primitive_and_get_type (mono_obj, this._unbox_buffer);
- switch (type) {
- case 1: // int
- return Module.HEAP32[this._unbox_buffer / 4];
- case 25: // uint32
- return Module.HEAPU32[this._unbox_buffer / 4];
- case 24: // float32
- return Module.HEAPF32[this._unbox_buffer / 4];
- case 2: // float64
- return Module.HEAPF64[this._unbox_buffer / 8];
- case 8: // boolean
- return (Module.HEAP32[this._unbox_buffer / 4]) !== 0;
- case 28: // char
- return String.fromCharCode(Module.HEAP32[this._unbox_buffer / 4]);
- default:
- return this._unbox_mono_obj_rooted_with_known_nonprimitive_type (mono_obj, type);
- }
- },
-
- create_task_completion_source: function () {
- return this.call_method (this.create_tcs, null, "i", [ -1 ]);
- },
-
- set_task_result: function (tcs, result) {
- tcs.is_mono_tcs_result_set = true;
- this.call_method (this.set_tcs_result, null, "oo", [ tcs, result ]);
- if (tcs.is_mono_tcs_task_bound)
- this.free_task_completion_source(tcs);
- },
-
- set_task_failure: function (tcs, reason) {
- tcs.is_mono_tcs_result_set = true;
- this.call_method (this.set_tcs_failure, null, "os", [ tcs, reason.toString () ]);
- if (tcs.is_mono_tcs_task_bound)
- this.free_task_completion_source(tcs);
- },
-
- // https://github.com/Planeshifter/emscripten-examples/blob/master/01_PassingArrays/sum_post.js
- js_typedarray_to_heap: function(typedArray){
- var numBytes = typedArray.length * typedArray.BYTES_PER_ELEMENT;
- var ptr = Module._malloc(numBytes);
- var heapBytes = new Uint8Array(Module.HEAPU8.buffer, ptr, numBytes);
- heapBytes.set(new Uint8Array(typedArray.buffer, typedArray.byteOffset, numBytes));
- return heapBytes;
- },
-
- _box_js_int: function (js_obj) {
- Module.HEAP32[this._box_buffer / 4] = js_obj;
- return this.mono_wasm_box_primitive (this._class_int32, this._box_buffer, 4);
- },
-
- _box_js_uint: function (js_obj) {
- Module.HEAPU32[this._box_buffer / 4] = js_obj;
- return this.mono_wasm_box_primitive (this._class_uint32, this._box_buffer, 4);
- },
-
- _box_js_double: function (js_obj) {
- Module.HEAPF64[this._box_buffer / 8] = js_obj;
- return this.mono_wasm_box_primitive (this._class_double, this._box_buffer, 8);
- },
-
- _box_js_bool: function (js_obj) {
- Module.HEAP32[this._box_buffer / 4] = js_obj ? 1 : 0;
- return this.mono_wasm_box_primitive (this._class_boolean, this._box_buffer, 4);
- },
-
- js_to_mono_obj: function (js_obj) {
- this.bindings_lazy_init ();
-
- // determines if the javascript object is a Promise or Promise like which can happen
- // when using an external Promise library. The javascript object should be marshalled
- // as managed Task objects.
- //
- // Example is when Bluebird is included in a web page using a script tag, it overwrites the
- // global Promise object by default with its own version of Promise.
- function isThenable() {
- // When using an external Promise library the Promise.resolve may not be sufficient
- // to identify the object as a Promise.
- return Promise.resolve(js_obj) === js_obj ||
- ((typeof js_obj === "object" || typeof js_obj === "function") && typeof js_obj.then === "function")
- }
-
- switch (true) {
- case js_obj === null:
- case typeof js_obj === "undefined":
- return 0;
- case typeof js_obj === "number": {
- if ((js_obj | 0) === js_obj)
- result = this._box_js_int (js_obj);
- else if ((js_obj >>> 0) === js_obj)
- result = this._box_js_uint (js_obj);
- else
- result = this._box_js_double (js_obj);
-
- if (!result)
- throw new Error (`Boxing failed for ${js_obj}`);
-
- return result;
- } case typeof js_obj === "string":
- return this.js_string_to_mono_string (js_obj);
- case typeof js_obj === "symbol":
- return this.js_string_to_mono_string_interned (js_obj);
- case typeof js_obj === "boolean":
- return this._box_js_bool (js_obj);
- case isThenable() === true:
- var the_task = this.try_extract_mono_obj (js_obj);
- if (the_task)
- return the_task;
- // FIXME: We need to root tcs for an appropriate timespan, at least until the Task
- // is resolved
- var tcs = this.create_task_completion_source ();
- js_obj.then (function (result) {
- BINDING.set_task_result (tcs, result);
- }, function (reason) {
- BINDING.set_task_failure (tcs, reason);
- })
- return this.get_task_and_bind (tcs, js_obj);
- case js_obj.constructor.name === "Date":
- // We may need to take into account the TimeZone Offset
- return this.call_method(this.create_date_time, null, "d!", [ js_obj.getTime() ]);
- default:
- return this.extract_mono_obj (js_obj);
- }
- },
- js_to_mono_uri: function (js_obj) {
- this.bindings_lazy_init ();
-
- switch (true) {
- case js_obj === null:
- case typeof js_obj === "undefined":
- return 0;
- case typeof js_obj === "symbol":
- case typeof js_obj === "string":
- return this.call_method(this.create_uri, null, "s!", [ js_obj ])
- default:
- return this.extract_mono_obj (js_obj);
- }
- },
- has_backing_array_buffer: function (js_obj) {
- return typeof SharedArrayBuffer !== 'undefined'
- ? js_obj.buffer instanceof ArrayBuffer || js_obj.buffer instanceof SharedArrayBuffer
- : js_obj.buffer instanceof ArrayBuffer;
- },
-
- js_typed_array_to_array : function (js_obj) {
-
- // JavaScript typed arrays are array-like objects and provide a mechanism for accessing
- // raw binary data. (...) To achieve maximum flexibility and efficiency, JavaScript typed arrays
- // split the implementation into buffers and views. A buffer (implemented by the ArrayBuffer object)
- // is an object representing a chunk of data; it has no format to speak of, and offers no
- // mechanism for accessing its contents. In order to access the memory contained in a buffer,
- // you need to use a view. A view provides a context — that is, a data type, starting offset,
- // and number of elements — that turns the data into an actual typed array.
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
- if (!!(this.has_backing_array_buffer(js_obj) && js_obj.BYTES_PER_ELEMENT))
- {
- var arrayType = js_obj[Symbol.for("wasm type")];
- var heapBytes = this.js_typedarray_to_heap(js_obj);
- var bufferArray = this.mono_typed_array_new(heapBytes.byteOffset, js_obj.length, js_obj.BYTES_PER_ELEMENT, arrayType);
- Module._free(heapBytes.byteOffset);
- return bufferArray;
- }
- else {
- throw new Error("Object '" + js_obj + "' is not a typed array");
- }
-
-
- },
- // Copy the existing typed array to the heap pointed to by the pinned array address
- // typed array memory -> copy to heap -> address of managed pinned array
- typedarray_copy_to : function (typed_array, pinned_array, begin, end, bytes_per_element) {
-
- // JavaScript typed arrays are array-like objects and provide a mechanism for accessing
- // raw binary data. (...) To achieve maximum flexibility and efficiency, JavaScript typed arrays
- // split the implementation into buffers and views. A buffer (implemented by the ArrayBuffer object)
- // is an object representing a chunk of data; it has no format to speak of, and offers no
- // mechanism for accessing its contents. In order to access the memory contained in a buffer,
- // you need to use a view. A view provides a context — that is, a data type, starting offset,
- // and number of elements — that turns the data into an actual typed array.
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
- if (!!(this.has_backing_array_buffer(typed_array) && typed_array.BYTES_PER_ELEMENT))
- {
- // Some sanity checks of what is being asked of us
- // lets play it safe and throw an error here instead of assuming to much.
- // Better safe than sorry later
- if (bytes_per_element !== typed_array.BYTES_PER_ELEMENT)
- throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '" + typed_array.BYTES_PER_ELEMENT + "' sizeof managed element: '" + bytes_per_element + "'");
-
- // how much space we have to work with
- var num_of_bytes = (end - begin) * bytes_per_element;
- // how much typed buffer space are we talking about
- var view_bytes = typed_array.length * typed_array.BYTES_PER_ELEMENT;
- // only use what is needed.
- if (num_of_bytes > view_bytes)
- num_of_bytes = view_bytes;
-
- // offset index into the view
- var offset = begin * bytes_per_element;
-
- // Create a view over the heap pointed to by the pinned array address
- var heapBytes = new Uint8Array(Module.HEAPU8.buffer, pinned_array + offset, num_of_bytes);
- // Copy the bytes of the typed array to the heap.
- heapBytes.set(new Uint8Array(typed_array.buffer, typed_array.byteOffset, num_of_bytes));
-
- return num_of_bytes;
- }
- else {
- throw new Error("Object '" + typed_array + "' is not a typed array");
- }
-
- },
- // Copy the pinned array address from pinned_array allocated on the heap to the typed array.
- // adress of managed pinned array -> copy from heap -> typed array memory
- typedarray_copy_from : function (typed_array, pinned_array, begin, end, bytes_per_element) {
-
- // JavaScript typed arrays are array-like objects and provide a mechanism for accessing
- // raw binary data. (...) To achieve maximum flexibility and efficiency, JavaScript typed arrays
- // split the implementation into buffers and views. A buffer (implemented by the ArrayBuffer object)
- // is an object representing a chunk of data; it has no format to speak of, and offers no
- // mechanism for accessing its contents. In order to access the memory contained in a buffer,
- // you need to use a view. A view provides a context — that is, a data type, starting offset,
- // and number of elements — that turns the data into an actual typed array.
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
- if (!!(this.has_backing_array_buffer(typed_array) && typed_array.BYTES_PER_ELEMENT))
- {
- // Some sanity checks of what is being asked of us
- // lets play it safe and throw an error here instead of assuming to much.
- // Better safe than sorry later
- if (bytes_per_element !== typed_array.BYTES_PER_ELEMENT)
- throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '" + typed_array.BYTES_PER_ELEMENT + "' sizeof managed element: '" + bytes_per_element + "'");
-
- // how much space we have to work with
- var num_of_bytes = (end - begin) * bytes_per_element;
- // how much typed buffer space are we talking about
- var view_bytes = typed_array.length * typed_array.BYTES_PER_ELEMENT;
- // only use what is needed.
- if (num_of_bytes > view_bytes)
- num_of_bytes = view_bytes;
-
- // Create a new view for mapping
- var typedarrayBytes = new Uint8Array(typed_array.buffer, 0, num_of_bytes);
- // offset index into the view
- var offset = begin * bytes_per_element;
- // Set view bytes to value from HEAPU8
- typedarrayBytes.set(Module.HEAPU8.subarray(pinned_array + offset, pinned_array + offset + num_of_bytes));
- return num_of_bytes;
- }
- else {
- throw new Error("Object '" + typed_array + "' is not a typed array");
- }
-
- },
- // Creates a new typed array from pinned array address from pinned_array allocated on the heap to the typed array.
- // adress of managed pinned array -> copy from heap -> typed array memory
- typed_array_from : function (pinned_array, begin, end, bytes_per_element, type) {
-
- // typed array
- var newTypedArray = 0;
-
- switch (type)
- {
- case 5:
- newTypedArray = new Int8Array(end - begin);
- break;
- case 6:
- newTypedArray = new Uint8Array(end - begin);
- break;
- case 7:
- newTypedArray = new Int16Array(end - begin);
- break;
- case 8:
- newTypedArray = new Uint16Array(end - begin);
- break;
- case 9:
- newTypedArray = new Int32Array(end - begin);
- break;
- case 10:
- newTypedArray = new Uint32Array(end - begin);
- break;
- case 13:
- newTypedArray = new Float32Array(end - begin);
- break;
- case 14:
- newTypedArray = new Float64Array(end - begin);
- break;
- case 15: // This is a special case because the typed array is also byte[]
- newTypedArray = new Uint8ClampedArray(end - begin);
- break;
- }
-
- this.typedarray_copy_from(newTypedArray, pinned_array, begin, end, bytes_per_element);
- return newTypedArray;
- },
- js_to_mono_enum: function (js_obj, method, parmIdx) {
- this.bindings_lazy_init ();
-
- if (typeof (js_obj) !== "number")
- throw new Error (`Expected numeric value for enum argument, got '${js_obj}'`);
-
- return js_obj | 0;
- },
- wasm_binding_obj_new: function (js_obj_id, ownsHandle, type)
- {
- return this._bind_js_obj (js_obj_id, ownsHandle, type);
- },
- wasm_bind_existing: function (mono_obj, js_id)
- {
- return this._bind_existing_obj (mono_obj, js_id);
- },
-
- wasm_bind_core_clr_obj: function (js_id, gc_handle)
- {
- return this._bind_core_clr_obj (js_id, gc_handle);
- },
-
- wasm_get_js_id: function (mono_obj)
- {
- return this._get_js_id (mono_obj);
- },
-
- wasm_get_raw_obj: function (gchandle)
- {
- return this._get_raw_mono_obj (gchandle);
- },
-
- try_extract_mono_obj:function (js_obj) {
- if (js_obj === null || typeof js_obj === "undefined" || typeof js_obj.__mono_gchandle__ === "undefined")
- return 0;
- return this.wasm_get_raw_obj (js_obj.__mono_gchandle__);
- },
-
- mono_method_get_call_signature: function(method, mono_obj) {
- this.bindings_lazy_init ();
-
- return this.call_method (this.get_call_sig, null, "im", [ method, mono_obj ]);
- },
-
- get_task_and_bind: function (tcs, js_obj) {
- var gc_handle = this.mono_wasm_free_list.length ? this.mono_wasm_free_list.pop() : this.mono_wasm_ref_counter++;
- var task_gchandle = this.call_method (this.tcs_get_task_and_bind, null, "oi", [ tcs, gc_handle + 1 ]);
- js_obj.__mono_gchandle__ = task_gchandle;
- this.mono_wasm_object_registry[gc_handle] = js_obj;
- this.free_task_completion_source(tcs);
- tcs.is_mono_tcs_task_bound = true;
- js_obj.__mono_bound_tcs__ = tcs.__mono_gchandle__;
- tcs.__mono_bound_task__ = js_obj.__mono_gchandle__;
- return this.wasm_get_raw_obj (js_obj.__mono_gchandle__);
- },
-
- free_task_completion_source: function (tcs) {
- if (tcs.is_mono_tcs_result_set)
- {
- this._unbind_raw_obj_and_free (tcs.__mono_gchandle__);
- }
- if (tcs.__mono_bound_task__)
- {
- this._unbind_raw_obj_and_free (tcs.__mono_bound_task__);
- }
- },
-
- extract_mono_obj: function (js_obj) {
- if (js_obj === null || typeof js_obj === "undefined")
- return 0;
-
- var result = null;
- var gc_handle = js_obj.__mono_gchandle__;
- if (gc_handle) {
- result = this.wasm_get_raw_obj (gc_handle);
-
- // It's possible the managed object corresponding to this JS object was collected,
- // in which case we need to make a new one.
- if (!result) {
- delete js_obj.__mono_gchandle__;
- delete js_obj.is_mono_bridged_obj;
- }
- }
-
- if (!result) {
- gc_handle = this.mono_wasm_register_obj(js_obj);
- result = this.wasm_get_raw_obj (gc_handle);
- }
-
- return result;
- },
-
- extract_js_obj: function (mono_obj) {
- if (mono_obj == 0)
- return null;
-
- var js_id = this.wasm_get_js_id (mono_obj);
- if (js_id > 0)
- return this.mono_wasm_require_handle(js_id);
-
- var gcHandle = this.mono_wasm_free_list.length ? this.mono_wasm_free_list.pop() : this.mono_wasm_ref_counter++;
- var js_obj = {
- __mono_gchandle__: this.wasm_bind_existing(mono_obj, gcHandle + 1),
- is_mono_bridged_obj: true
- };
-
- this.mono_wasm_object_registry[gcHandle] = js_obj;
- return js_obj;
- },
-
- _create_named_function: function (name, argumentNames, body, closure) {
- var result = null, keys = null, closureArgumentList = null, closureArgumentNames = null;
-
- if (closure) {
- closureArgumentNames = Object.keys (closure);
- closureArgumentList = new Array (closureArgumentNames.length);
- for (var i = 0, l = closureArgumentNames.length; i < l; i++)
- closureArgumentList[i] = closure[closureArgumentNames[i]];
- }
-
- var constructor = this._create_rebindable_named_function (name, argumentNames, body, closureArgumentNames);
- result = constructor.apply (null, closureArgumentList);
-
- return result;
- },
-
- _create_rebindable_named_function: function (name, argumentNames, body, closureArgNames) {
- var strictPrefix = "\"use strict\";\r\n";
- var uriPrefix = "", escapedFunctionIdentifier = "";
-
- if (name) {
- uriPrefix = "//# sourceURL=https://mono-wasm.invalid/" + name + "\r\n";
- escapedFunctionIdentifier = name;
- } else {
- escapedFunctionIdentifier = "unnamed";
- }
-
- var rawFunctionText = "function " + escapedFunctionIdentifier + "(" +
- argumentNames.join(", ") +
- ") {\r\n" +
- body +
- "\r\n};\r\n";
-
- var lineBreakRE = /\r(\n?)/g;
-
- rawFunctionText =
- uriPrefix + strictPrefix +
- rawFunctionText.replace(lineBreakRE, "\r\n ") +
- ` return ${escapedFunctionIdentifier};\r\n`;
-
- var result = null, keys = null;
-
- if (closureArgNames) {
- keys = closureArgNames.concat ([rawFunctionText]);
- } else {
- keys = [rawFunctionText];
- }
-
- result = Function.apply (Function, keys);
- return result;
- },
-
- _create_primitive_converters: function () {
- var result = new Map ();
- result.set ('m', { steps: [{ }], size: 0});
- result.set ('s', { steps: [{ convert: this.js_string_to_mono_string.bind (this) }], size: 0, needs_root: true });
- result.set ('S', { steps: [{ convert: this.js_string_to_mono_string_interned.bind (this) }], size: 0, needs_root: true });
- result.set ('o', { steps: [{ convert: this.js_to_mono_obj.bind (this) }], size: 0, needs_root: true });
- result.set ('u', { steps: [{ convert: this.js_to_mono_uri.bind (this) }], size: 0, needs_root: true });
-
- // result.set ('k', { steps: [{ convert: this.js_to_mono_enum.bind (this), indirect: 'i64'}], size: 8});
- result.set ('j', { steps: [{ convert: this.js_to_mono_enum.bind (this), indirect: 'i32'}], size: 8});
-
- result.set ('i', { steps: [{ indirect: 'i32'}], size: 8});
- result.set ('l', { steps: [{ indirect: 'i64'}], size: 8});
- result.set ('f', { steps: [{ indirect: 'float'}], size: 8});
- result.set ('d', { steps: [{ indirect: 'double'}], size: 8});
-
- this._primitive_converters = result;
- return result;
- },
-
- _create_converter_for_marshal_string: function (args_marshal) {
- var primitiveConverters = this._primitive_converters;
- if (!primitiveConverters)
- primitiveConverters = this._create_primitive_converters ();
-
- var steps = [];
- var size = 0;
- var is_result_definitely_unmarshaled = false,
- is_result_possibly_unmarshaled = false,
- result_unmarshaled_if_argc = -1,
- needs_root_buffer = false;
-
- for (var i = 0; i < args_marshal.length; ++i) {
- var key = args_marshal[i];
-
- if (i === args_marshal.length - 1) {
- if (key === "!") {
- is_result_definitely_unmarshaled = true;
- continue;
- } else if (key === "m") {
- is_result_possibly_unmarshaled = true;
- result_unmarshaled_if_argc = args_marshal.length - 1;
- }
- } else if (key === "!")
- throw new Error ("! must be at the end of the signature");
-
- var conv = primitiveConverters.get (key);
- if (!conv)
- throw new Error ("Unknown parameter type " + type);
-
- var localStep = Object.create (conv.steps[0]);
- localStep.size = conv.size;
- if (conv.needs_root)
- needs_root_buffer = true;
- localStep.needs_root = conv.needs_root;
- localStep.key = args_marshal[i];
- steps.push (localStep);
- size += conv.size;
- }
-
- return {
- steps: steps, size: size, args_marshal: args_marshal,
- is_result_definitely_unmarshaled: is_result_definitely_unmarshaled,
- is_result_possibly_unmarshaled: is_result_possibly_unmarshaled,
- result_unmarshaled_if_argc: result_unmarshaled_if_argc,
- needs_root_buffer: needs_root_buffer
- };
- },
-
- _get_converter_for_marshal_string: function (args_marshal) {
- if (!this._signature_converters)
- this._signature_converters = new Map();
-
- var converter = this._signature_converters.get (args_marshal);
- if (!converter) {
- converter = this._create_converter_for_marshal_string (args_marshal);
- this._signature_converters.set (args_marshal, converter);
- }
-
- return converter;
- },
-
- _compile_converter_for_marshal_string: function (args_marshal) {
- var converter = this._get_converter_for_marshal_string (args_marshal);
- if (typeof (converter.args_marshal) !== "string")
- throw new Error ("Corrupt converter for '" + args_marshal + "'");
-
- if (converter.compiled_function && converter.compiled_variadic_function)
- return converter;
-
- var converterName = args_marshal.replace("!", "_result_unmarshaled");
- converter.name = converterName;
-
- var body = [];
- var argumentNames = ["buffer", "rootBuffer", "method"];
-
- // worst-case allocation size instead of allocating dynamically, plus padding
- var bufferSizeBytes = converter.size + (args_marshal.length * 4) + 16;
- var rootBufferSize = args_marshal.length;
- // ensure the indirect values are 8-byte aligned so that aligned loads and stores will work
- var indirectBaseOffset = ((((args_marshal.length * 4) + 7) / 8) | 0) * 8;
-
- var closure = {};
- var indirectLocalOffset = 0;
-
- body.push (
- `if (!buffer) buffer = Module._malloc (${bufferSizeBytes});`,
- `var indirectStart = buffer + ${indirectBaseOffset};`,
- "var indirect32 = (indirectStart / 4) | 0, indirect64 = (indirectStart / 8) | 0;",
- "var buffer32 = (buffer / 4) | 0;",
- ""
- );
-
- for (let i = 0; i < converter.steps.length; i++) {
- var step = converter.steps[i];
- var closureKey = "step" + i;
- var valueKey = "value" + i;
-
- var argKey = "arg" + i;
- argumentNames.push (argKey);
-
- if (step.convert) {
- closure[closureKey] = step.convert;
- body.push (`var ${valueKey} = ${closureKey}(${argKey}, method, ${i});`);
- } else {
- body.push (`var ${valueKey} = ${argKey};`);
- }
-
- if (step.needs_root)
- body.push (`rootBuffer.set (${i}, ${valueKey});`);
-
- if (step.indirect) {
- var heapArrayName = null;
-
- switch (step.indirect) {
- case "u32":
- heapArrayName = "HEAPU32";
- break;
- case "i32":
- heapArrayName = "HEAP32";
- break;
- case "float":
- heapArrayName = "HEAPF32";
- break;
- case "double":
- body.push (`Module.HEAPF64[indirect64 + ${(indirectLocalOffset / 8)}] = ${valueKey};`);
- break;
- case "i64":
- body.push (`Module.setValue (indirectStart + ${indirectLocalOffset}, ${valueKey}, 'i64');`);
- break;
- default:
- throw new Error ("Unimplemented indirect type: " + step.indirect);
- }
-
- if (heapArrayName)
- body.push (`Module.${heapArrayName}[indirect32 + ${(indirectLocalOffset / 4)}] = ${valueKey};`);
-
- body.push (`Module.HEAP32[buffer32 + ${i}] = indirectStart + ${indirectLocalOffset};`, "");
- indirectLocalOffset += step.size;
- } else {
- body.push (`Module.HEAP32[buffer32 + ${i}] = ${valueKey};`, "");
- indirectLocalOffset += 4;
- }
- }
-
- body.push ("return buffer;");
-
- var bodyJs = body.join ("\r\n"), compiledFunction = null, compiledVariadicFunction = null;
- try {
- compiledFunction = this._create_named_function("converter_" + converterName, argumentNames, bodyJs, closure);
- converter.compiled_function = compiledFunction;
- } catch (exc) {
- converter.compiled_function = null;
- console.warn("compiling converter failed for", bodyJs, "with error", exc);
- throw exc;
- }
-
- argumentNames = ["existingBuffer", "rootBuffer", "method", "args"];
- closure = {
- converter: compiledFunction
- };
- body = [
- "return converter(",
- " existingBuffer, rootBuffer, method,"
- ];
-
- for (let i = 0; i < converter.steps.length; i++) {
- body.push(
- " args[" + i +
- (
- (i == converter.steps.length - 1)
- ? "]"
- : "], "
- )
- );
- }
-
- body.push(");");
-
- bodyJs = body.join ("\r\n");
- try {
- compiledVariadicFunction = this._create_named_function("variadic_converter_" + converterName, argumentNames, bodyJs, closure);
- converter.compiled_variadic_function = compiledVariadicFunction;
- } catch (exc) {
- converter.compiled_variadic_function = null;
- console.warn("compiling converter failed for", bodyJs, "with error", exc);
- throw exc;
- }
-
- converter.scratchRootBuffer = null;
- converter.scratchBuffer = 0 | 0;
-
- return converter;
- },
-
- _verify_args_for_method_call: function (args_marshal, args) {
- var has_args = args && (typeof args === "object") && args.length > 0;
- var has_args_marshal = typeof args_marshal === "string";
-
- if (has_args) {
- if (!has_args_marshal)
- throw new Error ("No signature provided for method call.");
- else if (args.length > args_marshal.length)
- throw new Error ("Too many parameter values. Expected at most " + args_marshal.length + " value(s) for signature " + args_marshal);
- }
-
- return has_args_marshal && has_args;
- },
-
- _get_buffer_for_method_call: function (converter) {
- if (!converter)
- return 0;
-
- var result = converter.scratchBuffer;
- converter.scratchBuffer = 0;
- return result;
- },
-
- _get_args_root_buffer_for_method_call: function (converter) {
- if (!converter)
- return null;
-
- if (!converter.needs_root_buffer)
- return null;
-
- var result;
- if (converter.scratchRootBuffer) {
- result = converter.scratchRootBuffer;
- converter.scratchRootBuffer = null;
- } else {
- // TODO: Expand the converter's heap allocation and then use
- // mono_wasm_new_root_buffer_from_pointer instead. Not that important
- // at present because the scratch buffer will be reused unless we are
- // recursing through a re-entrant call
- result = MONO.mono_wasm_new_root_buffer (converter.steps.length);
- result.converter = converter;
- }
- return result;
- },
-
- _release_args_root_buffer_from_method_call: function (converter, argsRootBuffer) {
- if (!argsRootBuffer || !converter)
- return;
-
- // Store the arguments root buffer for re-use in later calls
- if (!converter.scratchRootBuffer) {
- argsRootBuffer.clear ();
- converter.scratchRootBuffer = argsRootBuffer;
- } else {
- argsRootBuffer.release ();
- }
- },
-
- _release_buffer_from_method_call: function (converter, buffer) {
- if (!converter || !buffer)
- return;
-
- if (!converter.scratchBuffer)
- converter.scratchBuffer = buffer | 0;
- else
- Module._free (buffer | 0);
- },
-
- _convert_exception_for_method_call: function (result, exception) {
- if (exception === 0)
- return null;
-
- var msg = this.conv_string (result, false);
- var err = new Error (msg); //the convention is that invoke_method ToString () any outgoing exception
- // console.warn ("error", msg, "at location", err.stack);
- return err;
- },
-
- _maybe_produce_signature_warning: function (converter) {
- if (converter.has_warned_about_signature)
- return;
-
- console.warn ("MONO_WASM: Deprecated raw return value signature: '" + converter.args_marshal + "'. End the signature with '!' instead of 'm'.");
- converter.has_warned_about_signature = true;
- },
-
- _decide_if_result_is_marshaled: function (converter, argc) {
- if (!converter)
- return true;
-
- if (
- converter.is_result_possibly_unmarshaled &&
- (argc === converter.result_unmarshaled_if_argc)
- ) {
- if (argc < converter.result_unmarshaled_if_argc)
- throw new Error(["Expected >= ", converter.result_unmarshaled_if_argc, "argument(s) but got", argc, "for signature " + converter.args_marshal].join(" "));
-
- this._maybe_produce_signature_warning (converter);
- return false;
- } else {
- if (argc < converter.steps.length)
- throw new Error(["Expected", converter.steps.length, "argument(s) but got", argc, "for signature " + converter.args_marshal].join(" "));
-
- return !converter.is_result_definitely_unmarshaled;
- }
- },
-
- /*
- args_marshal is a string with one character per parameter that tells how to marshal it, here are the valid values:
-
- i: int32
- j: int32 - Enum with underlying type of int32
- l: int64
- k: int64 - Enum with underlying type of int64
- f: float
- d: double
- s: string
- S: interned string
- o: js object will be converted to a C# object (this will box numbers/bool/promises)
- m: raw mono object. Don't use it unless you know what you're doing
-
- to suppress marshaling of the return value, place '!' at the end of args_marshal, i.e. 'ii!' instead of 'ii'
- */
- call_method: function (method, this_arg, args_marshal, args) {
- this.bindings_lazy_init ();
-
- // HACK: Sometimes callers pass null or undefined, coerce it to 0 since that's what wasm expects
- this_arg = this_arg | 0;
-
- // Detect someone accidentally passing the wrong type of value to method
- if ((method | 0) !== method)
- throw new Error (`method must be an address in the native heap, but was '${method}'`);
- if (!method)
- throw new Error ("no method specified");
-
- var needs_converter = this._verify_args_for_method_call (args_marshal, args);
-
- var buffer = 0, converter = null, argsRootBuffer = null;
- var is_result_marshaled = true;
-
- // check if the method signature needs argument mashalling
- if (needs_converter) {
- converter = this._compile_converter_for_marshal_string (args_marshal);
-
- is_result_marshaled = this._decide_if_result_is_marshaled (converter, args.length);
-
- argsRootBuffer = this._get_args_root_buffer_for_method_call (converter);
-
- var scratchBuffer = this._get_buffer_for_method_call (converter);
-
- buffer = converter.compiled_variadic_function (scratchBuffer, argsRootBuffer, method, args);
- }
-
- return this._call_method_with_converted_args (method, this_arg, converter, buffer, is_result_marshaled, argsRootBuffer);
- },
-
- _handle_exception_for_call: function (
- converter, buffer, resultRoot, exceptionRoot, argsRootBuffer
- ) {
- var exc = this._convert_exception_for_method_call (resultRoot.value, exceptionRoot.value);
- if (!exc)
- return;
-
- this._teardown_after_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer);
- throw exc;
- },
-
- _handle_exception_and_produce_result_for_call: function (
- converter, buffer, resultRoot, exceptionRoot, argsRootBuffer, is_result_marshaled
- ) {
- this._handle_exception_for_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer);
-
- if (is_result_marshaled)
- result = this._unbox_mono_obj_root (resultRoot);
- else
- result = resultRoot.value;
-
- this._teardown_after_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer);
- return result;
- },
-
- _teardown_after_call: function (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer) {
- this._release_args_root_buffer_from_method_call (converter, argsRootBuffer);
- this._release_buffer_from_method_call (converter, buffer | 0);
-
- if (resultRoot)
- resultRoot.release ();
- if (exceptionRoot)
- exceptionRoot.release ();
- },
-
- _get_method_description: function (method) {
- if (!this._method_descriptions)
- this._method_descriptions = new Map();
-
- var result = this._method_descriptions.get (method);
- if (!result)
- result = "method#" + method;
- return result;
- },
-
- _call_method_with_converted_args: function (method, this_arg, converter, buffer, is_result_marshaled, argsRootBuffer) {
- var resultRoot = MONO.mono_wasm_new_root (), exceptionRoot = MONO.mono_wasm_new_root ();
- resultRoot.value = this.invoke_method (method, this_arg, buffer, exceptionRoot.get_address ());
- return this._handle_exception_and_produce_result_for_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer, is_result_marshaled);
- },
-
- bind_method: function (method, this_arg, args_marshal, friendly_name) {
- this.bindings_lazy_init ();
-
- this_arg = this_arg | 0;
-
- var converter = null;
- if (typeof (args_marshal) === "string")
- converter = this._compile_converter_for_marshal_string (args_marshal);
-
- var closure = {
- library_mono: MONO,
- binding_support: this,
- method: method,
- this_arg: this_arg
- };
-
- var converterKey = "converter_" + converter.name;
-
- if (converter)
- closure[converterKey] = converter;
-
- var argumentNames = [];
- var body = [
- "var resultRoot = library_mono.mono_wasm_new_root (), exceptionRoot = library_mono.mono_wasm_new_root ();",
- ""
- ];
-
- if (converter) {
- body.push(
- `var argsRootBuffer = binding_support._get_args_root_buffer_for_method_call (${converterKey});`,
- `var scratchBuffer = binding_support._get_buffer_for_method_call (${converterKey});`,
- `var buffer = ${converterKey}.compiled_function (`,
- " scratchBuffer, argsRootBuffer, method,"
- );
-
- for (var i = 0; i < converter.steps.length; i++) {
- var argName = "arg" + i;
- argumentNames.push(argName);
- body.push(
- " " + argName +
- (
- (i == converter.steps.length - 1)
- ? ""
- : ", "
- )
- );
- }
-
- body.push(");");
-
- } else {
- body.push("var argsRootBuffer = null, buffer = 0;");
- }
-
- if (converter.is_result_definitely_unmarshaled) {
- body.push ("var is_result_marshaled = false;");
- } else if (converter.is_result_possibly_unmarshaled) {
- body.push (`var is_result_marshaled = arguments.length !== ${converter.result_unmarshaled_if_argc};`);
- } else {
- body.push ("var is_result_marshaled = true;");
- }
-
- // We inline a bunch of the invoke and marshaling logic here in order to eliminate the GC pressure normally
- // created by the unboxing part of the call process. Because unbox_mono_obj(_rooted) can return non-numeric
- // types, v8 and spidermonkey allocate and store its result on the heap (in the nursery, to be fair).
- // For a bound method however, we know the result will always be the same type because C# methods have known
- // return types. Inlining the invoke and marshaling logic means that even though the bound method has logic
- // for handling various types, only one path through the method (for its appropriate return type) will ever
- // be taken, and the JIT will see that the 'result' local and thus the return value of this function are
- // always of the exact same type. All of the branches related to this end up being predicted and low-cost.
- // The end result is that bound method invocations don't always allocate, so no more nursery GCs. Yay! -kg
- body.push(
- "",
- "resultRoot.value = binding_support.invoke_method (method, this_arg, buffer, exceptionRoot.get_address ());",
- `binding_support._handle_exception_for_call (${converterKey}, buffer, resultRoot, exceptionRoot, argsRootBuffer);`,
- "",
- "var resultPtr = resultRoot.value, result = undefined;",
- "if (!is_result_marshaled) ",
- " result = resultPtr;",
- "else if (resultPtr !== 0) {",
- // For the common scenario where the return type is a primitive, we want to try and unbox it directly
- // into our existing heap allocation and then read it out of the heap. Doing this all in one operation
- // means that we only need to enter a gc safe region twice (instead of 3+ times with the normal,
- // slower check-type-and-then-unbox flow which has extra checks since unbox verifies the type).
- " var resultType = binding_support.mono_wasm_try_unbox_primitive_and_get_type (resultPtr, buffer);",
- " switch (resultType) {",
- " case 1:", // int
- " result = Module.HEAP32[buffer / 4]; break;",
- " case 25:", // uint32
- " result = Module.HEAPU32[buffer / 4]; break;",
- " case 24:", // float32
- " result = Module.HEAPF32[buffer / 4]; break;",
- " case 2:", // float64
- " result = Module.HEAPF64[buffer / 8]; break;",
- " case 8:", // boolean
- " result = (Module.HEAP32[buffer / 4]) !== 0; break;",
- " case 28:", // char
- " result = String.fromCharCode(Module.HEAP32[buffer / 4]); break;",
- " default:",
- " result = binding_support._unbox_mono_obj_rooted_with_known_nonprimitive_type (resultPtr, resultType); break;",
- " }",
- "}",
- "",
- `binding_support._teardown_after_call (${converterKey}, buffer, resultRoot, exceptionRoot, argsRootBuffer);`,
- "return result;"
- );
-
- bodyJs = body.join ("\r\n");
-
- if (friendly_name) {
- var escapeRE = /[^A-Za-z0-9_]/g;
- friendly_name = friendly_name.replace(escapeRE, "_");
- }
-
- var displayName = "managed_" + (friendly_name || method);
-
- if (this_arg)
- displayName += "_with_this_" + this_arg;
-
- return this._create_named_function(displayName, argumentNames, bodyJs, closure);
- },
-
- invoke_delegate: function (delegate_obj, js_args) {
- this.bindings_lazy_init ();
-
- // Check to make sure the delegate is still alive on the CLR side of things.
- if (typeof delegate_obj.__mono_delegate_alive__ !== "undefined") {
- if (!delegate_obj.__mono_delegate_alive__)
- throw new Error("The delegate target that is being invoked is no longer available. Please check if it has been prematurely GC'd.");
- }
-
- var [delegateRoot] = MONO.mono_wasm_new_roots ([this.extract_mono_obj (delegate_obj)]);
- try {
- if (typeof delegate_obj.__mono_delegate_invoke__ === "undefined")
- delegate_obj.__mono_delegate_invoke__ = this.mono_wasm_get_delegate_invoke(delegateRoot.value);
- if (!delegate_obj.__mono_delegate_invoke__)
- throw new Error("System.Delegate Invoke method can not be resolved.");
-
- if (typeof delegate_obj.__mono_delegate_invoke_sig__ === "undefined")
- delegate_obj.__mono_delegate_invoke_sig__ = Module.mono_method_get_call_signature (delegate_obj.__mono_delegate_invoke__, delegateRoot.value);
-
- return this.call_method (delegate_obj.__mono_delegate_invoke__, delegateRoot.value, delegate_obj.__mono_delegate_invoke_sig__, js_args);
- } finally {
- MONO.mono_wasm_release_roots (delegateRoot);
- }
- },
-
- resolve_method_fqn: function (fqn) {
- this.bindings_lazy_init ();
-
- var assembly = fqn.substring(fqn.indexOf ("[") + 1, fqn.indexOf ("]")).trim();
- fqn = fqn.substring (fqn.indexOf ("]") + 1).trim();
-
- var methodname = fqn.substring(fqn.indexOf (":") + 1);
- fqn = fqn.substring (0, fqn.indexOf (":")).trim ();
-
- var namespace = "";
- var classname = fqn;
- if (fqn.indexOf(".") != -1) {
- var idx = fqn.lastIndexOf(".");
- namespace = fqn.substring (0, idx);
- classname = fqn.substring (idx + 1);
- }
-
- if (!assembly.trim())
- throw new Error("No assembly name specified");
- if (!classname.trim())
- throw new Error("No class name specified");
- if (!methodname.trim())
- throw new Error("No method name specified");
-
- var asm = this.assembly_load (assembly);
- if (!asm)
- throw new Error ("Could not find assembly: " + assembly);
-
- var klass = this.find_class(asm, namespace, classname);
- if (!klass)
- throw new Error ("Could not find class: " + namespace + ":" + classname + " in assembly " + assembly);
-
- var method = this.find_method (klass, methodname, -1);
- if (!method)
- throw new Error ("Could not find method: " + methodname);
- return method;
- },
-
- call_static_method: function (fqn, args, signature) {
- this.bindings_lazy_init ();
-
- var method = this.resolve_method_fqn (fqn);
-
- if (typeof signature === "undefined")
- signature = Module.mono_method_get_call_signature (method);
-
- return this.call_method (method, null, signature, args);
- },
-
- bind_static_method: function (fqn, signature) {
- this.bindings_lazy_init ();
-
- var method = this.resolve_method_fqn (fqn);
-
- if (typeof signature === "undefined")
- signature = Module.mono_method_get_call_signature (method);
-
- return BINDING.bind_method (method, null, signature, fqn);
- },
-
- bind_assembly_entry_point: function (assembly, signature) {
- this.bindings_lazy_init ();
-
- var asm = this.assembly_load (assembly);
- if (!asm)
- throw new Error ("Could not find assembly: " + assembly);
-
- var method = this.assembly_get_entry_point(asm);
- if (!method)
- throw new Error ("Could not find entry point for assembly: " + assembly);
-
- if (typeof signature === "undefined")
- signature = Module.mono_method_get_call_signature (method);
-
- return function() {
- try {
- var args = [...arguments];
- if (args.length > 0 && Array.isArray (args[0]))
- args[0] = BINDING.js_array_to_mono_array (args[0], true);
-
- let result = BINDING.call_method (method, null, signature, args);
- return Promise.resolve (result);
- } catch (error) {
- return Promise.reject (error);
- }
- };
- },
- call_assembly_entry_point: function (assembly, args, signature) {
- return this.bind_assembly_entry_point (assembly, signature) (...args)
- },
- // Object wrapping helper functions to handle reference handles that will
- // be used in managed code.
- mono_wasm_register_obj: function(obj) {
-
- var gc_handle = undefined;
- if (obj !== null && typeof obj !== "undefined")
- {
- gc_handle = obj.__mono_gchandle__;
-
- if (typeof gc_handle === "undefined") {
- var handle = this.mono_wasm_free_list.length ?
- this.mono_wasm_free_list.pop() : this.mono_wasm_ref_counter++;
- obj.__mono_jshandle__ = handle;
- // Obtain the JS -> C# type mapping.
- var wasm_type = obj[Symbol.for("wasm type")];
- obj.__owns_handle__ = true;
- gc_handle = obj.__mono_gchandle__ = this.wasm_binding_obj_new(handle + 1, obj.__owns_handle__, typeof wasm_type === "undefined" ? -1 : wasm_type);
- this.mono_wasm_object_registry[handle] = obj;
-
- }
- }
- return gc_handle;
- },
- mono_wasm_require_handle: function(handle) {
- if (handle > 0)
- return this.mono_wasm_object_registry[handle - 1];
- return null;
- },
- mono_wasm_unregister_obj: function(js_id) {
- var obj = this.mono_wasm_object_registry[js_id - 1];
- if (typeof obj !== "undefined" && obj !== null) {
- // if this is the global object then do not
- // unregister it.
- if (globalThis === obj)
- return obj;
-
- var gc_handle = obj.__mono_gchandle__;
- if (typeof gc_handle !== "undefined") {
-
- obj.__mono_gchandle__ = undefined;
- obj.__mono_jshandle__ = undefined;
-
- // If we are unregistering a delegate then mark it as not being alive
- // this will be checked in the delegate invoke and throw an appropriate
- // error.
- if (typeof obj.__mono_delegate_alive__ !== "undefined")
- obj.__mono_delegate_alive__ = false;
-
- this.mono_wasm_object_registry[js_id - 1] = undefined;
- this.mono_wasm_free_list.push(js_id - 1);
- }
- }
- return obj;
- },
- mono_wasm_free_handle: function(handle) {
- this.mono_wasm_unregister_obj(handle);
- },
- mono_wasm_free_raw_object: function(js_id) {
- var obj = this.mono_wasm_object_registry[js_id - 1];
- if (typeof obj !== "undefined" && obj !== null) {
- // if this is the global object then do not
- // unregister it.
- if (globalThis === obj)
- return obj;
-
- var gc_handle = obj.__mono_gchandle__;
- if (typeof gc_handle !== "undefined") {
-
- obj.__mono_gchandle__ = undefined;
- obj.__mono_jshandle__ = undefined;
-
- this.mono_wasm_object_registry[js_id - 1] = undefined;
- this.mono_wasm_free_list.push(js_id - 1);
- }
- }
- return obj;
- },
- mono_wasm_parse_args : function (args) {
- var js_args = this.mono_array_to_js_array(args);
- this.mono_wasm_save_LMF();
- return js_args;
- },
- mono_wasm_save_LMF : function () {
- //console.log("save LMF: " + BINDING.mono_wasm_owned_objects_frames.length)
- BINDING.mono_wasm_owned_objects_frames.push(BINDING.mono_wasm_owned_objects_LMF);
- BINDING.mono_wasm_owned_objects_LMF = undefined;
- },
- mono_wasm_unwind_LMF : function () {
- var __owned_objects__ = this.mono_wasm_owned_objects_frames.pop();
- // Release all managed objects that are loaded into the LMF
- if (typeof __owned_objects__ !== "undefined")
- {
- // Look into passing the array of owned object handles in one pass.
- var refidx;
- for (refidx = 0; refidx < __owned_objects__.length; refidx++)
- {
- var ownerRelease = __owned_objects__[refidx];
- this.call_method(this.safehandle_release_by_handle, null, "i", [ ownerRelease ]);
- }
- }
- //console.log("restore LMF: " + BINDING.mono_wasm_owned_objects_frames.length)
-
- },
- mono_wasm_convert_return_value: function (ret) {
- this.mono_wasm_unwind_LMF();
- return this.js_to_mono_obj (ret);
- },
- },
-
- mono_wasm_invoke_js_with_args: function(js_handle, method_name, args, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var obj = BINDING.get_js_obj (js_handle);
- if (!obj) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- var js_name = BINDING.conv_string (method_name, false);
- if (!js_name) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid method name object '" + method_name + "'");
- }
-
- var js_args = BINDING.mono_wasm_parse_args(args);
-
- var res;
- try {
- var m = obj [js_name];
- if (typeof m === "undefined")
- throw new Error("Method: '" + js_name + "' not found for: '" + Object.prototype.toString.call(obj) + "'");
- var res = m.apply (obj, js_args);
- return BINDING.mono_wasm_convert_return_value(res);
- } catch (e) {
- // make sure we release object reference counts on errors.
- BINDING.mono_wasm_unwind_LMF();
- var res = e.toString ();
- setValue (is_exception, 1, "i32");
- if (res === null || res === undefined)
- res = "unknown exception";
- return BINDING.js_string_to_mono_string (res);
- }
- },
- mono_wasm_get_object_property: function(js_handle, property_name, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var obj = BINDING.mono_wasm_require_handle (js_handle);
- if (!obj) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- var js_name = BINDING.conv_string (property_name, false);
- if (!js_name) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid property name object '" + js_name + "'");
- }
-
- var res;
- try {
- var m = obj [js_name];
- if (m === Object(m) && obj.__is_mono_proxied__)
- m.__is_mono_proxied__ = true;
-
- return BINDING.js_to_mono_obj (m);
- } catch (e) {
- var res = e.toString ();
- setValue (is_exception, 1, "i32");
- if (res === null || typeof res === "undefined")
- res = "unknown exception";
- return BINDING.js_string_to_mono_string (res);
- }
- },
- mono_wasm_set_object_property: function (js_handle, property_name, value, createIfNotExist, hasOwnProperty, is_exception) {
-
- BINDING.bindings_lazy_init ();
-
- var requireObject = BINDING.mono_wasm_require_handle (js_handle);
- if (!requireObject) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- var property = BINDING.conv_string (property_name, false);
- if (!property) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid property name object '" + property_name + "'");
- }
-
- var result = false;
-
- var js_value = BINDING.unbox_mono_obj(value);
- BINDING.mono_wasm_save_LMF();
-
- if (createIfNotExist) {
- requireObject[property] = js_value;
- result = true;
- }
- else {
- result = false;
- if (!createIfNotExist)
- {
- if (!requireObject.hasOwnProperty(property))
- return false;
- }
- if (hasOwnProperty === true) {
- if (requireObject.hasOwnProperty(property)) {
- requireObject[property] = js_value;
- result = true;
- }
- }
- else {
- requireObject[property] = js_value;
- result = true;
- }
-
- }
- BINDING.mono_wasm_unwind_LMF();
- return BINDING._box_js_bool (result);
- },
- mono_wasm_get_by_index: function(js_handle, property_index, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var obj = BINDING.mono_wasm_require_handle (js_handle);
- if (!obj) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- try {
- var m = obj [property_index];
- return BINDING.js_to_mono_obj (m);
- } catch (e) {
- var res = e.toString ();
- setValue (is_exception, 1, "i32");
- if (res === null || typeof res === "undefined")
- res = "unknown exception";
- return BINDING.js_string_to_mono_string (res);
- }
- },
- mono_wasm_set_by_index: function(js_handle, property_index, value, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var obj = BINDING.mono_wasm_require_handle (js_handle);
- if (!obj) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- var js_value = BINDING.unbox_mono_obj(value);
- BINDING.mono_wasm_save_LMF();
-
- try {
- obj [property_index] = js_value;
- BINDING.mono_wasm_unwind_LMF();
- return true;
- } catch (e) {
- var res = e.toString ();
- setValue (is_exception, 1, "i32");
- if (res === null || typeof res === "undefined")
- res = "unknown exception";
- return BINDING.js_string_to_mono_string (res);
- }
- },
- mono_wasm_get_global_object: function(global_name, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var js_name = BINDING.conv_string (global_name, false);
-
- var globalObj;
-
- if (!js_name) {
- globalObj = globalThis;
- }
- else {
- globalObj = globalThis[js_name];
- }
-
- if (globalObj === null || typeof globalObj === undefined) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Global object '" + js_name + "' not found.");
- }
-
- return BINDING.js_to_mono_obj (globalObj);
- },
- mono_wasm_release_handle: function(js_handle, is_exception) {
- BINDING.bindings_lazy_init ();
-
- BINDING.mono_wasm_free_handle(js_handle);
- },
- mono_wasm_release_object: function(js_handle, is_exception) {
- BINDING.bindings_lazy_init ();
-
- BINDING.mono_wasm_free_raw_object(js_handle);
- },
- mono_wasm_bind_core_object: function(js_handle, gc_handle, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var requireObject = BINDING.mono_wasm_require_handle (js_handle);
- if (!requireObject) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- BINDING.wasm_bind_core_clr_obj(js_handle, gc_handle );
- requireObject.__mono_gchandle__ = gc_handle;
- requireObject.__js_handle__ = js_handle;
- return gc_handle;
- },
- mono_wasm_bind_host_object: function(js_handle, gc_handle, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var requireObject = BINDING.mono_wasm_require_handle (js_handle);
- if (!requireObject) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- BINDING.wasm_bind_core_clr_obj(js_handle, gc_handle );
- requireObject.__mono_gchandle__ = gc_handle;
- return gc_handle;
- },
- mono_wasm_new: function (core_name, args, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var js_name = BINDING.conv_string (core_name, false);
-
- if (!js_name) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Core object '" + js_name + "' not found.");
- }
-
- var coreObj = globalThis[js_name];
-
- if (coreObj === null || typeof coreObj === "undefined") {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("JavaScript host object '" + js_name + "' not found.");
- }
-
- var js_args = BINDING.mono_wasm_parse_args(args);
-
- try {
-
- // This is all experimental !!!!!!
- var allocator = function(constructor, js_args) {
- // Not sure if we should be checking for anything here
- var argsList = new Array();
- argsList[0] = constructor;
- if (js_args)
- argsList = argsList.concat (js_args);
- var tempCtor = constructor.bind.apply (constructor, argsList);
- var obj = new tempCtor ();
- return obj;
- };
-
- var res = allocator(coreObj, js_args);
- var gc_handle = BINDING.mono_wasm_free_list.length ? BINDING.mono_wasm_free_list.pop() : BINDING.mono_wasm_ref_counter++;
- BINDING.mono_wasm_object_registry[gc_handle] = res;
- return BINDING.mono_wasm_convert_return_value(gc_handle + 1);
- } catch (e) {
- var res = e.toString ();
- setValue (is_exception, 1, "i32");
- if (res === null || res === undefined)
- res = "Error allocating object.";
- return BINDING.js_string_to_mono_string (res);
- }
-
- },
-
- mono_wasm_typed_array_to_array: function(js_handle, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var requireObject = BINDING.mono_wasm_require_handle (js_handle);
- if (!requireObject) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- return BINDING.js_typed_array_to_array(requireObject);
- },
- mono_wasm_typed_array_copy_to: function(js_handle, pinned_array, begin, end, bytes_per_element, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var requireObject = BINDING.mono_wasm_require_handle (js_handle);
- if (!requireObject) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- var res = BINDING.typedarray_copy_to(requireObject, pinned_array, begin, end, bytes_per_element);
- return BINDING.js_to_mono_obj (res)
- },
- mono_wasm_typed_array_from: function(pinned_array, begin, end, bytes_per_element, type, is_exception) {
- BINDING.bindings_lazy_init ();
- var res = BINDING.typed_array_from(pinned_array, begin, end, bytes_per_element, type);
- return BINDING.js_to_mono_obj (res)
- },
- mono_wasm_typed_array_copy_from: function(js_handle, pinned_array, begin, end, bytes_per_element, is_exception) {
- BINDING.bindings_lazy_init ();
-
- var requireObject = BINDING.mono_wasm_require_handle (js_handle);
- if (!requireObject) {
- setValue (is_exception, 1, "i32");
- return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'");
- }
-
- var res = BINDING.typedarray_copy_from(requireObject, pinned_array, begin, end, bytes_per_element);
- return BINDING.js_to_mono_obj (res)
- },
-
-
-};
-
-autoAddDeps(BindingSupportLib, '$BINDING')
-mergeInto(LibraryManager.library, BindingSupportLib)
-
-// SIG // Begin signature block
-// SIG // MIIkjAYJKoZIhvcNAQcCoIIkfTCCJHkCAQExDzANBglg
-// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
-// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
-// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
-// SIG // nxTMCwiUNcOBRhhNQT5WVPUesv0mhdRMmZ4ME03Cqb+g
-// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA
-// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV
-// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
-// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
-// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
-// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX
-// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR
-// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
-// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
-// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB
-// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW
-// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc
-// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb
-// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi
-// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk
-// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF
-// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO
-// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa
-// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp
-// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3
-// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym
-// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq
-// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB
-// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3
-// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw
-// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy
-// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf
-// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU
-// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv
-// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw
-// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv
-// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw
-// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA
-// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB
-// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA
-// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP
-// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe
-// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi
-// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY
-// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO
-// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM
-// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN
-// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm
-// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW
-// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F
-// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3
-// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV
-// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1
-// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
-// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
-// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
-// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
-// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
-// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5
-// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET
-// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
-// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
-// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu
-// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC
-// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf
-// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI
-// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv
-// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y
-// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT
-// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
-// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
-// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD
-// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf
-// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji
-// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys
-// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn
-// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB
-// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx
-// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT
-// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA
-// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
-// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE
-// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw
-// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC
-// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL
-// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
-// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
-// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF
-// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
-// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
-// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu
-// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
-// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu
-// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf
-// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA
-// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou
-// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+
-// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS
-// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE
-// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V
-// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu
-// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
-// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
-// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c
-// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN
-// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f
-// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA
-// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3
-// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8
-// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7
-// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ
-// SIG // UnMTDXpQzTGCFfQwghXwAgEBMIGVMH4xCzAJBgNVBAYT
-// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
-// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
-// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl
-// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A
-// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN
-// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
-// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIH3V
-// SIG // rVuHS6jhW1b2UUHL4nnR4dtJ5uT9jxWIJ1zW6lbkMEIG
-// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv
-// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w
-// SIG // DQYJKoZIhvcNAQEBBQAEggGAluW+auGYLdzMAxqZXnjE
-// SIG // AL0vFOlkbqS3YpYbb/93sk5LpYTyyv9AvLiwWOkwP/it
-// SIG // RG6yVuwYmaLjRiXdisc6AVn3GoC1SW8CLlO6Yx4Xad+i
-// SIG // xbD+KopbBdLcnCy80oJSmKh8peST4SMVsxnMHc6RkYCc
-// SIG // wShpd845K6Zr+D/83uLq2wnMJh6kEJHDTPXHOObC5fm4
-// SIG // eAJF8vps7FbW+n8ZgM4zVfiVELaKK+x/uUpaVIIgD99J
-// SIG // twXA+0qOhPGlI2KJdh9ptnpLn4wcdTHRq/Vg7GFtC4Un
-// SIG // 2aMgDkcer2DrrkUdjtnMoVPo+oWSkLl8hIJDWQUP4apC
-// SIG // 7mRCpxNVj9HbxNuV8mXVVacwq590peVGLKEn4US0GBwo
-// SIG // d5fXG7T4RJEhBJ2OdQN924/B8asWWxeDm4f3pEIGpnu+
-// SIG // NxnsbDCegbPVuVm97bq51snFul6sQ1NUUNoFOyN+WyAf
-// SIG // VLNIDeT9s9X+TrxFqPqA8uYY0pnz83FzlmE/f03Ru08c
-// SIG // W1cENGteoYIS/jCCEvoGCisGAQQBgjcDAwExghLqMIIS
-// SIG // 5gYJKoZIhvcNAQcCoIIS1zCCEtMCAQMxDzANBglghkgB
-// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw
-// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB
-// SIG // BQAEII2c2aXB+/wtEhB0SYNUVf6+akfrAb8q2mkOPozv
-// SIG // Bn+tAgZgsPYTykMYEzIwMjEwNjAzMTAyNzI2LjYzMVow
-// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5NMIIE
-// SIG // +TCCA+GgAwIBAgITMwAAATyL/bmzP0eX/QAAAAABPDAN
-// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
-// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
-// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
-// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
-// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjNaFw0yMjAxMTIx
-// SIG // NzI4MjNaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
-// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD
-// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z
-// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO
-// SIG // OjE3OUUtNEJCMC04MjQ2MSUwIwYDVQQDExxNaWNyb3Nv
-// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG
-// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmBAq6WkDqvY5DgaQ
-// SIG // t+OX0NCLzqUaivJxHvo6KSXP+VzTas2p6uYa3fcIm+EX
-// SIG // b6bj4+vJ+Q5v12btrwqp1qMYct4sa24Ev64Nwkt26qfA
-// SIG // INVEIP8QM99k7nnkzmNXDnpXF0WoaLCHI5a65L9dwGnB
-// SIG // V5uAG2DAoGDOgc3WSgEXm3OsxL/uEAsuPtQFfER0BxDn
-// SIG // aI+NjiaWxVpR72Cs17jNQB+L5o0/aP3wqtplg+yINvwq
-// SIG // WiHdoByukfkvdPYitu7lZI1Wqdv0m+AEziyW2lUPl9Po
-// SIG // WGxHAnrH/d4PrQEF7rwPHR+t3aCuSOc3WQheVP9w4m35
-// SIG // e2QhbFOpLPqYeIya2wIDAQABo4IBGzCCARcwHQYDVR0O
-// SIG // BBYEFOGhZ+LKEvo2s2E/JRjqGL8mZzxGMB8GA1UdIwQY
-// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP
-// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y
-// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI
-// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct
-// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI
-// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBADL3EIyU
-// SIG // 3Zd5bkjMxakZMUZJSfilkVFJQdyNiiVVm+Bp+nlnSU4l
-// SIG // nQtbsXoxdqD19G/l/UCIYvLtQGle/dnhIrdpUM6lYD4n
-// SIG // 8k2Ri48ytjqLuD4/xefD6dpuh7qRn7jQHoZZ/oUr7yBO
-// SIG // YIBJwor/ZVZACTjJSxxd/A2z7+6clrNC879rI2cDx73Y
-// SIG // bVfJQbTmLBPDcc55W7MnPNL0Z0XqpvCUCumfMQA+EnmP
-// SIG // HbhRV4XIhExthNG4fvzd5sBp81yczG0igCpMyMOmMan/
-// SIG // sx81jxYpvQxmcJnIavuiQSrW+BBk9BBbX6hgqzjw+Tu7
-// SIG // j8EnY9WqYF6qOx3Lce4XLOao6cIwggZxMIIEWaADAgEC
-// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw
-// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
-// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
-// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
-// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
-// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa
-// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
-// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
-// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN
-// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR
-// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh
-// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg
-// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg
-// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG
-// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX
-// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy
-// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB
-// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw
-// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK
-// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA
-// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
-// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
-// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
-// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
-// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
-// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93
-// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
-// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E
-// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC
-// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k
-// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0
-// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA
-// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF
-// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P
-// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI
-// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL
-// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ
-// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y
-// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL
-// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38
-// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+
-// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ
-// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl
-// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30
-// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp
-// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR
-// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj
-// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1
-// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLXMIICQAIB
-// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH
-// SIG // BgUrDgMCGgMVAB1LdHpZ3mjy22teinut0UdweuTmoIGD
-// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
-// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
-// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
-// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
-// SIG // DQYJKoZIhvcNAQEFBQACBQDkYrSTMCIYDzIwMjEwNjAz
-// SIG // MDk1MzIzWhgPMjAyMTA2MDQwOTUzMjNaMHcwPQYKKwYB
-// SIG // BAGEWQoEATEvMC0wCgIFAORitJMCAQAwCgIBAAICHHsC
-// SIG // Af8wBwIBAAICEmcwCgIFAORkBhMCAQAwNgYKKwYBBAGE
-// SIG // WQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAweh
-// SIG // IKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQCY
-// SIG // ousN436K7aadq4lBgT0F3tetvOpvcoc5L/B0EHZeb+rx
-// SIG // I6wYloEMcVPOaLiSMMf0VDjzUIG3/Q31iN/Cn40W86ZS
-// SIG // 86kC3qcwFL+McvgJrNZHpU0a9DUI0lHxJi36t0Z/GC7T
-// SIG // XkZpJzeAvJ1M+tpdnSRqvDvn9+wzi3HqdNzQEjGCAw0w
-// SIG // ggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
-// SIG // EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
-// SIG // HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
-// SIG // BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy
-// SIG // MDEwAhMzAAABPIv9ubM/R5f9AAAAAAE8MA0GCWCGSAFl
-// SIG // AwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN
-// SIG // AQkQAQQwLwYJKoZIhvcNAQkEMSIEIGcjizRAV34zL9eJ
-// SIG // b2RFHY1/tZslsyH/7JVBDzcmxfxYMIH6BgsqhkiG9w0B
-// SIG // CRACLzGB6jCB5zCB5DCBvQQgoEkCuk0kv8DnOqm31HwR
-// SIG // r+2IbD3xmIW4FSGK4SboWkYwgZgwgYCkfjB8MQswCQYD
-// SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
-// SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
-// SIG // IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
-// SIG // VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAATyL/bmzP0eX
-// SIG // /QAAAAABPDAiBCALHqq7hdXl2pLRNhwHbHSPjkcaMyvv
-// SIG // QZpBGWeSTRYazzANBgkqhkiG9w0BAQsFAASCAQBkJ1KB
-// SIG // vdXdE1TIb5f+SIDE5GixmmZqtTSyAZ8eeHco27axheRx
-// SIG // g3T8HtjDx0nfyKBsA6ukiu+IUXt/jQek6fjxPJLSCI4I
-// SIG // Gozyb6SXL2AI1f0Do0kKqTxiSgc3JiCJBiuI9y1jUBcX
-// SIG // Tuw06nrSkMzDhcAXg0OiPoSN/K7ZWSfMPCJrc+t+eT79
-// SIG // 9DpbzCXpGvVH/sLrp+hl+Wb9R3AlTQoh0aehcm3CiGBo
-// SIG // hIodIiPZsKm4ne/1Otr8HVUnXa52+SqNRbCuVClEvqVL
-// SIG // o8GQB7tdfTbLOrEzrdm9omSaXNYSNMsEDHNC04E6j1Ys
-// SIG // Oko6bU9skHp/7vp0NRkY5W6Fj4uu
-// SIG // End signature block
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/corebindings.c b/Examples/Complete/Camera/Blazor/wwwroot/_framework/corebindings.c
deleted file mode 100644
index a0263c2a8b..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/corebindings.c
+++ /dev/null
@@ -1,177 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-//JS funcs
-extern MonoObject* mono_wasm_invoke_js_with_args (int js_handle, MonoString *method, MonoArray *args, int *is_exception);
-extern MonoObject* mono_wasm_get_object_property (int js_handle, MonoString *propertyName, int *is_exception);
-extern MonoObject* mono_wasm_get_by_index (int js_handle, int property_index, int *is_exception);
-extern MonoObject* mono_wasm_set_object_property (int js_handle, MonoString *propertyName, MonoObject *value, int createIfNotExist, int hasOwnProperty, int *is_exception);
-extern MonoObject* mono_wasm_set_by_index (int js_handle, int property_index, MonoObject *value, int *is_exception);
-extern MonoObject* mono_wasm_get_global_object (MonoString *global_name, int *is_exception);
-extern void* mono_wasm_release_handle (int js_handle, int *is_exception);
-extern void* mono_wasm_release_object (int js_handle, int *is_exception);
-extern MonoObject* mono_wasm_new (MonoString *core_name, MonoArray *args, int *is_exception);
-extern int mono_wasm_bind_core_object (int js_handle, int gc_handle, int *is_exception);
-extern int mono_wasm_bind_host_object (int js_handle, int gc_handle, int *is_exception);
-extern MonoObject* mono_wasm_typed_array_to_array (int js_handle, int *is_exception);
-extern MonoObject* mono_wasm_typed_array_copy_to (int js_handle, int ptr, int begin, int end, int bytes_per_element, int *is_exception);
-extern MonoObject* mono_wasm_typed_array_from (int ptr, int begin, int end, int bytes_per_element, int type, int *is_exception);
-extern MonoObject* mono_wasm_typed_array_copy_from (int js_handle, int ptr, int begin, int end, int bytes_per_element, int *is_exception);
-
-// Compiles a JavaScript function from the function data passed.
-// Note: code snippet is not a function definition. Instead it must create and return a function instance.
-EM_JS(MonoObject*, compile_function, (int snippet_ptr, int len, int *is_exception), {
- try {
- var data = MONO.string_decoder.decode (snippet_ptr, snippet_ptr + len);
- var wrapper = '(function () { ' + data + ' })';
- var funcFactory = eval(wrapper);
- var func = funcFactory();
- if (typeof func !== 'function') {
- throw new Error('Code must return an instance of a JavaScript function. '
- + 'Please use `return` statement to return a function.');
- }
- setValue (is_exception, 0, "i32");
- return BINDING.js_to_mono_obj (func);
- }
- catch (e)
- {
- res = e.toString ();
- setValue (is_exception, 1, "i32");
- if (res === null || res === undefined)
- res = "unknown exception";
- return BINDING.js_to_mono_obj (res);
- }
-});
-
-static MonoObject*
-mono_wasm_compile_function (MonoString *str, int *is_exception)
-{
- if (str == NULL)
- return NULL;
- //char *native_val = mono_string_to_utf8 (str);
- mono_unichar2 *native_val = mono_string_chars (str);
- int native_len = mono_string_length (str) * 2;
-
- MonoObject* native_res = compile_function((int)native_val, native_len, is_exception);
- mono_free (native_val);
- if (native_res == NULL)
- return NULL;
- return native_res;
-}
-
-void core_initialize_internals ()
-{
- mono_add_internal_call ("Interop/Runtime::InvokeJSWithArgs", mono_wasm_invoke_js_with_args);
- mono_add_internal_call ("Interop/Runtime::GetObjectProperty", mono_wasm_get_object_property);
- mono_add_internal_call ("Interop/Runtime::GetByIndex", mono_wasm_get_by_index);
- mono_add_internal_call ("Interop/Runtime::SetObjectProperty", mono_wasm_set_object_property);
- mono_add_internal_call ("Interop/Runtime::SetByIndex", mono_wasm_set_by_index);
- mono_add_internal_call ("Interop/Runtime::GetGlobalObject", mono_wasm_get_global_object);
- mono_add_internal_call ("Interop/Runtime::ReleaseHandle", mono_wasm_release_handle);
- mono_add_internal_call ("Interop/Runtime::ReleaseObject", mono_wasm_release_object);
- mono_add_internal_call ("Interop/Runtime::BindCoreObject", mono_wasm_bind_core_object);
- mono_add_internal_call ("Interop/Runtime::BindHostObject", mono_wasm_bind_host_object);
- mono_add_internal_call ("Interop/Runtime::New", mono_wasm_new);
- mono_add_internal_call ("Interop/Runtime::TypedArrayToArray", mono_wasm_typed_array_to_array);
- mono_add_internal_call ("Interop/Runtime::TypedArrayCopyTo", mono_wasm_typed_array_copy_to);
- mono_add_internal_call ("Interop/Runtime::TypedArrayFrom", mono_wasm_typed_array_from);
- mono_add_internal_call ("Interop/Runtime::TypedArrayCopyFrom", mono_wasm_typed_array_copy_from);
- mono_add_internal_call ("Interop/Runtime::CompileFunction", mono_wasm_compile_function);
-
-}
-
-// Int8Array | int8_t | byte or SByte (signed byte)
-// Uint8Array | uint8_t | byte or Byte (unsigned byte)
-// Uint8ClampedArray| uint8_t | byte or Byte (unsigned byte)
-// Int16Array | int16_t | short (signed short)
-// Uint16Array | uint16_t | ushort (unsigned short)
-// Int32Array | int32_t | int (signed integer)
-// Uint32Array | uint32_t | uint (unsigned integer)
-// Float32Array | float | float
-// Float64Array | double | double
-// typed array marshalling
-#define MARSHAL_ARRAY_BYTE 10
-#define MARSHAL_ARRAY_UBYTE 11
-#define MARSHAL_ARRAY_UBYTE_C 12 // alias of MARSHAL_ARRAY_UBYTE
-#define MARSHAL_ARRAY_SHORT 13
-#define MARSHAL_ARRAY_USHORT 14
-#define MARSHAL_ARRAY_INT 15
-#define MARSHAL_ARRAY_UINT 16
-#define MARSHAL_ARRAY_FLOAT 17
-#define MARSHAL_ARRAY_DOUBLE 18
-
-EMSCRIPTEN_KEEPALIVE MonoArray*
-mono_wasm_typed_array_new (char *arr, int length, int size, int type)
-{
- MonoClass *typeClass = mono_get_byte_class(); // default is Byte
- switch (type) {
- case MARSHAL_ARRAY_BYTE:
- typeClass = mono_get_sbyte_class();
- break;
- case MARSHAL_ARRAY_SHORT:
- typeClass = mono_get_int16_class();
- break;
- case MARSHAL_ARRAY_USHORT:
- typeClass = mono_get_uint16_class();
- break;
- case MARSHAL_ARRAY_INT:
- typeClass = mono_get_int32_class();
- break;
- case MARSHAL_ARRAY_UINT:
- typeClass = mono_get_uint32_class();
- break;
- case MARSHAL_ARRAY_FLOAT:
- typeClass = mono_get_single_class();
- break;
- case MARSHAL_ARRAY_DOUBLE:
- typeClass = mono_get_double_class();
- break;
- }
-
- MonoArray *buffer;
-
- buffer = mono_array_new (mono_get_root_domain(), typeClass, length);
- memcpy(mono_array_addr_with_size(buffer, sizeof(char), 0), arr, length * size);
-
- return buffer;
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_unbox_enum (MonoObject *obj)
-{
- if (!obj)
- return 0;
-
- MonoType *type = mono_class_get_type (mono_object_get_class(obj));
-
- void *ptr = mono_object_unbox (obj);
- switch (mono_type_get_type(mono_type_get_underlying_type (type))) {
- case MONO_TYPE_I1:
- case MONO_TYPE_U1:
- return *(unsigned char*)ptr;
- case MONO_TYPE_I2:
- return *(short*)ptr;
- case MONO_TYPE_U2:
- return *(unsigned short*)ptr;
- case MONO_TYPE_I4:
- return *(int*)ptr;
- case MONO_TYPE_U4:
- return *(unsigned int*)ptr;
- // WASM doesn't support returning longs to JS
- // case MONO_TYPE_I8:
- // case MONO_TYPE_U8:
- default:
- printf ("Invalid type %d to mono_unbox_enum\n", mono_type_get_type(mono_type_get_underlying_type (type)));
- return 0;
- }
-}
-
-
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.6.0.0-preview.5.21301.5.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.6.0.0-preview.5.21301.5.js
deleted file mode 100644
index 5d37b02174..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.6.0.0-preview.5.21301.5.js
+++ /dev/null
@@ -1,288 +0,0 @@
-var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";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;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){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){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){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(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i>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 getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")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 HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");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&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.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}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}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}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}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 __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}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 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="dotnet.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}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={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Sa"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["Ta"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).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(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}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();return{}}var tempDouble;var tempI64;var ASM_CONSTS={100232:function($0,$1){var level=$0;var message=Module.UTF8ToString($1);var namespace="Debugger.Debug";if(MONO["logging"]&&MONO.logging["debugger"]){MONO.logging.debugger(level,message);return}console.debug("%s: %s",namespace,message)},102604:function($0,$1,$2){MONO.mono_wasm_add_typed_value("pointer",$0,{ptr_addr:$1,klass_addr:$2})},102719:function($0,$1,$2){MONO.mono_wasm_add_typed_value("array",$0,{objectId:$1,length:$2})},102831:function($0,$1,$2,$3,$4,$5){MONO.mono_wasm_add_typed_value($0,$1,{toString:$2,value_addr:$3,value_size:$4,klass:$5})},102953:function($0,$1,$2){MONO.mono_wasm_add_typed_value($0,$1,{toString:$2})},103391:function($0,$1,$2,$3,$4){MONO.mono_wasm_add_properties_var($0,{field_offset:$1,is_own:$2,attr:$3,owner_class:$4})},541329:function($0,$1){MONO.string_decoder.decode($0,$0+$1,true)},541702:function($0,$1,$2,$3){var str=MONO.string_decoder.decode($0,$0+$1);try{var res=eval(str);if(res===null||res==undefined)return 0;res=res.toString();setValue($2,0,"i32")}catch(e){res=e.toString();setValue($2,1,"i32");if(res===null||res===undefined)res="unknown exception";var stack=e.stack;if(stack){if(stack.startsWith(res))res=stack;else res+="\n"+stack}}var buff=Module._malloc((res.length+1)*2);stringToUTF16(res,buff,(res.length+1)*2);setValue($3,res.length,"i32");return buff},542256:function($0,$1,$2,$3,$4){var log_level=$0;var message=Module.UTF8ToString($1);var isFatal=$2;var domain=Module.UTF8ToString($3);var dataPtr=$4;if(MONO["logging"]&&MONO.logging["trace"]){MONO.logging.trace(domain,log_level,message,isFatal,dataPtr);return}if(isFatal)console.trace(message);switch(Module.UTF8ToString($0)){case"critical":case"error":console.error(message);break;case"warning":console.warn(message);break;case"message":console.log(message);break;case"info":console.info(message);break;case"debug":console.debug(message);break;default:console.log(message);break}}};function compile_function(snippet_ptr,len,is_exception){try{var data=MONO.string_decoder.decode(snippet_ptr,snippet_ptr+len);var wrapper="(function () { "+data+" })";var funcFactory=eval(wrapper);var func=funcFactory();if(typeof func!=="function"){throw new Error("Code must return an instance of a JavaScript function. "+"Please use `return` statement to return a function.")}setValue(is_exception,0,"i32");return BINDING.js_to_mono_obj(func)}catch(e){res=e.toString();setValue(is_exception,1,"i32");if(res===null||res===undefined)res="unknown exception";return BINDING.js_to_mono_obj(res)}}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){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};function ___cxa_allocate_exception(size){return _malloc(size+ExceptionInfoAttrs.SIZE)+ExceptionInfoAttrs.SIZE}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-ExceptionInfoAttrs.SIZE;this.set_type=function(type){HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]=type};this.get_type=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]!=0};this.init=function(type,destructor){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+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=prev-1;return prev===1}}function CatchInfo(ptr){this.free=function(){_free(this.ptr);this.ptr=0};this.set_base_ptr=function(basePtr){HEAP32[this.ptr>>2]=basePtr};this.get_base_ptr=function(){return HEAP32[this.ptr>>2]};this.set_adjusted_ptr=function(adjustedPtr){var ptrSize=4;HEAP32[this.ptr+ptrSize>>2]=adjustedPtr};this.get_adjusted_ptr=function(){var ptrSize=4;return HEAP32[this.ptr+ptrSize>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_exception_info().get_type());if(isPointer){return HEAP32[this.get_base_ptr()>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.get_base_ptr()};this.get_exception_info=function(){return new ExceptionInfo(this.get_base_ptr())};if(ptr===undefined){this.ptr=_malloc(8);this.set_adjusted_ptr(0)}else{this.ptr=ptr}}var exceptionCaught=[];function exception_addRef(info){info.add_ref()}var uncaughtExceptionCount=0;function ___cxa_begin_catch(ptr){var catchInfo=new CatchInfo(ptr);var info=catchInfo.get_exception_info();if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(catchInfo);exception_addRef(info);return catchInfo.get_exception_ptr()}var exceptionLast=0;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){wasmTable.get(destructor)(info.excPtr)}___cxa_free_exception(info.excPtr)}}function ___cxa_end_catch(){_setThrew(0);var catchInfo=exceptionCaught.pop();exception_decRef(catchInfo.get_exception_info());catchInfo.free();exceptionLast=0}function ___resumeException(catchInfoPtr){var catchInfo=new CatchInfo(catchInfoPtr);var ptr=catchInfo.get_base_ptr();if(!exceptionLast){exceptionLast=ptr}catchInfo.free();throw ptr}function ___cxa_find_matching_catch_3(){var thrown=exceptionLast;if(!thrown){setTempRet0(0|0);return 0|0}var info=new ExceptionInfo(thrown);var thrownType=info.get_type();var catchInfo=new CatchInfo;catchInfo.set_base_ptr(thrown);if(!thrownType){setTempRet0(0|0);return catchInfo.ptr|0}var typeArray=Array.prototype.slice.call(arguments);var stackTop=stackSave();var exceptionThrowBuf=stackAlloc(4);HEAP32[exceptionThrowBuf>>2]=thrown;for(var i=0;i>2];if(thrown!==adjusted){catchInfo.set_adjusted_ptr(adjusted)}setTempRet0(caughtType|0);return catchInfo.ptr|0}}stackRestore(stackTop);setTempRet0(thrownType|0);return catchInfo.ptr|0}function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(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:function(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)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(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.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(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 mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=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);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){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;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=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+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!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:function(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:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(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:function(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:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(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:function(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:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=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:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};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}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(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:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(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:function(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(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(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:function(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(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(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:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;ithis.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=function(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);if(typeof Uint8Array!="undefined")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(function(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(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function 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>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)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){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},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},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},get64:function(low,high){return low}};function ___sys_access(path,amode){try{path=SYSCALLS.getStr(path);return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fadvise64_64(fd,offset,len,advice){return 0}function ___sys_fallocate(fd,mode,off_low,off_high,len_low,len_high){try{var stream=SYSCALLS.getStreamFromFD(fd);var offset=SYSCALLS.get64(off_low,off_high);var len=SYSCALLS.get64(len_low,len_high);FS.allocate(stream,offset,len);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fchmod(fd,mode){try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14: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))abort(e);return-e.errno}}function ___sys_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))abort(e);return-e.errno}}function ___sys_ftruncate64(fd,zero,low,high){try{var length=SYSCALLS.get64(low,high);FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);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))abort(e);return-e.errno}}function ___sys_getpid(){return 42}function ___sys_getrusage(who,usage){try{_memset(usage,0,136);HEAP32[usage>>2]=1;HEAP32[usage+4>>2]=2;HEAP32[usage+8>>2]=3;HEAP32[usage+12>>2]=4;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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))abort(e);return-e.errno}}function ___sys_link(oldpath,newpath){return-34}function ___sys_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))abort(e);return-e.errno}}function ___sys_madvise1(addr,length,advice){return 0}function ___sys_mkdir(path,mode){try{path=SYSCALLS.getStr(path);return SYSCALLS.doMkdir(path,mode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%16384!==0){return-28}if((flags&32)!==0){ptr=_memalign(16384,len);if(!ptr)return-48;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-8;var res=FS.mmap(info,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}function ___sys_mmap2(addr,len,prot,flags,fd,off){try{return syscallMmap2(addr,len,prot,flags,fd,off)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_msync(addr,len,flags){try{var info=SYSCALLS.mappings[addr];if(!info)return 0;SYSCALLS.doMsync(addr,FS.getStream(info.fd),len,info.flags,0);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(stream){if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream)}SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_readlink(path,buf,bufsize){try{path=SYSCALLS.getStr(path);return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_rename(old_path,new_path){try{old_path=SYSCALLS.getStr(old_path);new_path=SYSCALLS.getStr(new_path);FS.rename(old_path,new_path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};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(protocol){assert(streaming==(protocol==6))}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=ENVIRONMENT_IS_NODE?{"protocol":subProtocols.toString()}: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(ERRNO_CODES.EHOSTUNREACH)}}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,flags){if(!flags.binary){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=ERRNO_CODES.ECONNREFUSED;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=ERRNO_CODES.ECONNREFUSED;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 ERRNO_CODES.EINVAL}},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>>0}function jstoi_q(str){return parseInt(str)}function __inet_pton6_raw(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.indexOf("::")===0){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>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255)}function __inet_ntop6_raw(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=__inet_ntop4_raw(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=__inet_ntop4_raw(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=__inet_ntop6_raw(addr);break;default:return{errno:5}}return{family:family,addr:addr,port:port}}function __write_sockaddr(sa,family,addr,port,addrlen){switch(family){case 2:addr=__inet_pton4_raw(addr);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=__inet_pton6_raw(addr);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);HEAP32[sa+4>>2]=0;HEAP32[sa+24>>2]=0;break;default:return 5}return 0}function ___sys_socketcall(call,socketvararg){try{SYSCALLS.varargs=socketvararg;var getSocketFromFD=function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(8);return socket};var getSocketAddress=function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};switch(call){case 1:{var domain=SYSCALLS.get(),type=SYSCALLS.get(),protocol=SYSCALLS.get();var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}case 2:{var sock=getSocketFromFD(),info=getSocketAddress();sock.sock_ops.bind(sock,info.addr,info.port);return 0}case 3:{var sock=getSocketFromFD(),info=getSocketAddress();sock.sock_ops.connect(sock,info.addr,info.port);return 0}case 4:{var sock=getSocketFromFD(),backlog=SYSCALLS.get();sock.sock_ops.listen(sock,backlog);return 0}case 5:{var sock=getSocketFromFD(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();var newsock=sock.sock_ops.accept(sock);if(addr){var errno=__write_sockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}case 6:{var sock=getSocketFromFD(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();var errno=__write_sockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);return 0}case 7:{var sock=getSocketFromFD(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();if(!sock.daddr){return-53}var errno=__write_sockaddr(addr,sock.family,DNS.lookup_name(sock.daddr),sock.dport,addrlen);return 0}case 11:{var sock=getSocketFromFD(),message=SYSCALLS.get(),length=SYSCALLS.get(),flags=SYSCALLS.get(),dest=getSocketAddress(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)}}case 12:{var sock=getSocketFromFD(),buf=SYSCALLS.get(),len=SYSCALLS.get(),flags=SYSCALLS.get(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=__write_sockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}case 14:{return-50}case 15:{var sock=getSocketFromFD(),level=SYSCALLS.get(),optname=SYSCALLS.get(),optval=SYSCALLS.get(),optlen=SYSCALLS.get();if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-50}case 16:{var sock=getSocketFromFD(),message=SYSCALLS.get(),flags=SYSCALLS.get();var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var addr,port;var name=HEAP32[message>>2];var namelen=HEAP32[message+4>>2];if(name){var info=__read_sockaddr(name,namelen);if(info.errno)return-info.errno;port=info.port;addr=DNS.lookup_addr(info.addr)||info.addr}var total=0;for(var i=0;i>2]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];for(var j=0;j>0]}}return sock.sock_ops.sendmsg(sock,view,0,total,addr,port)}case 17:{var sock=getSocketFromFD(),message=SYSCALLS.get(),flags=SYSCALLS.get();var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var total=0;for(var i=0;i>2]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAP32[message>>2];if(name){var errno=__write_sockaddr(name,sock.family,DNS.lookup_name(msg.addr),msg.port)}var bytesRead=0;var bytesRemaining=msg.buffer.byteLength;for(var i=0;bytesRemaining>0&&i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead);bytesRead+=length;bytesRemaining-=length}return bytesRead}default:{return-52}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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))abort(e);return-e.errno}}function ___sys_unlink(path){try{path=SYSCALLS.getStr(path);FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var seconds=HEAP32[times>>2];var nanoseconds=HEAP32[times+4>>2];var atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=8;seconds=HEAP32[times>>2];nanoseconds=HEAP32[times+4>>2];var mtime=seconds*1e3+nanoseconds/(1e3*1e3);FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){abort()}function _emscripten_get_now_res(){if(ENVIRONMENT_IS_NODE){return 1}else if(typeof dateNow!=="undefined"){return 1e3}else return 1e3}function _clock_getres(clk_id,res){var nsec;if(clk_id===0){nsec=1e3*1e3}else if(clk_id===1&&_emscripten_get_now_is_monotonic){nsec=_emscripten_get_now_res()}else{setErrNo(28);return-1}HEAP32[res>>2]=nsec/1e9|0;HEAP32[res+4>>2]=nsec;return 0}var DOTNETENTROPY={batchedQuotaMax:65536,getBatchedRandomValues:function(buffer,bufferLength){for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;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(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _environ_sizes_get(penviron_count,penviron_buf_size){try{var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}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))abort(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))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}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))abort(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))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _flock(fd,operation){return 0}var GAI_ERRNO_MESSAGES={};function _gai_strerror(val){var buflen=256;if(!_gai_strerror.buffer){_gai_strerror.buffer=_malloc(buflen);GAI_ERRNO_MESSAGES["0"]="Success";GAI_ERRNO_MESSAGES[""+-1]="Invalid value for 'ai_flags' field";GAI_ERRNO_MESSAGES[""+-2]="NAME or SERVICE is unknown";GAI_ERRNO_MESSAGES[""+-3]="Temporary failure in name resolution";GAI_ERRNO_MESSAGES[""+-4]="Non-recoverable failure in name res";GAI_ERRNO_MESSAGES[""+-6]="'ai_family' not supported";GAI_ERRNO_MESSAGES[""+-7]="'ai_socktype' not supported";GAI_ERRNO_MESSAGES[""+-8]="SERVICE not supported for 'ai_socktype'";GAI_ERRNO_MESSAGES[""+-10]="Memory allocation failure";GAI_ERRNO_MESSAGES[""+-11]="System error returned in 'errno'";GAI_ERRNO_MESSAGES[""+-12]="Argument buffer overflow"}var msg="Unknown error";if(val in GAI_ERRNO_MESSAGES){if(GAI_ERRNO_MESSAGES[val].length>buflen-1){msg="Message too long"}else{msg=GAI_ERRNO_MESSAGES[val]}}writeAsciiToMemory(msg,_gai_strerror.buffer);return _gai_strerror.buffer}function _getTempRet0(){return getTempRet0()|0}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _gmtime_r(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();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;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;if(!_gmtime_r.GMTString)_gmtime_r.GMTString=allocateUTF8("GMT");HEAP32[tmPtr+40>>2]=_gmtime_r.GMTString;return tmPtr}function _llvm_eh_typeid_for(type){return type}function _tzset(){if(_tzset.called)return;_tzset.called=true;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[__get_timezone()>>2]=stdTimezoneOffset*60;HEAP32[__get_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;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();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;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}var MONO={pump_count:0,timeout_queue:[],_vt_stack:[],mono_wasm_runtime_is_ready:false,mono_wasm_ignore_pdb_load_errors:true,_id_table:{},pump_message:function(){if(!this.mono_background_exec)this.mono_background_exec=Module.cwrap("mono_background_exec",null);while(MONO.timeout_queue.length>0){--MONO.pump_count;MONO.timeout_queue.shift()()}while(MONO.pump_count>0){--MONO.pump_count;this.mono_background_exec()}},export_functions:function(module){module["pump_message"]=MONO.pump_message.bind(MONO);module["mono_load_runtime_and_bcl"]=MONO.mono_load_runtime_and_bcl.bind(MONO);module["mono_load_runtime_and_bcl_args"]=MONO.mono_load_runtime_and_bcl_args.bind(MONO);module["mono_wasm_load_bytes_into_heap"]=MONO.mono_wasm_load_bytes_into_heap.bind(MONO);module["mono_wasm_load_icu_data"]=MONO.mono_wasm_load_icu_data.bind(MONO);module["mono_wasm_get_icudt_name"]=MONO.mono_wasm_get_icudt_name.bind(MONO);module["mono_wasm_globalization_init"]=MONO.mono_wasm_globalization_init.bind(MONO);module["mono_wasm_get_loaded_files"]=MONO.mono_wasm_get_loaded_files.bind(MONO);module["mono_wasm_new_root_buffer"]=MONO.mono_wasm_new_root_buffer.bind(MONO);module["mono_wasm_new_root_buffer_from_pointer"]=MONO.mono_wasm_new_root_buffer_from_pointer.bind(MONO);module["mono_wasm_new_root"]=MONO.mono_wasm_new_root.bind(MONO);module["mono_wasm_new_roots"]=MONO.mono_wasm_new_roots.bind(MONO);module["mono_wasm_release_roots"]=MONO.mono_wasm_release_roots.bind(MONO)},_base64Converter:{_base64Table:["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","+","/"],_makeByteReader:function(bytes,index,count){var position=typeof index==="number"?index:0;var endpoint;if(typeof count==="number")endpoint=position+count;else endpoint=bytes.length-position;var result={read:function(){if(position>=endpoint)return false;var nextByte=bytes[position];position+=1;return nextByte}};Object.defineProperty(result,"eof",{get:function(){return position>=endpoint},configurable:true,enumerable:true});return result},toBase64StringImpl:function(inArray,offset,length){var reader=this._makeByteReader(inArray,offset,length);var result="";var ch1=0,ch2=0,ch3=0,bits=0,equalsCount=0,sum=0;var mask1=(1<<24)-1,mask2=(1<<18)-1,mask3=(1<<12)-1,mask4=(1<<6)-1;var shift1=18,shift2=12,shift3=6,shift4=0;while(true){ch1=reader.read();ch2=reader.read();ch3=reader.read();if(ch1===false)break;if(ch2===false){ch2=0;equalsCount+=1}if(ch3===false){ch3=0;equalsCount+=1}sum=ch1<<16|ch2<<8|ch3<<0;bits=(sum&mask1)>>shift1;result+=this._base64Table[bits];bits=(sum&mask2)>>shift2;result+=this._base64Table[bits];if(equalsCount<2){bits=(sum&mask3)>>shift3;result+=this._base64Table[bits]}if(equalsCount===2){result+="=="}else if(equalsCount===1){result+="="}else{bits=(sum&mask4)>>shift4;result+=this._base64Table[bits]}}return result}},_mono_wasm_root_buffer_prototype:{_throw_index_out_of_range:function(){throw new Error("index out of range")},_check_in_range:function(index){if(index>=this.__count||index<0)this._throw_index_out_of_range()},get_address:function(index){this._check_in_range(index);return this.__offset+index*4},get_address_32:function(index){this._check_in_range(index);return this.__offset32+index},get:function(index){this._check_in_range(index);return Module.HEAP32[this.get_address_32(index)]},set:function(index,value){Module.HEAP32[this.get_address_32(index)]=value;return value},_unsafe_get:function(index){return Module.HEAP32[this.__offset32+index]},_unsafe_set:function(index,value){Module.HEAP32[this.__offset32+index]=value},clear:function(){if(this.__offset)MONO._zero_region(this.__offset,this.__count*4)},release:function(){if(this.__offset&&this.__ownsAllocation){MONO.mono_wasm_deregister_root(this.__offset);MONO._zero_region(this.__offset,this.__count*4);Module._free(this.__offset)}this.__handle=this.__offset=this.__count=this.__offset32=0},toString:function(){return"[root buffer @"+this.get_address(0)+", size "+this.__count+"]"}},_scratch_root_buffer:null,_scratch_root_free_indices:null,_scratch_root_free_indices_count:0,_scratch_root_free_instances:[],_mono_wasm_root_prototype:{get_address:function(){return this.__buffer.get_address(this.__index)},get_address_32:function(){return this.__buffer.get_address_32(this.__index)},get:function(){var result=this.__buffer._unsafe_get(this.__index);return result},set:function(value){this.__buffer._unsafe_set(this.__index,value);return value},valueOf:function(){return this.get()},clear:function(){this.set(0)},release:function(){const maxPooledInstances=128;if(MONO._scratch_root_free_instances.length>maxPooledInstances){MONO._mono_wasm_release_scratch_index(this.__index);this.__buffer=0;this.__index=0}else{this.set(0);MONO._scratch_root_free_instances.push(this)}},toString:function(){return"[root @"+this.get_address()+"]"}},_mono_wasm_release_scratch_index:function(index){if(index===undefined)return;this._scratch_root_buffer.set(index,0);this._scratch_root_free_indices[this._scratch_root_free_indices_count]=index;this._scratch_root_free_indices_count++},_mono_wasm_claim_scratch_index:function(){if(!this._scratch_root_buffer){const maxScratchRoots=8192;this._scratch_root_buffer=this.mono_wasm_new_root_buffer(maxScratchRoots,"js roots");this._scratch_root_free_indices=new Int32Array(maxScratchRoots);this._scratch_root_free_indices_count=maxScratchRoots;for(var i=0;i= 1");capacity=capacity|0;var capacityBytes=capacity*4;var offset=Module._malloc(capacityBytes);if(offset%4!==0)throw new Error("Malloc returned an unaligned offset");this._zero_region(offset,capacityBytes);var result=Object.create(this._mono_wasm_root_buffer_prototype);result.__offset=offset;result.__offset32=offset/4|0;result.__count=capacity;result.length=capacity;result.__handle=this.mono_wasm_register_root(offset,capacityBytes,msg||0);result.__ownsAllocation=true;return result},mono_wasm_new_root_buffer_from_pointer:function(offset,capacity,msg){if(!this.mono_wasm_register_root||!this.mono_wasm_deregister_root){this.mono_wasm_register_root=Module.cwrap("mono_wasm_register_root","number",["number","number","string"]);this.mono_wasm_deregister_root=Module.cwrap("mono_wasm_deregister_root",null,["number"])}if(capacity<=0)throw new Error("capacity >= 1");capacity=capacity|0;var capacityBytes=capacity*4;if(offset%4!==0)throw new Error("Unaligned offset");this._zero_region(offset,capacityBytes);var result=Object.create(this._mono_wasm_root_buffer_prototype);result.__offset=offset;result.__offset32=offset/4|0;result.__count=capacity;result.length=capacity;result.__handle=this.mono_wasm_register_root(offset,capacityBytes,msg||0);result.__ownsAllocation=false;return result},mono_wasm_new_root:function(value){var result;if(this._scratch_root_free_instances.length>0){result=this._scratch_root_free_instances.pop()}else{var index=this._mono_wasm_claim_scratch_index();var buffer=this._scratch_root_buffer;result=Object.create(this._mono_wasm_root_prototype);result.__buffer=buffer;result.__index=index}if(value!==undefined){if(typeof value!=="number")throw new Error("value must be an address in the managed heap");result.set(value)}else{result.set(0)}return result},mono_wasm_new_roots:function(count_or_values){var result;if(Array.isArray(count_or_values)){result=new Array(count_or_values.length);for(var i=0;i0){result=new Array(count_or_values);for(var i=0;i",description:""};i++}out_list.push(o)}return out_list},_filter_automatic_properties:function(props,accessors_only=false){let getters={};let all_fields_except_backing_fields={};let backing_fields={};props.forEach(p=>{if(p.name===undefined){console.debug(`Bug: Found a member with no name. Skipping it. p: ${JSON.stringify(p)}`);return}if(p.name.endsWith("k__BackingField")){const auto_prop_name=p.name.replace("k__BackingField","").replace("<","").replace(">","");if(!(auto_prop_name in backing_fields))backing_fields[auto_prop_name]=Object.assign(p,{name:auto_prop_name})}else if(p.get!==undefined){if(!(p.name in getters)&&!(p.name in all_fields_except_backing_fields))getters[p.name]=p}else if(!(p.name in all_fields_except_backing_fields)){all_fields_except_backing_fields[p.name]=p}});Object.values(backing_fields).forEach(backing_field=>{const auto_prop_name=backing_field.name;const getter=getters[auto_prop_name];if(getter===undefined){return}if(auto_prop_name in all_fields_except_backing_fields){delete getters[auto_prop_name]}else if(getter.__args.owner_class===backing_field.__args.owner_class){all_fields_except_backing_fields[auto_prop_name]=backing_field;delete getters[auto_prop_name]}});if(accessors_only)return Object.values(getters);return Object.values(all_fields_except_backing_fields).concat(Object.values(getters))},_parse_object_id:function(idStr,throwOnError=false){if(idStr===undefined||idStr==""||!idStr.startsWith("dotnet:")){if(throwOnError)throw new Error(`Invalid id: ${idStr}`);return undefined}const[,scheme,...rest]=idStr.split(":");let res={scheme:scheme,value:rest.join(":"),idStr:idStr,o:{}};try{res.o=JSON.parse(res.value)}catch(e){}return res},_resolve_member_by_name:function(base_object,base_name,expr_parts){if(base_object===undefined||base_object.value===undefined)throw new Error(`Bug: base_object is undefined`);if(base_object.value.type==="object"&&base_object.value.subtype==="null")throw new ReferenceError(`Null reference: ${base_name} is null`);if(base_object.value.type!=="object")throw new ReferenceError(`'.' is only supported on non-primitive types. Failed on '${base_name}'`);if(expr_parts.length==0)throw new Error(`Invalid member access expression`);const root=expr_parts[0];const props=this.mono_wasm_get_details(base_object.value.objectId,{});let resObject=props.find(l=>l.name==root);if(resObject!==undefined){if(resObject.value===undefined&&resObject.get!==undefined)resObject=this._invoke_getter(base_object.value.objectId,root)}if(resObject===undefined||expr_parts.length==1)return resObject;else{expr_parts.shift();return this._resolve_member_by_name(resObject,root,expr_parts)}},mono_wasm_eval_member_access:function(scope,var_list,rootObjectId,expr){if(expr===undefined||expr.length==0)throw new Error(`expression argument required`);let parts=expr.split(".");if(parts.length==0)throw new Error(`Invalid member access expression: ${expr}`);const root=parts[0];const locals=this.mono_wasm_get_variables(scope,var_list);let rootObject=locals.find(l=>l.name===root);if(rootObject===undefined){const thisObject=locals.find(l=>l.name=="this");if(thisObject===undefined)throw new ReferenceError(`Could not find ${root} in locals, and no 'this' found.`);const thisProps=this.mono_wasm_get_details(thisObject.value.objectId,{});rootObject=thisProps.find(tp=>tp.name==root);if(rootObject===undefined)throw new ReferenceError(`Could not find ${root} in locals, or in 'this'`);if(rootObject.value===undefined&&rootObject.get!==undefined)rootObject=this._invoke_getter(thisObject.value.objectId,root)}parts.shift();if(parts.length==0)return rootObject;if(rootObject===undefined||rootObject.value===undefined)throw new Error(`Could not get a value for ${root}`);return this._resolve_member_by_name(rootObject,root,parts)},mono_wasm_set_variable_value:function(scope,index,name,newValue){console.debug(">> mono_wasm_set_variable_value "+name+" - "+newValue);var ret=this._c_fn_table.mono_wasm_set_variable_on_frame_wrapper(scope,index,name,newValue);if(ret==false)throw new Error(`Could not get a value for ${name}`);return ret},_get_vt_properties:function(id,args={}){let entry=this._get_id_props(id.idStr);if(entry===undefined||entry.members===undefined){if(!isNaN(id.o.containerId)){this._get_object_properties(id.o.containerId,{expandValueTypes:true})}else if(!isNaN(id.o.arrayId))this._get_array_values(id,Number(id.o.arrayIdx),1,true);else throw new Error(`Invalid valuetype id (${id.idStr}). Can't get properties for it.`)}entry=this._get_id_props(id.idStr);if(entry!==undefined&&entry.members!==undefined){if(args.accessorPropertiesOnly===true)return entry.accessors;return entry.members}throw new Error(`Unknown valuetype id: ${id.idStr}. Failed to get properties for it.`)},_assign_vt_ids:function(vars,getIdArgs){vars.forEach((v,i)=>{const value=v.value;if(value===undefined||!value.isValueType)return;if(value.objectId!==undefined)throw new Error(`Bug: Trying to assign valuetype id, but the var already has one: ${v}`);value.objectId=this._new_or_add_id_props({scheme:"valuetype",idArgs:getIdArgs(v,i),props:value._props});delete value._props});return vars},mono_wasm_get_variables:function(scope,var_list){const numBytes=var_list.length*Int32Array.BYTES_PER_ELEMENT;const ptr=Module._malloc(numBytes);let heapBytes=new Int32Array(Module.HEAP32.buffer,ptr,numBytes);for(let i=0;i({containerId:this._async_method_objectId,fieldOffset:v.fieldOffset}));for(let i in res){const res_name=res[i].name;if(this._async_method_objectId!=0){if(res_name!==undefined&&res_name.indexOf(">")>0){res[i].name=res_name.substring(1,res_name.indexOf(">"))}}else if(res_name===undefined&&var_list[i]!==undefined){res[i].name=var_list[i].name}}this._post_process_details(res);return res},_get_properties_args_to_gpflags:function(args){let gpflags=0;if(args.expandValueTypes)gpflags|=4;return gpflags},_get_object_properties:function(idNum,args={}){let gpflags=this._get_properties_args_to_gpflags(args);let{res_ok:res_ok,res:res}=this.mono_wasm_get_object_properties_info(idNum,gpflags);if(!res_ok)throw new Error(`Failed to get properties for ${idNum}`);res=MONO._filter_automatic_properties(res,args.accessorPropertiesOnly===true);res=this._assign_vt_ids(res,v=>({containerId:idNum,fieldOffset:v.fieldOffset}));res=this._post_process_details(res);return res},_get_array_values:function(id,startIdx=0,count=-1,expandValueTypes=false){if(isNaN(id.o.arrayId)||isNaN(startIdx))throw new Error(`Invalid array id: ${id.idStr}`);let gpflags=this._get_properties_args_to_gpflags({expandValueTypes:expandValueTypes});let{res_ok:res_ok,res:res}=this.mono_wasm_get_array_values_info(id.o.arrayId,startIdx,count,gpflags);if(!res_ok)throw new Error(`Failed to get properties for array id ${id.idStr}`);res=this._assign_vt_ids(res,(_,i)=>({arrayId:id.o.arrayId,arrayIdx:Number(startIdx)+i}));for(let i=0;i0)this._extract_and_cache_value_types(details);details.forEach(d=>delete d.__args);return details},_next_id:function(){return++this._next_id_var},_extract_and_cache_value_types:function(var_list){if(var_list==undefined||!Array.isArray(var_list)||var_list.length==0)return var_list;for(let i in var_list){let value=var_list[i].value;if(value===undefined)continue;if(value.objectId!==undefined&&value.objectId.startsWith("dotnet:pointer:")){let ptr_args=this._get_id_props(value.objectId);if(ptr_args===undefined)throw new Error(`Bug: Expected to find an entry for pointer id: ${value.objectId}`);ptr_args.varName=ptr_args.varName||var_list[i].name}if(value.type!="object"||value.isValueType!=true||value.expanded!=true)continue;if(value.members===undefined){continue}value.objectId=value.objectId||this._new_or_add_id_props({scheme:"valuetype"});this._extract_and_cache_value_types(value.members);const accessors=value.members.filter(m=>m.get!==undefined);const new_props=Object.assign({members:value.members,accessors:accessors},value.__extra_vt_props);this._new_or_add_id_props({objectId:value.objectId,props:new_props});delete value.members;delete value.__extra_vt_props}return var_list},_get_cfo_res_details:function(objectId,args){if(!(objectId in this._call_function_res_cache))throw new Error(`Could not find any object with id ${objectId}`);const real_obj=this._call_function_res_cache[objectId];const descriptors=Object.getOwnPropertyDescriptors(real_obj);if(args.accessorPropertiesOnly){Object.keys(descriptors).forEach(k=>{if(descriptors[k].get===undefined)Reflect.deleteProperty(descriptors,k)})}let res_details=[];Object.keys(descriptors).forEach(k=>{let new_obj;let prop_desc=descriptors[k];if(typeof prop_desc.value=="object"){new_obj=Object.assign({name:k},prop_desc)}else if(prop_desc.value!==undefined){new_obj={name:k,value:Object.assign({type:typeof prop_desc.value,description:""+prop_desc.value},prop_desc)}}else if(prop_desc.get!==undefined){new_obj={name:k,get:{className:"Function",description:`get ${k} () {}`,type:"function"}}}else{new_obj={name:k,value:{type:"symbol",value:"",description:""}}}res_details.push(new_obj)});return{__value_as_json_string__:JSON.stringify(res_details)}},_new_or_add_id_props:function({scheme:scheme=undefined,objectId:objectId=undefined,idArgs:idArgs={},props:props={}}){if(scheme===undefined&&objectId===undefined)throw new Error(`Either scheme or objectId must be given`);if(scheme!==undefined&&objectId!==undefined)throw new Error(`Both scheme, and objectId cannot be given`);if(objectId!==undefined&&Object.entries(idArgs).length>0)throw new Error(`Both objectId, and idArgs cannot be given`);if(Object.entries(idArgs).length==0){idArgs.num=this._next_id()}let idStr;if(objectId!==undefined){idStr=objectId;const old_props=this._id_table[idStr];if(old_props===undefined)throw new Error(`ObjectId not found in the id table: ${idStr}`);this._id_table[idStr]=Object.assign(old_props,props)}else{idStr=`dotnet:${scheme}:${JSON.stringify(idArgs)}`;this._id_table[idStr]=props}return idStr},_get_id_props:function(objectId){return this._id_table[objectId]},_get_deref_ptr_value:function(objectId){const ptr_args=this._get_id_props(objectId);if(ptr_args===undefined)throw new Error(`Unknown pointer id: ${objectId}`);if(ptr_args.ptr_addr==0||ptr_args.klass_addr==0)throw new Error(`Both ptr_addr and klass_addr need to be non-zero, to dereference a pointer. objectId: ${objectId}`);const value_addr=new DataView(Module.HEAPU8.buffer).getUint32(ptr_args.ptr_addr,true);let{res_ok:res_ok,res:res}=this.mono_wasm_get_deref_ptr_value_info(value_addr,ptr_args.klass_addr);if(!res_ok)throw new Error(`Failed to dereference pointer ${objectId}`);if(res.length>0){if(ptr_args.varName===undefined)throw new Error(`Bug: no varName found for the pointer. objectId: ${objectId}`);res[0].name=`*${ptr_args.varName}`}res=this._post_process_details(res);return res},mono_wasm_get_details:function(objectId,args={}){let id=this._parse_object_id(objectId,true);switch(id.scheme){case"object":{if(isNaN(id.value))throw new Error(`Invalid objectId: ${objectId}. Expected a numeric id.`);args.expandValueTypes=false;return this._get_object_properties(id.value,args)}case"array":return this._get_array_values(id);case"valuetype":return this._get_vt_properties(id,args);case"cfo_res":return this._get_cfo_res_details(objectId,args);case"pointer":{return this._get_deref_ptr_value(objectId)}default:throw new Error(`Unknown object id format: ${objectId}`)}},_cache_call_function_res:function(obj){const id=`dotnet:cfo_res:${this._next_call_function_res_id++}`;this._call_function_res_cache[id]=obj;return id},mono_wasm_release_object:function(objectId){if(objectId in this._cache_call_function_res)delete this._cache_call_function_res[objectId]},_invoke_getter:function(objectIdStr,name){const id=this._parse_object_id(objectIdStr);if(id===undefined)throw new Error(`Invalid object id: ${objectIdStr}`);let getter_res;if(id.scheme=="object"){if(isNaN(id.o)||id.o<0)throw new Error(`Invalid object id: ${objectIdStr}`);let{res_ok:res_ok,res:res}=this.mono_wasm_invoke_getter_on_object_info(id.o,name);if(!res_ok)throw new Error(`Invoking getter on ${objectIdStr} failed`);getter_res=res}else if(id.scheme=="valuetype"){const id_props=this._get_id_props(objectIdStr);if(id_props===undefined)throw new Error(`Unknown valuetype id: ${objectIdStr}`);if(typeof id_props.value64!=="string"||isNaN(id_props.klass))throw new Error(`Bug: Cannot invoke getter on ${objectIdStr}, because of missing or invalid klass/value64 fields. idProps: ${JSON.stringify(id_props)}`);const dataPtr=Module._malloc(id_props.value64.length);const dataHeap=new Uint8Array(Module.HEAPU8.buffer,dataPtr,id_props.value64.length);dataHeap.set(new Uint8Array(this._base64_to_uint8(id_props.value64)));let{res_ok:res_ok,res:res}=this.mono_wasm_invoke_getter_on_value_info(dataHeap.byteOffset,id_props.klass,name);Module._free(dataHeap.byteOffset);if(!res_ok){console.debug(`Invoking getter on valuetype ${objectIdStr}, with props: ${JSON.stringify(id_props)} failed`);throw new Error(`Invoking getter on valuetype ${objectIdStr} failed`)}getter_res=res}else{throw new Error(`Only object, and valuetypes supported for getters, id: ${objectIdStr}`)}getter_res=MONO._post_process_details(getter_res);return getter_res.length>0?getter_res[0]:{}},_set_value_on_object:function(objectIdStr,name,newvalue){const id=this._parse_object_id(objectIdStr);if(id===undefined)throw new Error(`Invalid object id: ${objectIdStr}`);let setter_res;if(id.scheme=="object"){if(isNaN(id.o)||id.o<0)throw new Error(`Invalid object id: ${objectIdStr}`);var ret=this._c_fn_table.mono_wasm_set_value_on_object_wrapper(id.o,name,newvalue);if(!ret)throw new Error(`Invoking setter on ${objectIdStr} failed`);setter_res=ret}else throw new Error(`Only object is supported for setters, id: ${objectIdStr}`);return setter_res},_create_proxy_from_object_id:function(objectId){const details=this.mono_wasm_get_details(objectId);if(objectId.startsWith("dotnet:array:"))return details.map(p=>p.value);let proxy={};Object.keys(details).forEach(p=>{var prop=details[p];if(prop.get!==undefined){Object.defineProperty(proxy,prop.name,{get(){return MONO._invoke_getter(objectId,prop.name)}})}else{proxy[prop.name]=prop.value}});const handler1={set(obj,prop,newValue){return MONO._set_value_on_object(objectId,prop,newValue.toString())}};return new Proxy(proxy,handler1)},mono_wasm_call_function_on:function(request){if(request.arguments!=undefined&&!Array.isArray(request.arguments))throw new Error(`"arguments" should be an array, but was ${request.arguments}`);const objId=request.objectId;let proxy;if(objId.startsWith("dotnet:cfo_res:")){if(objId in this._call_function_res_cache)proxy=this._call_function_res_cache[objId];else throw new Error(`Unknown object id ${objId}`)}else{proxy=this._create_proxy_from_object_id(objId)}const fn_args=request.arguments!=undefined?request.arguments.map(a=>JSON.stringify(a.value)):[];const fn_eval_str=`var fn = ${request.functionDeclaration}; fn.call (proxy, ...[${fn_args}]);`;const fn_res=eval(fn_eval_str);if(fn_res===undefined)return{type:"undefined"};if(fn_res===null||fn_res.subtype==="null"&&fn_res.value===undefined)return fn_res;if(Object(fn_res)!==fn_res)return fn_res;if(fn_res.value!==undefined&&Object(fn_res.value.value)!==fn_res.value.value)return fn_res.value;if(request.returnByValue)return{type:"object",value:fn_res};const fn_res_id=this._cache_call_function_res(fn_res);if(Object.getPrototypeOf(fn_res)==Array.prototype){return{type:"object",subtype:"array",className:"Array",description:`Array(${fn_res.length})`,objectId:fn_res_id}}else{return{type:"object",className:"Object",description:"Object",objectId:fn_res_id}}},_clear_per_step_state:function(){this._next_id_var=0;this._id_table={}},mono_wasm_debugger_resume:function(){this._clear_per_step_state()},mono_wasm_start_single_stepping:function(kind){console.debug(">> mono_wasm_start_single_stepping "+kind);if(!this.mono_wasm_setup_single_step)this.mono_wasm_setup_single_step=Module.cwrap("mono_wasm_setup_single_step","number",["number"]);this._clear_per_step_state();return this.mono_wasm_setup_single_step(kind)},mono_wasm_set_pause_on_exceptions:function(state){if(!this.mono_wasm_pause_on_exceptions)this.mono_wasm_pause_on_exceptions=Module.cwrap("mono_wasm_pause_on_exceptions","number",["number"]);var state_enum=0;switch(state){case"uncaught":state_enum=1;break;case"all":state_enum=2;break}return this.mono_wasm_pause_on_exceptions(state_enum)},mono_wasm_detach_debugger:function(){if(!this.mono_wasm_set_is_debugger_attached)this.mono_wasm_set_is_debugger_attached=Module.cwrap("mono_wasm_set_is_debugger_attached","void",["bool"]);this.mono_wasm_set_is_debugger_attached(false)},_register_c_fn:function(name,...args){Object.defineProperty(this._c_fn_table,name+"_wrapper",{value:Module.cwrap(name,...args)})},_register_c_var_fn:function(name,ret_type,params){if(ret_type!=="bool")throw new Error(`Bug: Expected a C function signature that returns bool`);this._register_c_fn(name,ret_type,params);Object.defineProperty(this,name+"_info",{value:function(...args){MONO.var_info=[];const res_ok=MONO._c_fn_table[name+"_wrapper"](...args);let res=MONO.var_info;MONO.var_info=[];if(res_ok){res=this._fixup_name_value_objects(res);return{res_ok:res_ok,res:res}}return{res_ok:res_ok,res:undefined}}})},mono_wasm_runtime_ready:function(){this.mono_wasm_runtime_is_ready=true;this._clear_per_step_state();this._next_call_function_res_id=0;this._call_function_res_cache={};this._c_fn_table={};this._register_c_var_fn("mono_wasm_get_object_properties","bool",["number","number"]);this._register_c_var_fn("mono_wasm_get_array_values","bool",["number","number","number","number"]);this._register_c_var_fn("mono_wasm_invoke_getter_on_object","bool",["number","string"]);this._register_c_var_fn("mono_wasm_invoke_getter_on_value","bool",["number","number","string"]);this._register_c_var_fn("mono_wasm_get_local_vars","bool",["number","number","number"]);this._register_c_var_fn("mono_wasm_get_deref_ptr_value","bool",["number","number"]);this._register_c_fn("mono_wasm_set_value_on_object","bool",["number","string","string"]);this._register_c_fn("mono_wasm_set_variable_on_frame","bool",["number","number","string","string"]);if(globalThis.dotnetDebugger)debugger;else console.debug("mono_wasm_runtime_ready","fe00e07a-5519-4dfe-b35a-f867dbaf2e28")},mono_wasm_set_breakpoint:function(assembly,method_token,il_offset){if(!this.mono_wasm_set_bp)this.mono_wasm_set_bp=Module.cwrap("mono_wasm_set_breakpoint","number",["string","number","number"]);return this.mono_wasm_set_bp(assembly,method_token,il_offset)},mono_wasm_remove_breakpoint:function(breakpoint_id){if(!this.mono_wasm_del_bp)this.mono_wasm_del_bp=Module.cwrap("mono_wasm_remove_breakpoint","number",["number"]);return this.mono_wasm_del_bp(breakpoint_id)},mono_wasm_setenv:function(name,value){if(!this.wasm_setenv)this.wasm_setenv=Module.cwrap("mono_wasm_setenv",null,["string","string"]);this.wasm_setenv(name,value)},mono_wasm_set_runtime_options:function(options){if(!this.wasm_parse_runtime_options)this.wasm_parse_runtime_options=Module.cwrap("mono_wasm_parse_runtime_options",null,["number","number"]);var argv=Module._malloc(options.length*4);var wasm_strdup=Module.cwrap("mono_wasm_strdup","number",["string"]);let aindex=0;for(var i=0;i0?virtualName.substr(0,lastSlash):null;var fileName=lastSlash>0?virtualName.substr(lastSlash+1):virtualName;if(fileName.startsWith("/"))fileName=fileName.substr(1);if(parentDirectory){if(ctx.tracing)console.log("MONO_WASM: Creating directory '"+parentDirectory+"'");var pathRet=ctx.createPath("/",parentDirectory,true,true)}else{parentDirectory="/"}if(ctx.tracing)console.log("MONO_WASM: Creating file '"+fileName+"' in directory '"+parentDirectory+"'");if(!this.mono_wasm_load_data_archive(bytes,parentDirectory)){var fileRet=ctx.createDataFile(parentDirectory,fileName,bytes,true,true,true)}break;default:throw new Error("Unrecognized asset behavior:",asset.behavior,"for asset",asset.name)}if(asset.behavior==="assembly"){var hasPpdb=ctx.mono_wasm_add_assembly(virtualName,offset,bytes.length);if(!hasPpdb){var index=ctx.loaded_files.findIndex(element=>element.file==virtualName);ctx.loaded_files.splice(index,1)}}else if(asset.behavior==="icu"){if(this.mono_wasm_load_icu_data(offset))ctx.num_icu_assets_loaded_successfully+=1;else console.error("Error loading ICU asset",asset.name)}else if(asset.behavior==="resource"){ctx.mono_wasm_add_satellite_assembly(virtualName,asset.culture,offset,bytes.length)}},mono_load_runtime_and_bcl:function(unused_vfs_prefix,deploy_prefix,debug_level,file_list,loaded_cb,fetch_file_cb){var args={fetch_file_cb:fetch_file_cb,loaded_cb:loaded_cb,debug_level:debug_level,assembly_root:deploy_prefix,assets:[]};for(var i=0;iloaded_files_with_debug_info.push(value.url));MONO.loaded_files=loaded_files_with_debug_info;if(ctx.tracing){console.log("MONO_WASM: loaded_assets: "+JSON.stringify(ctx.loaded_assets));console.log("MONO_WASM: loaded_files: "+JSON.stringify(ctx.loaded_files))}var load_runtime=Module.cwrap("mono_wasm_load_runtime",null,["string","number"]);console.debug("MONO_WASM: Initializing mono runtime");this.mono_wasm_globalization_init(args.globalization_mode);if(ENVIRONMENT_IS_SHELL||ENVIRONMENT_IS_NODE){try{load_runtime("unused",args.debug_level)}catch(ex){print("MONO_WASM: load_runtime () failed: "+ex);print("MONO_WASM: Stacktrace: \n");print(ex.stack);var wasm_exit=Module.cwrap("mono_wasm_exit",null,["number"]);wasm_exit(1)}}else{load_runtime("unused",args.debug_level)}let tz;try{tz=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}MONO.mono_wasm_setenv("TZ",tz||"UTC");MONO.mono_wasm_runtime_ready();args.loaded_cb()},_load_assets_and_runtime:function(args){if(args.enable_debugging)args.debug_level=args.enable_debugging;if(args.assembly_list)throw new Error("Invalid args (assembly_list was replaced by assets)");if(args.runtime_assets)throw new Error("Invalid args (runtime_assets was replaced by assets)");if(args.runtime_asset_sources)throw new Error("Invalid args (runtime_asset_sources was replaced by remote_sources)");if(!args.loaded_cb)throw new Error("loaded_cb not provided");var ctx={tracing:args.diagnostic_tracing||false,pending_count:args.assets.length,mono_wasm_add_assembly:Module.cwrap("mono_wasm_add_assembly","number",["string","number","number"]),mono_wasm_add_satellite_assembly:Module.cwrap("mono_wasm_add_satellite_assembly","void",["string","string","number","number"]),loaded_assets:Object.create(null),loaded_files:[],createPath:Module["FS_createPath"],createDataFile:Module["FS_createDataFile"]};if(ctx.tracing)console.log("mono_wasm_load_runtime_with_args",JSON.stringify(args));this._apply_configuration_from_args(args);var fetch_file_cb=this._get_fetch_file_cb_from_args(args);var onPendingRequestComplete=function(){--ctx.pending_count;if(ctx.pending_count===0){try{MONO._finalize_startup(args,ctx)}catch(exc){console.error("Unhandled exception in _finalize_startup",exc);throw exc}}};var processFetchResponseBuffer=function(asset,url,blob){try{MONO._handle_loaded_asset(ctx,asset,url,blob)}catch(exc){console.error("Unhandled exception in processFetchResponseBuffer",exc);throw exc}finally{onPendingRequestComplete()}};args.assets.forEach(function(asset){var attemptNextSource;var sourceIndex=0;var sourcesList=asset.load_remote?args.remote_sources:[""];var handleFetchResponse=function(response){if(!response.ok){try{attemptNextSource();return}catch(exc){console.error("MONO_WASM: Unhandled exception in handleFetchResponse attemptNextSource for asset",asset.name,exc);throw exc}}try{var bufferPromise=response["arrayBuffer"]();bufferPromise.then(processFetchResponseBuffer.bind(this,asset,response.url))}catch(exc){console.error("MONO_WASM: Unhandled exception in handleFetchResponse for asset",asset.name,exc);attemptNextSource()}};attemptNextSource=function(){if(sourceIndex>=sourcesList.length){var msg="MONO_WASM: Failed to load "+asset.name;try{var isOk=asset.is_optional||asset.name.match(/\.pdb$/)&&MONO.mono_wasm_ignore_pdb_load_errors;if(isOk)console.debug(msg);else{console.error(msg);throw new Error(msg)}}finally{onPendingRequestComplete()}}var sourcePrefix=sourcesList[sourceIndex];sourceIndex++;if(sourcePrefix==="./")sourcePrefix="";var attemptUrl;if(sourcePrefix.trim()===""){if(asset.behavior==="assembly")attemptUrl=locateFile(args.assembly_root+"/"+asset.name);else if(asset.behavior==="resource"){var path=asset.culture!==""?`${asset.culture}/${asset.name}`:asset.name;attemptUrl=locateFile(args.assembly_root+"/"+path)}else attemptUrl=asset.name}else{attemptUrl=sourcePrefix+asset.name}try{if(asset.name===attemptUrl){if(ctx.tracing)console.log("Attempting to fetch '"+attemptUrl+"'")}else{if(ctx.tracing)console.log("Attempting to fetch '"+attemptUrl+"' for",asset.name)}var fetch_promise=fetch_file_cb(attemptUrl);fetch_promise.then(handleFetchResponse)}catch(exc){console.error("MONO_WASM: Error fetching "+attemptUrl,exc);attemptNextSource()}};attemptNextSource()})},mono_wasm_globalization_init:function(globalization_mode){var invariantMode=false;if(globalization_mode==="invariant")invariantMode=true;if(!invariantMode){if(this.num_icu_assets_loaded_successfully>0){console.debug("MONO_WASM: ICU data archive(s) loaded, disabling invariant mode")}else if(globalization_mode!=="icu"){console.debug("MONO_WASM: ICU data archive(s) not loaded, using invariant globalization mode");invariantMode=true}else{var msg="invariant globalization mode is inactive and no ICU data archives were loaded";console.error("MONO_WASM: ERROR: "+msg);throw new Error(msg)}}if(invariantMode)this.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT","1");this.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY","1")},mono_wasm_get_loaded_files:function(){if(!this.mono_wasm_set_is_debugger_attached)this.mono_wasm_set_is_debugger_attached=Module.cwrap("mono_wasm_set_is_debugger_attached","void",["bool"]);this.mono_wasm_set_is_debugger_attached(true);return MONO.loaded_files},mono_wasm_get_loaded_asset_table:function(){return MONO.loaded_assets},mono_wasm_clear_all_breakpoints:function(){if(!this.mono_clear_bps)this.mono_clear_bps=Module.cwrap("mono_wasm_clear_all_breakpoints",null);this.mono_clear_bps()},mono_wasm_add_null_var:function(className){let fixed_class_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));if(!fixed_class_name){fixed_class_name=className}MONO.var_info.push({value:{type:"object",className:fixed_class_name,description:fixed_class_name,subtype:"null"}})},_mono_wasm_add_string_var:function(var_value){if(var_value===0){MONO.mono_wasm_add_null_var("string");return}MONO.var_info.push({value:{type:"string",value:var_value,description:var_value}})},_mono_wasm_add_getter_var:function(className){const fixed_class_name=MONO._mono_csharp_fixup_class_name(className);var name;if(MONO.var_info.length>0)name=MONO.var_info[MONO.var_info.length-1].name;name=name===undefined?"":name;MONO.var_info.push({get:{className:"Function",description:`get ${name} () {}`,type:"function"}})},_mono_wasm_add_array_var:function(className,objectId,length){const fixed_class_name=MONO._mono_csharp_fixup_class_name(className);if(objectId==0){MONO.mono_wasm_add_null_var(fixed_class_name);return}MONO.var_info.push({value:{type:"object",subtype:"array",className:fixed_class_name,description:`${fixed_class_name}(${length})`,objectId:this._new_or_add_id_props({scheme:"array",idArgs:{arrayId:objectId}})}})},_base64_to_uint8:function(base64String){const byteCharacters=atob(base64String);const byteNumbers=new Array(byteCharacters.length);for(let i=0;i{var file=m[0];var last=file.lastIndexOf("/");var directory=file.slice(0,last+1);folders.add(directory)});folders.forEach(folder=>{Module["FS_createPath"](prefix,folder,true,true)});for(row of manifest){var name=row[0];var length=row[1];var bytes=data.slice(0,length);Module["FS_createDataFile"](prefix,name,bytes,true,true);data=data.slice(length)}return true},mono_wasm_raise_debug_event:function(event,args={}){if(typeof event!=="object")throw new Error(`event must be an object, but got ${JSON.stringify(event)}`);if(event.eventName===undefined)throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`);if(typeof args!=="object")throw new Error(`args must be an object, but got ${JSON.stringify(args)}`);console.debug("mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae",JSON.stringify(event),JSON.stringify(args))}};function _mono_set_timeout(timeout,id){if(!this.mono_set_timeout_exec)this.mono_set_timeout_exec=Module.cwrap("mono_set_timeout_exec",null,["number"]);if(typeof globalThis.setTimeout==="function"){globalThis.setTimeout(function(){this.mono_set_timeout_exec(id)},timeout)}else{++MONO.pump_count;MONO.timeout_queue.push(function(){this.mono_set_timeout_exec(id)})}}function _mono_wasm_add_array_item(position){MONO.var_info.push({name:`${position}`})}function _mono_wasm_add_enum_var(className,members,value){const re=new RegExp(`[,]?([^,:]+):(${value}(?=,)|${value}$)`,"g");const members_str=Module.UTF8ToString(members);const match=re.exec(members_str);const member_name=match==null?""+value:match[1];const fixed_class_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));MONO.var_info.push({value:{type:"object",className:fixed_class_name,description:member_name,isEnum:true}})}function _mono_wasm_add_frame(il,method,frame_id,assembly_name,method_full_name){var parts=Module.UTF8ToString(method_full_name).split(":",2);MONO.active_frames.push({il_pos:il,method_token:method,assembly_name:Module.UTF8ToString(assembly_name),method_name:parts[parts.length-1],frame_id:frame_id})}function _mono_wasm_add_func_var(className,targetName,objectId){if(objectId==0){MONO.mono_wasm_add_null_var(MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className)));return}function args_to_sig(args_str){var parts=args_str.split(":");parts=parts.map(a=>MONO._mono_csharp_fixup_class_name(a));var method_name=parts.pop();var ret_sig=parts[0];var args_sig=parts.splice(1).join(", ");return`${ret_sig} ${method_name} (${args_sig})`}let tgt_sig;if(targetName!=0)tgt_sig=args_to_sig(Module.UTF8ToString(targetName));const type_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));if(tgt_sig===undefined)tgt_sig=type_name;if(objectId==-1||targetName===0){MONO.var_info.push({value:{type:"symbol",value:tgt_sig,description:tgt_sig}})}else{MONO.var_info.push({value:{type:"object",className:type_name,description:tgt_sig,objectId:"dotnet:object:"+objectId}})}}function _mono_wasm_add_obj_var(className,toString,objectId){if(objectId==0){MONO.mono_wasm_add_null_var(className);return}const fixed_class_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));MONO.var_info.push({value:{type:"object",className:fixed_class_name,description:toString===0?fixed_class_name:Module.UTF8ToString(toString),objectId:"dotnet:object:"+objectId}})}function _mono_wasm_add_properties_var(name,args){MONO.mono_wasm_add_properties_var(name,args)}function _mono_wasm_add_typed_value(type,str_value,value){MONO.mono_wasm_add_typed_value(type,str_value,value)}function _mono_wasm_asm_loaded(assembly_name,assembly_ptr,assembly_len,pdb_ptr,pdb_len){if(MONO.mono_wasm_runtime_is_ready!==true)return;const assembly_name_str=assembly_name!==0?Module.UTF8ToString(assembly_name).concat(".dll"):"";const assembly_data=new Uint8Array(Module.HEAPU8.buffer,assembly_ptr,assembly_len);const assembly_b64=MONO._base64Converter.toBase64StringImpl(assembly_data);let pdb_b64;if(pdb_ptr){const pdb_data=new Uint8Array(Module.HEAPU8.buffer,pdb_ptr,pdb_len);pdb_b64=MONO._base64Converter.toBase64StringImpl(pdb_data)}MONO.mono_wasm_raise_debug_event({eventName:"AssemblyLoaded",assembly_name:assembly_name_str,assembly_b64:assembly_b64,pdb_b64:pdb_b64})}var BINDING={BINDING_ASM:"[System.Private.Runtime.InteropServices.JavaScript]System.Runtime.InteropServices.JavaScript.Runtime",mono_wasm_object_registry:[],mono_wasm_ref_counter:0,mono_wasm_free_list:[],mono_wasm_owned_objects_frames:[],mono_wasm_owned_objects_LMF:[],mono_wasm_marshal_enum_as_int:true,mono_bindings_init:function(binding_asm){this.BINDING_ASM=binding_asm},export_functions:function(module){module["mono_bindings_init"]=BINDING.mono_bindings_init.bind(BINDING);module["mono_bind_method"]=BINDING.bind_method.bind(BINDING);module["mono_method_invoke"]=BINDING.call_method.bind(BINDING);module["mono_method_get_call_signature"]=BINDING.mono_method_get_call_signature.bind(BINDING);module["mono_method_resolve"]=BINDING.resolve_method_fqn.bind(BINDING);module["mono_bind_static_method"]=BINDING.bind_static_method.bind(BINDING);module["mono_call_static_method"]=BINDING.call_static_method.bind(BINDING);module["mono_bind_assembly_entry_point"]=BINDING.bind_assembly_entry_point.bind(BINDING);module["mono_call_assembly_entry_point"]=BINDING.call_assembly_entry_point.bind(BINDING);module["mono_intern_string"]=BINDING.mono_intern_string.bind(BINDING)},bindings_lazy_init:function(){if(this.init)return;this.init=true;Array.prototype[Symbol.for("wasm type")]=1;ArrayBuffer.prototype[Symbol.for("wasm type")]=2;DataView.prototype[Symbol.for("wasm type")]=3;Function.prototype[Symbol.for("wasm type")]=4;Map.prototype[Symbol.for("wasm type")]=5;if(typeof SharedArrayBuffer!=="undefined")SharedArrayBuffer.prototype[Symbol.for("wasm type")]=6;Int8Array.prototype[Symbol.for("wasm type")]=10;Uint8Array.prototype[Symbol.for("wasm type")]=11;Uint8ClampedArray.prototype[Symbol.for("wasm type")]=12;Int16Array.prototype[Symbol.for("wasm type")]=13;Uint16Array.prototype[Symbol.for("wasm type")]=14;Int32Array.prototype[Symbol.for("wasm type")]=15;Uint32Array.prototype[Symbol.for("wasm type")]=16;Float32Array.prototype[Symbol.for("wasm type")]=17;Float64Array.prototype[Symbol.for("wasm type")]=18;this.assembly_load=Module.cwrap("mono_wasm_assembly_load","number",["string"]);this.find_corlib_class=Module.cwrap("mono_wasm_find_corlib_class","number",["string","string"]);this.find_class=Module.cwrap("mono_wasm_assembly_find_class","number",["number","string","string"]);this._find_method=Module.cwrap("mono_wasm_assembly_find_method","number",["number","string","number"]);this.invoke_method=Module.cwrap("mono_wasm_invoke_method","number",["number","number","number","number"]);this.mono_string_get_utf8=Module.cwrap("mono_wasm_string_get_utf8","number",["number"]);this.mono_wasm_string_from_utf16=Module.cwrap("mono_wasm_string_from_utf16","number",["number","number"]);this.mono_get_obj_type=Module.cwrap("mono_wasm_get_obj_type","number",["number"]);this.mono_array_length=Module.cwrap("mono_wasm_array_length","number",["number"]);this.mono_array_get=Module.cwrap("mono_wasm_array_get","number",["number","number"]);this.mono_obj_array_new=Module.cwrap("mono_wasm_obj_array_new","number",["number"]);this.mono_obj_array_set=Module.cwrap("mono_wasm_obj_array_set","void",["number","number","number"]);this.mono_wasm_register_bundled_satellite_assemblies=Module.cwrap("mono_wasm_register_bundled_satellite_assemblies","void",[]);this.mono_wasm_try_unbox_primitive_and_get_type=Module.cwrap("mono_wasm_try_unbox_primitive_and_get_type","number",["number","number"]);this.mono_wasm_box_primitive=Module.cwrap("mono_wasm_box_primitive","number",["number","number","number"]);this.mono_wasm_intern_string=Module.cwrap("mono_wasm_intern_string","number",["number"]);this.assembly_get_entry_point=Module.cwrap("mono_wasm_assembly_get_entry_point","number",["number"]);this.mono_wasm_get_delegate_invoke=Module.cwrap("mono_wasm_get_delegate_invoke","number",["number"]);this.mono_wasm_string_array_new=Module.cwrap("mono_wasm_string_array_new","number",["number"]);this._box_buffer=Module._malloc(16);this._unbox_buffer=Module._malloc(16);this._class_int32=this.find_corlib_class("System","Int32");this._class_uint32=this.find_corlib_class("System","UInt32");this._class_double=this.find_corlib_class("System","Double");this._class_boolean=this.find_corlib_class("System","Boolean");this.mono_typed_array_new=Module.cwrap("mono_wasm_typed_array_new","number",["number","number","number","number"]);var binding_fqn_asm=this.BINDING_ASM.substring(this.BINDING_ASM.indexOf("[")+1,this.BINDING_ASM.indexOf("]")).trim();var binding_fqn_class=this.BINDING_ASM.substring(this.BINDING_ASM.indexOf("]")+1).trim();this.binding_module=this.assembly_load(binding_fqn_asm);if(!this.binding_module)throw"Can't find bindings module assembly: "+binding_fqn_asm;var namespace=null,classname=null;if(binding_fqn_class!==null&&typeof binding_fqn_class!=="undefined"){namespace="System.Runtime.InteropServices.JavaScript";classname=binding_fqn_class.length>0?binding_fqn_class:"Runtime";if(binding_fqn_class.indexOf(".")!=-1){var idx=binding_fqn_class.lastIndexOf(".");namespace=binding_fqn_class.substring(0,idx);classname=binding_fqn_class.substring(idx+1)}}var wasm_runtime_class=this.find_class(this.binding_module,namespace,classname);if(!wasm_runtime_class)throw"Can't find "+binding_fqn_class+" class";var get_method=function(method_name){var res=BINDING.find_method(wasm_runtime_class,method_name,-1);if(!res)throw"Can't find method "+namespace+"."+classname+":"+method_name;return res};var bind_runtime_method=function(method_name,signature){var method=get_method(method_name);return BINDING.bind_method(method,0,signature,"BINDINGS_"+method_name)};this._bind_js_obj=bind_runtime_method("BindJSObject","iii");this._bind_core_clr_obj=bind_runtime_method("BindCoreCLRObject","ii");this._bind_existing_obj=bind_runtime_method("BindExistingObject","mi");this._unbind_raw_obj_and_free=bind_runtime_method("UnBindRawJSObjectAndFree","ii");this._get_js_id=bind_runtime_method("GetJSObjectId","m");this._get_raw_mono_obj=bind_runtime_method("GetDotNetObject","i!");this._is_simple_array=bind_runtime_method("IsSimpleArray","m");this.setup_js_cont=get_method("SetupJSContinuation");this.create_tcs=get_method("CreateTaskSource");this.set_tcs_result=get_method("SetTaskSourceResult");this.set_tcs_failure=get_method("SetTaskSourceFailure");this.tcs_get_task_and_bind=get_method("GetTaskAndBind");this.get_call_sig=get_method("GetCallSignature");this._object_to_string=bind_runtime_method("ObjectToString","m");this.get_date_value=get_method("GetDateValue");this.create_date_time=get_method("CreateDateTime");this.create_uri=get_method("CreateUri");this.safehandle_addref=get_method("SafeHandleAddRef");this.safehandle_release=get_method("SafeHandleRelease");this.safehandle_get_handle=get_method("SafeHandleGetHandle");this.safehandle_release_by_handle=get_method("SafeHandleReleaseByHandle");this._are_promises_supported=(typeof Promise==="object"||typeof Promise==="function")&&typeof Promise.resolve==="function";this._empty_string="";this._empty_string_ptr=0;this._interned_string_full_root_buffers=[];this._interned_string_current_root_buffer=null;this._interned_string_current_root_buffer_count=0;this._interned_string_table=new Map;this._managed_pointer_to_interned_string_table=new Map},mono_intern_string:function(string){if(string.length===0)return this._empty_string;var ptr=this.js_string_to_mono_string_interned(string);var result=this._managed_pointer_to_interned_string_table.get(ptr);return result},_store_string_in_intern_table:function(string,ptr,internIt){if(!ptr)throw new Error("null pointer passed to _store_string_in_intern_table");else if(typeof ptr!=="number")throw new Error(`non-pointer passed to _store_string_in_intern_table: ${typeof ptr}`);const internBufferSize=8192;if(this._interned_string_current_root_buffer_count>=internBufferSize){this._interned_string_full_root_buffers.push(this._interned_string_current_root_buffer);this._interned_string_current_root_buffer=null}if(!this._interned_string_current_root_buffer){this._interned_string_current_root_buffer=MONO.mono_wasm_new_root_buffer(internBufferSize,"interned strings");this._interned_string_current_root_buffer_count=0}var rootBuffer=this._interned_string_current_root_buffer;var index=this._interned_string_current_root_buffer_count++;rootBuffer.set(index,ptr);if(internIt)rootBuffer.set(index,ptr=this.mono_wasm_intern_string(ptr));if(!ptr)throw new Error("mono_wasm_intern_string produced a null pointer");this._interned_string_table.set(string,ptr);this._managed_pointer_to_interned_string_table.set(ptr,string);if(string.length===0&&!this._empty_string_ptr)this._empty_string_ptr=ptr;return ptr},js_string_to_mono_string_interned:function(string){var text=typeof string==="symbol"?string.description||Symbol.keyFor(string)||"":string;if(text.length===0&&this._empty_string_ptr)return this._empty_string_ptr;var ptr=this._interned_string_table.get(string);if(ptr)return ptr;ptr=this.js_string_to_mono_string_new(text);ptr=this._store_string_in_intern_table(string,ptr,true);return ptr},js_string_to_mono_string:function(string){if(string===null)return null;else if(typeof string==="symbol")return this.js_string_to_mono_string_interned(string);else if(typeof string!=="string")throw new Error("Expected string argument");if(string.length===0)return this.js_string_to_mono_string_interned(string);if(string.length<=256){var interned=this._interned_string_table.get(string);if(interned)return interned}return this.js_string_to_mono_string_new(string)},js_string_to_mono_string_new:function(string){var buffer=Module._malloc((string.length+1)*2);var buffer16=buffer/2|0;for(var i=0;i0)return this.mono_wasm_require_handle(js_handle);return null},conv_string:function(mono_obj,interned){var interned_instance=this._managed_pointer_to_interned_string_table.get(mono_obj);if(interned_instance!==undefined)return interned_instance;var result=MONO.string_decoder.copy(mono_obj);if(interned){this._store_string_in_intern_table(result,mono_obj,false)}return result},is_nested_array:function(ele){return this._is_simple_array(ele)},mono_array_to_js_array:function(mono_array){if(mono_array===0)return null;var arrayRoot=MONO.mono_wasm_new_root(mono_array);try{return this._mono_array_root_to_js_array(arrayRoot)}finally{arrayRoot.release()}},_mono_array_root_to_js_array:function(arrayRoot){if(arrayRoot.value===0)return null;let elemRoot=MONO.mono_wasm_new_root();try{var len=this.mono_array_length(arrayRoot.value);var res=new Array(len);for(var i=0;i>>0===js_obj)result=this._box_js_uint(js_obj);else result=this._box_js_double(js_obj);if(!result)throw new Error(`Boxing failed for ${js_obj}`);return result}case typeof js_obj==="string":return this.js_string_to_mono_string(js_obj);case typeof js_obj==="symbol":return this.js_string_to_mono_string_interned(js_obj);case typeof js_obj==="boolean":return this._box_js_bool(js_obj);case isThenable()===true:var the_task=this.try_extract_mono_obj(js_obj);if(the_task)return the_task;var tcs=this.create_task_completion_source();js_obj.then(function(result){BINDING.set_task_result(tcs,result)},function(reason){BINDING.set_task_failure(tcs,reason)});return this.get_task_and_bind(tcs,js_obj);case js_obj.constructor.name==="Date":return this.call_method(this.create_date_time,null,"d!",[js_obj.getTime()]);default:return this.extract_mono_obj(js_obj)}},js_to_mono_uri:function(js_obj){this.bindings_lazy_init();switch(true){case js_obj===null:case typeof js_obj==="undefined":return 0;case typeof js_obj==="symbol":case typeof js_obj==="string":return this.call_method(this.create_uri,null,"s!",[js_obj]);default:return this.extract_mono_obj(js_obj)}},has_backing_array_buffer:function(js_obj){return typeof SharedArrayBuffer!=="undefined"?js_obj.buffer instanceof ArrayBuffer||js_obj.buffer instanceof SharedArrayBuffer:js_obj.buffer instanceof ArrayBuffer},js_typed_array_to_array:function(js_obj){if(!!(this.has_backing_array_buffer(js_obj)&&js_obj.BYTES_PER_ELEMENT)){var arrayType=js_obj[Symbol.for("wasm type")];var heapBytes=this.js_typedarray_to_heap(js_obj);var bufferArray=this.mono_typed_array_new(heapBytes.byteOffset,js_obj.length,js_obj.BYTES_PER_ELEMENT,arrayType);Module._free(heapBytes.byteOffset);return bufferArray}else{throw new Error("Object '"+js_obj+"' is not a typed array")}},typedarray_copy_to:function(typed_array,pinned_array,begin,end,bytes_per_element){if(!!(this.has_backing_array_buffer(typed_array)&&typed_array.BYTES_PER_ELEMENT)){if(bytes_per_element!==typed_array.BYTES_PER_ELEMENT)throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '"+typed_array.BYTES_PER_ELEMENT+"' sizeof managed element: '"+bytes_per_element+"'");var num_of_bytes=(end-begin)*bytes_per_element;var view_bytes=typed_array.length*typed_array.BYTES_PER_ELEMENT;if(num_of_bytes>view_bytes)num_of_bytes=view_bytes;var offset=begin*bytes_per_element;var heapBytes=new Uint8Array(Module.HEAPU8.buffer,pinned_array+offset,num_of_bytes);heapBytes.set(new Uint8Array(typed_array.buffer,typed_array.byteOffset,num_of_bytes));return num_of_bytes}else{throw new Error("Object '"+typed_array+"' is not a typed array")}},typedarray_copy_from:function(typed_array,pinned_array,begin,end,bytes_per_element){if(!!(this.has_backing_array_buffer(typed_array)&&typed_array.BYTES_PER_ELEMENT)){if(bytes_per_element!==typed_array.BYTES_PER_ELEMENT)throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '"+typed_array.BYTES_PER_ELEMENT+"' sizeof managed element: '"+bytes_per_element+"'");var num_of_bytes=(end-begin)*bytes_per_element;var view_bytes=typed_array.length*typed_array.BYTES_PER_ELEMENT;if(num_of_bytes>view_bytes)num_of_bytes=view_bytes;var typedarrayBytes=new Uint8Array(typed_array.buffer,0,num_of_bytes);var offset=begin*bytes_per_element;typedarrayBytes.set(Module.HEAPU8.subarray(pinned_array+offset,pinned_array+offset+num_of_bytes));return num_of_bytes}else{throw new Error("Object '"+typed_array+"' is not a typed array")}},typed_array_from:function(pinned_array,begin,end,bytes_per_element,type){var newTypedArray=0;switch(type){case 5:newTypedArray=new Int8Array(end-begin);break;case 6:newTypedArray=new Uint8Array(end-begin);break;case 7:newTypedArray=new Int16Array(end-begin);break;case 8:newTypedArray=new Uint16Array(end-begin);break;case 9:newTypedArray=new Int32Array(end-begin);break;case 10:newTypedArray=new Uint32Array(end-begin);break;case 13:newTypedArray=new Float32Array(end-begin);break;case 14:newTypedArray=new Float64Array(end-begin);break;case 15:newTypedArray=new Uint8ClampedArray(end-begin);break}this.typedarray_copy_from(newTypedArray,pinned_array,begin,end,bytes_per_element);return newTypedArray},js_to_mono_enum:function(js_obj,method,parmIdx){this.bindings_lazy_init();if(typeof js_obj!=="number")throw new Error(`Expected numeric value for enum argument, got '${js_obj}'`);return js_obj|0},wasm_binding_obj_new:function(js_obj_id,ownsHandle,type){return this._bind_js_obj(js_obj_id,ownsHandle,type)},wasm_bind_existing:function(mono_obj,js_id){return this._bind_existing_obj(mono_obj,js_id)},wasm_bind_core_clr_obj:function(js_id,gc_handle){return this._bind_core_clr_obj(js_id,gc_handle)},wasm_get_js_id:function(mono_obj){return this._get_js_id(mono_obj)},wasm_get_raw_obj:function(gchandle){return this._get_raw_mono_obj(gchandle)},try_extract_mono_obj:function(js_obj){if(js_obj===null||typeof js_obj==="undefined"||typeof js_obj.__mono_gchandle__==="undefined")return 0;return this.wasm_get_raw_obj(js_obj.__mono_gchandle__)},mono_method_get_call_signature:function(method,mono_obj){this.bindings_lazy_init();return this.call_method(this.get_call_sig,null,"im",[method,mono_obj])},get_task_and_bind:function(tcs,js_obj){var gc_handle=this.mono_wasm_free_list.length?this.mono_wasm_free_list.pop():this.mono_wasm_ref_counter++;var task_gchandle=this.call_method(this.tcs_get_task_and_bind,null,"oi",[tcs,gc_handle+1]);js_obj.__mono_gchandle__=task_gchandle;this.mono_wasm_object_registry[gc_handle]=js_obj;this.free_task_completion_source(tcs);tcs.is_mono_tcs_task_bound=true;js_obj.__mono_bound_tcs__=tcs.__mono_gchandle__;tcs.__mono_bound_task__=js_obj.__mono_gchandle__;return this.wasm_get_raw_obj(js_obj.__mono_gchandle__)},free_task_completion_source:function(tcs){if(tcs.is_mono_tcs_result_set){this._unbind_raw_obj_and_free(tcs.__mono_gchandle__)}if(tcs.__mono_bound_task__){this._unbind_raw_obj_and_free(tcs.__mono_bound_task__)}},extract_mono_obj:function(js_obj){if(js_obj===null||typeof js_obj==="undefined")return 0;var result=null;var gc_handle=js_obj.__mono_gchandle__;if(gc_handle){result=this.wasm_get_raw_obj(gc_handle);if(!result){delete js_obj.__mono_gchandle__;delete js_obj.is_mono_bridged_obj}}if(!result){gc_handle=this.mono_wasm_register_obj(js_obj);result=this.wasm_get_raw_obj(gc_handle)}return result},extract_js_obj:function(mono_obj){if(mono_obj==0)return null;var js_id=this.wasm_get_js_id(mono_obj);if(js_id>0)return this.mono_wasm_require_handle(js_id);var gcHandle=this.mono_wasm_free_list.length?this.mono_wasm_free_list.pop():this.mono_wasm_ref_counter++;var js_obj={__mono_gchandle__:this.wasm_bind_existing(mono_obj,gcHandle+1),is_mono_bridged_obj:true};this.mono_wasm_object_registry[gcHandle]=js_obj;return js_obj},_create_named_function:function(name,argumentNames,body,closure){var result=null,closureArgumentList=null,closureArgumentNames=null;if(closure){closureArgumentNames=Object.keys(closure);closureArgumentList=new Array(closureArgumentNames.length);for(var i=0,l=closureArgumentNames.length;i0;var has_args_marshal=typeof args_marshal==="string";if(has_args){if(!has_args_marshal)throw new Error("No signature provided for method call.");else if(args.length>args_marshal.length)throw new Error("Too many parameter values. Expected at most "+args_marshal.length+" value(s) for signature "+args_marshal)}return has_args_marshal&&has_args},_get_buffer_for_method_call:function(converter){if(!converter)return 0;var result=converter.scratchBuffer;converter.scratchBuffer=0;return result},_get_args_root_buffer_for_method_call:function(converter){if(!converter)return null;if(!converter.needs_root_buffer)return null;var result;if(converter.scratchRootBuffer){result=converter.scratchRootBuffer;converter.scratchRootBuffer=null}else{result=MONO.mono_wasm_new_root_buffer(converter.steps.length);result.converter=converter}return result},_release_args_root_buffer_from_method_call:function(converter,argsRootBuffer){if(!argsRootBuffer||!converter)return;if(!converter.scratchRootBuffer){argsRootBuffer.clear();converter.scratchRootBuffer=argsRootBuffer}else{argsRootBuffer.release()}},_release_buffer_from_method_call:function(converter,buffer){if(!converter||!buffer)return;if(!converter.scratchBuffer)converter.scratchBuffer=buffer|0;else Module._free(buffer|0)},_convert_exception_for_method_call:function(result,exception){if(exception===0)return null;var msg=this.conv_string(result,false);var err=new Error(msg);return err},_maybe_produce_signature_warning:function(converter){if(converter.has_warned_about_signature)return;console.warn("MONO_WASM: Deprecated raw return value signature: '"+converter.args_marshal+"'. End the signature with '!' instead of 'm'.");converter.has_warned_about_signature=true},_decide_if_result_is_marshaled:function(converter,argc){if(!converter)return true;if(converter.is_result_possibly_unmarshaled&&argc===converter.result_unmarshaled_if_argc){if(argc= ",converter.result_unmarshaled_if_argc,"argument(s) but got",argc,"for signature "+converter.args_marshal].join(" "));this._maybe_produce_signature_warning(converter);return false}else{if(argc0&&Array.isArray(args[0]))args[0]=BINDING.js_array_to_mono_array(args[0],true);let result=BINDING.call_method(method,null,signature,args);return Promise.resolve(result)}catch(error){return Promise.reject(error)}}},call_assembly_entry_point:function(assembly,args,signature){return this.bind_assembly_entry_point(assembly,signature)(...args)},mono_wasm_register_obj:function(obj){var gc_handle=undefined;if(obj!==null&&typeof obj!=="undefined"){gc_handle=obj.__mono_gchandle__;if(typeof gc_handle==="undefined"){var handle=this.mono_wasm_free_list.length?this.mono_wasm_free_list.pop():this.mono_wasm_ref_counter++;obj.__mono_jshandle__=handle;var wasm_type=obj[Symbol.for("wasm type")];obj.__owns_handle__=true;gc_handle=obj.__mono_gchandle__=this.wasm_binding_obj_new(handle+1,obj.__owns_handle__,typeof wasm_type==="undefined"?-1:wasm_type);this.mono_wasm_object_registry[handle]=obj}}return gc_handle},mono_wasm_require_handle:function(handle){if(handle>0)return this.mono_wasm_object_registry[handle-1];return null},mono_wasm_unregister_obj:function(js_id){var obj=this.mono_wasm_object_registry[js_id-1];if(typeof obj!=="undefined"&&obj!==null){if(globalThis===obj)return obj;var gc_handle=obj.__mono_gchandle__;if(typeof gc_handle!=="undefined"){obj.__mono_gchandle__=undefined;obj.__mono_jshandle__=undefined;if(typeof obj.__mono_delegate_alive__!=="undefined")obj.__mono_delegate_alive__=false;this.mono_wasm_object_registry[js_id-1]=undefined;this.mono_wasm_free_list.push(js_id-1)}}return obj},mono_wasm_free_handle:function(handle){this.mono_wasm_unregister_obj(handle)},mono_wasm_free_raw_object:function(js_id){var obj=this.mono_wasm_object_registry[js_id-1];if(typeof obj!=="undefined"&&obj!==null){if(globalThis===obj)return obj;var gc_handle=obj.__mono_gchandle__;if(typeof gc_handle!=="undefined"){obj.__mono_gchandle__=undefined;obj.__mono_jshandle__=undefined;this.mono_wasm_object_registry[js_id-1]=undefined;this.mono_wasm_free_list.push(js_id-1)}}return obj},mono_wasm_parse_args:function(args){var js_args=this.mono_array_to_js_array(args);this.mono_wasm_save_LMF();return js_args},mono_wasm_save_LMF:function(){BINDING.mono_wasm_owned_objects_frames.push(BINDING.mono_wasm_owned_objects_LMF);BINDING.mono_wasm_owned_objects_LMF=undefined},mono_wasm_unwind_LMF:function(){var __owned_objects__=this.mono_wasm_owned_objects_frames.pop();if(typeof __owned_objects__!=="undefined"){var refidx;for(refidx=0;refidx<__owned_objects__.length;refidx++){var ownerRelease=__owned_objects__[refidx];this.call_method(this.safehandle_release_by_handle,null,"i",[ownerRelease])}}},mono_wasm_convert_return_value:function(ret){this.mono_wasm_unwind_LMF();return this.js_to_mono_obj(ret)}};function _mono_wasm_bind_core_object(js_handle,gc_handle,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}BINDING.wasm_bind_core_clr_obj(js_handle,gc_handle);requireObject.__mono_gchandle__=gc_handle;requireObject.__js_handle__=js_handle;return gc_handle}function _mono_wasm_bind_host_object(js_handle,gc_handle,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}BINDING.wasm_bind_core_clr_obj(js_handle,gc_handle);requireObject.__mono_gchandle__=gc_handle;return gc_handle}function _mono_wasm_fire_bp(){debugger}function _mono_wasm_fire_exception(exception_id,message,class_name,uncaught){MONO.active_exception={exception_id:exception_id,message:Module.UTF8ToString(message),class_name:Module.UTF8ToString(class_name),uncaught:uncaught};debugger}function _mono_wasm_get_by_index(js_handle,property_index,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.mono_wasm_require_handle(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}try{var m=obj[property_index];return BINDING.js_to_mono_obj(m)}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||typeof res==="undefined")res="unknown exception";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_get_global_object(global_name,is_exception){BINDING.bindings_lazy_init();var js_name=BINDING.conv_string(global_name,false);var globalObj;if(!js_name){globalObj=globalThis}else{globalObj=globalThis[js_name]}if(globalObj===null||typeof globalObj===undefined){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Global object '"+js_name+"' not found.")}return BINDING.js_to_mono_obj(globalObj)}function _mono_wasm_get_object_property(js_handle,property_name,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.mono_wasm_require_handle(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var js_name=BINDING.conv_string(property_name,false);if(!js_name){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid property name object '"+js_name+"'")}var res;try{var m=obj[js_name];if(m===Object(m)&&obj.__is_mono_proxied__)m.__is_mono_proxied__=true;return BINDING.js_to_mono_obj(m)}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||typeof res==="undefined")res="unknown exception";return BINDING.js_string_to_mono_string(res)}}var DOTNET={conv_string:function(mono_obj){return MONO.string_decoder.copy(mono_obj)}};function _mono_wasm_invoke_js_blazor(exceptionMessage,callInfo,arg0,arg1,arg2){var mono_string=globalThis._mono_string_cached||(globalThis._mono_string_cached=Module.cwrap("mono_wasm_string_from_js","number",["string"]));try{var blazorExports=globalThis.Blazor;if(!blazorExports){throw new Error("The blazor.webassembly.js library is not loaded.")}return blazorExports._internal.invokeJSFromDotNet(callInfo,arg0,arg1,arg2)}catch(ex){var exceptionJsString=ex.message+"\n"+ex.stack;var exceptionSystemString=mono_string(exceptionJsString);setValue(exceptionMessage,exceptionSystemString,"i32");return 0}}function _mono_wasm_invoke_js_marshalled(exceptionMessage,asyncHandleLongPtr,functionName,argsJson,treatResultAsVoid){var mono_string=globalThis._mono_string_cached||(globalThis._mono_string_cached=Module.cwrap("mono_wasm_string_from_js","number",["string"]));try{var u32Index=asyncHandleLongPtr>>2;var asyncHandleJsNumber=Module.HEAPU32[u32Index+1]*4294967296+Module.HEAPU32[u32Index];var funcNameJsString=DOTNET.conv_string(functionName);var argsJsonJsString=argsJson&&DOTNET.conv_string(argsJson);var dotNetExports=globaThis.DotNet;if(!dotNetExports){throw new Error("The Microsoft.JSInterop.js library is not loaded.")}if(asyncHandleJsNumber){dotNetExports.jsCallDispatcher.beginInvokeJSFromDotNet(asyncHandleJsNumber,funcNameJsString,argsJsonJsString,treatResultAsVoid);return 0}else{var resultJson=dotNetExports.jsCallDispatcher.invokeJSFromDotNet(funcNameJsString,argsJsonJsString,treatResultAsVoid);return resultJson===null?0:mono_string(resultJson)}}catch(ex){var exceptionJsString=ex.message+"\n"+ex.stack;var exceptionSystemString=mono_string(exceptionJsString);setValue(exceptionMessage,exceptionSystemString,"i32");return 0}}function _mono_wasm_invoke_js_unmarshalled(exceptionMessage,funcName,arg0,arg1,arg2){try{var funcNameJsString=DOTNET.conv_string(funcName);var dotNetExports=globalThis.DotNet;if(!dotNetExports){throw new Error("The Microsoft.JSInterop.js library is not loaded.")}var funcInstance=dotNetExports.jsCallDispatcher.findJSFunction(funcNameJsString);return funcInstance.call(null,arg0,arg1,arg2)}catch(ex){var exceptionJsString=ex.message+"\n"+ex.stack;var mono_string=Module.cwrap("mono_wasm_string_from_js","number",["string"]);var exceptionSystemString=mono_string(exceptionJsString);setValue(exceptionMessage,exceptionSystemString,"i32");return 0}}function _mono_wasm_invoke_js_with_args(js_handle,method_name,args,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.get_js_obj(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var js_name=BINDING.conv_string(method_name,false);if(!js_name){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid method name object '"+method_name+"'")}var js_args=BINDING.mono_wasm_parse_args(args);var res;try{var m=obj[js_name];if(typeof m==="undefined")throw new Error("Method: '"+js_name+"' not found for: '"+Object.prototype.toString.call(obj)+"'");var res=m.apply(obj,js_args);return BINDING.mono_wasm_convert_return_value(res)}catch(e){BINDING.mono_wasm_unwind_LMF();var res=e.toString();setValue(is_exception,1,"i32");if(res===null||res===undefined)res="unknown exception";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_new(core_name,args,is_exception){BINDING.bindings_lazy_init();var js_name=BINDING.conv_string(core_name,false);if(!js_name){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Core object '"+js_name+"' not found.")}var coreObj=globalThis[js_name];if(coreObj===null||typeof coreObj==="undefined"){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("JavaScript host object '"+js_name+"' not found.")}var js_args=BINDING.mono_wasm_parse_args(args);try{var allocator=function(constructor,js_args){var argsList=new Array;argsList[0]=constructor;if(js_args)argsList=argsList.concat(js_args);var tempCtor=constructor.bind.apply(constructor,argsList);var obj=new tempCtor;return obj};var res=allocator(coreObj,js_args);var gc_handle=BINDING.mono_wasm_free_list.length?BINDING.mono_wasm_free_list.pop():BINDING.mono_wasm_ref_counter++;BINDING.mono_wasm_object_registry[gc_handle]=res;return BINDING.mono_wasm_convert_return_value(gc_handle+1)}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||res===undefined)res="Error allocating object.";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_release_handle(js_handle,is_exception){BINDING.bindings_lazy_init();BINDING.mono_wasm_free_handle(js_handle)}function _mono_wasm_release_object(js_handle,is_exception){BINDING.bindings_lazy_init();BINDING.mono_wasm_free_raw_object(js_handle)}function _mono_wasm_set_by_index(js_handle,property_index,value,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.mono_wasm_require_handle(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var js_value=BINDING.unbox_mono_obj(value);BINDING.mono_wasm_save_LMF();try{obj[property_index]=js_value;BINDING.mono_wasm_unwind_LMF();return true}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||typeof res==="undefined")res="unknown exception";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_set_is_async_method(objectId){MONO._async_method_objectId=objectId}function _mono_wasm_set_object_property(js_handle,property_name,value,createIfNotExist,hasOwnProperty,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var property=BINDING.conv_string(property_name,false);if(!property){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid property name object '"+property_name+"'")}var result=false;var js_value=BINDING.unbox_mono_obj(value);BINDING.mono_wasm_save_LMF();if(createIfNotExist){requireObject[property]=js_value;result=true}else{result=false;if(!createIfNotExist){if(!requireObject.hasOwnProperty(property))return false}if(hasOwnProperty===true){if(requireObject.hasOwnProperty(property)){requireObject[property]=js_value;result=true}}else{requireObject[property]=js_value;result=true}}BINDING.mono_wasm_unwind_LMF();return BINDING._box_js_bool(result)}function _mono_wasm_typed_array_copy_from(js_handle,pinned_array,begin,end,bytes_per_element,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var res=BINDING.typedarray_copy_from(requireObject,pinned_array,begin,end,bytes_per_element);return BINDING.js_to_mono_obj(res)}function _mono_wasm_typed_array_copy_to(js_handle,pinned_array,begin,end,bytes_per_element,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var res=BINDING.typedarray_copy_to(requireObject,pinned_array,begin,end,bytes_per_element);return BINDING.js_to_mono_obj(res)}function _mono_wasm_typed_array_from(pinned_array,begin,end,bytes_per_element,type,is_exception){BINDING.bindings_lazy_init();var res=BINDING.typed_array_from(pinned_array,begin,end,bytes_per_element,type);return BINDING.js_to_mono_obj(res)}function _mono_wasm_typed_array_to_array(js_handle,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}return BINDING.js_typed_array_to_array(requireObject)}function _schedule_background_exec(){++MONO.pump_count;if(typeof globalThis.setTimeout==="function"){globalThis.setTimeout(MONO.pump_message,0)}}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 janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=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"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _sysconf(name){switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}setErrNo(28);return-1}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}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_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;MONO.export_functions(Module);BINDING.export_functions(Module);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 asmLibraryArg={"q":___assert_fail,"Ra":___clock_gettime,"Qa":___cxa_allocate_exception,"Pa":___cxa_begin_catch,"Oa":___cxa_end_catch,"Na":___cxa_find_matching_catch_3,"Ma":___cxa_throw,"La":___resumeException,"xa":___sys_access,"Ja":___sys_chdir,"x":___sys_chmod,"Aa":___sys_fadvise64_64,"ya":___sys_fallocate,"oa":___sys_fchmod,"d":___sys_fcntl64,"Da":___sys_fstat64,"Fa":___sys_ftruncate64,"Ha":___sys_getcwd,"Ba":___sys_getdents64,"j":___sys_getpid,"sa":___sys_getrusage,"ta":___sys_ioctl,"qa":___sys_link,"Ea":___sys_lstat64,"Ca":___sys_madvise1,"va":___sys_mkdir,"Ga":___sys_mmap2,"Ia":___sys_msync,"pa":___sys_munmap,"v":___sys_open,"ra":___sys_readlink,"wa":___sys_rename,"ua":___sys_rmdir,"m":___sys_socketcall,"w":___sys_stat64,"Ka":___sys_unlink,"za":___sys_utimensat,"a":_abort,"ja":_clock_getres,"h":_clock_gettime,"ia":compile_function,"t":_dotnet_browser_entropy,"f":_emscripten_asm_const_int,"ha":_emscripten_memcpy_big,"ga":_emscripten_resize_heap,"fa":_emscripten_thread_sleep,"na":_environ_get,"ma":_environ_sizes_get,"c":_exit,"i":_fd_close,"la":_fd_fdstat_get,"u":_fd_read,"$":_fd_seek,"ka":_fd_sync,"p":_fd_write,"ea":_flock,"da":_gai_strerror,"ca":_getTempRet0,"e":_gettimeofday,"ba":_gmtime_r,"aa":invoke_vi,"W":_llvm_eh_typeid_for,"l":_localtime_r,"V":_mono_set_timeout,"U":_mono_wasm_add_array_item,"_":_mono_wasm_add_enum_var,"T":_mono_wasm_add_frame,"Z":_mono_wasm_add_func_var,"Y":_mono_wasm_add_obj_var,"k":_mono_wasm_add_properties_var,"b":_mono_wasm_add_typed_value,"s":_mono_wasm_asm_loaded,"S":_mono_wasm_bind_core_object,"R":_mono_wasm_bind_host_object,"r":_mono_wasm_fire_bp,"Q":_mono_wasm_fire_exception,"P":_mono_wasm_get_by_index,"O":_mono_wasm_get_global_object,"N":_mono_wasm_get_object_property,"M":_mono_wasm_invoke_js_blazor,"L":_mono_wasm_invoke_js_marshalled,"K":_mono_wasm_invoke_js_unmarshalled,"J":_mono_wasm_invoke_js_with_args,"I":_mono_wasm_new,"H":_mono_wasm_release_handle,"G":_mono_wasm_release_object,"F":_mono_wasm_set_by_index,"X":_mono_wasm_set_is_async_method,"E":_mono_wasm_set_object_property,"D":_mono_wasm_typed_array_copy_from,"C":_mono_wasm_typed_array_copy_to,"B":_mono_wasm_typed_array_from,"A":_mono_wasm_typed_array_to_array,"z":_schedule_background_exec,"o":_strftime,"g":_sysconf,"n":_time,"y":_tzset};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Ua"]).apply(null,arguments)};var _mono_wasm_register_root=Module["_mono_wasm_register_root"]=function(){return(_mono_wasm_register_root=Module["_mono_wasm_register_root"]=Module["asm"]["Va"]).apply(null,arguments)};var _mono_wasm_deregister_root=Module["_mono_wasm_deregister_root"]=function(){return(_mono_wasm_deregister_root=Module["_mono_wasm_deregister_root"]=Module["asm"]["Wa"]).apply(null,arguments)};var _mono_wasm_add_assembly=Module["_mono_wasm_add_assembly"]=function(){return(_mono_wasm_add_assembly=Module["_mono_wasm_add_assembly"]=Module["asm"]["Xa"]).apply(null,arguments)};var _mono_wasm_add_satellite_assembly=Module["_mono_wasm_add_satellite_assembly"]=function(){return(_mono_wasm_add_satellite_assembly=Module["_mono_wasm_add_satellite_assembly"]=Module["asm"]["Ya"]).apply(null,arguments)};var _mono_wasm_setenv=Module["_mono_wasm_setenv"]=function(){return(_mono_wasm_setenv=Module["_mono_wasm_setenv"]=Module["asm"]["Za"]).apply(null,arguments)};var _mono_wasm_register_bundled_satellite_assemblies=Module["_mono_wasm_register_bundled_satellite_assemblies"]=function(){return(_mono_wasm_register_bundled_satellite_assemblies=Module["_mono_wasm_register_bundled_satellite_assemblies"]=Module["asm"]["_a"]).apply(null,arguments)};var _mono_wasm_load_runtime=Module["_mono_wasm_load_runtime"]=function(){return(_mono_wasm_load_runtime=Module["_mono_wasm_load_runtime"]=Module["asm"]["$a"]).apply(null,arguments)};var _mono_wasm_assembly_load=Module["_mono_wasm_assembly_load"]=function(){return(_mono_wasm_assembly_load=Module["_mono_wasm_assembly_load"]=Module["asm"]["ab"]).apply(null,arguments)};var _mono_wasm_find_corlib_class=Module["_mono_wasm_find_corlib_class"]=function(){return(_mono_wasm_find_corlib_class=Module["_mono_wasm_find_corlib_class"]=Module["asm"]["bb"]).apply(null,arguments)};var _mono_wasm_assembly_find_class=Module["_mono_wasm_assembly_find_class"]=function(){return(_mono_wasm_assembly_find_class=Module["_mono_wasm_assembly_find_class"]=Module["asm"]["cb"]).apply(null,arguments)};var _mono_wasm_assembly_find_method=Module["_mono_wasm_assembly_find_method"]=function(){return(_mono_wasm_assembly_find_method=Module["_mono_wasm_assembly_find_method"]=Module["asm"]["db"]).apply(null,arguments)};var _mono_wasm_get_delegate_invoke=Module["_mono_wasm_get_delegate_invoke"]=function(){return(_mono_wasm_get_delegate_invoke=Module["_mono_wasm_get_delegate_invoke"]=Module["asm"]["eb"]).apply(null,arguments)};var _mono_wasm_box_primitive=Module["_mono_wasm_box_primitive"]=function(){return(_mono_wasm_box_primitive=Module["_mono_wasm_box_primitive"]=Module["asm"]["fb"]).apply(null,arguments)};var _mono_wasm_invoke_method=Module["_mono_wasm_invoke_method"]=function(){return(_mono_wasm_invoke_method=Module["_mono_wasm_invoke_method"]=Module["asm"]["gb"]).apply(null,arguments)};var _mono_wasm_assembly_get_entry_point=Module["_mono_wasm_assembly_get_entry_point"]=function(){return(_mono_wasm_assembly_get_entry_point=Module["_mono_wasm_assembly_get_entry_point"]=Module["asm"]["hb"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ib"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["jb"]).apply(null,arguments)};var _mono_wasm_string_get_utf8=Module["_mono_wasm_string_get_utf8"]=function(){return(_mono_wasm_string_get_utf8=Module["_mono_wasm_string_get_utf8"]=Module["asm"]["kb"]).apply(null,arguments)};var _mono_wasm_string_convert=Module["_mono_wasm_string_convert"]=function(){return(_mono_wasm_string_convert=Module["_mono_wasm_string_convert"]=Module["asm"]["lb"]).apply(null,arguments)};var _mono_wasm_string_from_js=Module["_mono_wasm_string_from_js"]=function(){return(_mono_wasm_string_from_js=Module["_mono_wasm_string_from_js"]=Module["asm"]["mb"]).apply(null,arguments)};var _mono_wasm_string_from_utf16=Module["_mono_wasm_string_from_utf16"]=function(){return(_mono_wasm_string_from_utf16=Module["_mono_wasm_string_from_utf16"]=Module["asm"]["nb"]).apply(null,arguments)};var _mono_wasm_get_obj_type=Module["_mono_wasm_get_obj_type"]=function(){return(_mono_wasm_get_obj_type=Module["_mono_wasm_get_obj_type"]=Module["asm"]["ob"]).apply(null,arguments)};var _mono_wasm_try_unbox_primitive_and_get_type=Module["_mono_wasm_try_unbox_primitive_and_get_type"]=function(){return(_mono_wasm_try_unbox_primitive_and_get_type=Module["_mono_wasm_try_unbox_primitive_and_get_type"]=Module["asm"]["pb"]).apply(null,arguments)};var _mono_unbox_int=Module["_mono_unbox_int"]=function(){return(_mono_unbox_int=Module["_mono_unbox_int"]=Module["asm"]["qb"]).apply(null,arguments)};var _mono_wasm_array_length=Module["_mono_wasm_array_length"]=function(){return(_mono_wasm_array_length=Module["_mono_wasm_array_length"]=Module["asm"]["rb"]).apply(null,arguments)};var _mono_wasm_array_get=Module["_mono_wasm_array_get"]=function(){return(_mono_wasm_array_get=Module["_mono_wasm_array_get"]=Module["asm"]["sb"]).apply(null,arguments)};var _mono_wasm_obj_array_new=Module["_mono_wasm_obj_array_new"]=function(){return(_mono_wasm_obj_array_new=Module["_mono_wasm_obj_array_new"]=Module["asm"]["tb"]).apply(null,arguments)};var _mono_wasm_obj_array_set=Module["_mono_wasm_obj_array_set"]=function(){return(_mono_wasm_obj_array_set=Module["_mono_wasm_obj_array_set"]=Module["asm"]["ub"]).apply(null,arguments)};var _mono_wasm_string_array_new=Module["_mono_wasm_string_array_new"]=function(){return(_mono_wasm_string_array_new=Module["_mono_wasm_string_array_new"]=Module["asm"]["vb"]).apply(null,arguments)};var _mono_wasm_exec_regression=Module["_mono_wasm_exec_regression"]=function(){return(_mono_wasm_exec_regression=Module["_mono_wasm_exec_regression"]=Module["asm"]["wb"]).apply(null,arguments)};var _mono_wasm_exit=Module["_mono_wasm_exit"]=function(){return(_mono_wasm_exit=Module["_mono_wasm_exit"]=Module["asm"]["xb"]).apply(null,arguments)};var _mono_wasm_set_main_args=Module["_mono_wasm_set_main_args"]=function(){return(_mono_wasm_set_main_args=Module["_mono_wasm_set_main_args"]=Module["asm"]["yb"]).apply(null,arguments)};var _mono_wasm_strdup=Module["_mono_wasm_strdup"]=function(){return(_mono_wasm_strdup=Module["_mono_wasm_strdup"]=Module["asm"]["zb"]).apply(null,arguments)};var _mono_wasm_parse_runtime_options=Module["_mono_wasm_parse_runtime_options"]=function(){return(_mono_wasm_parse_runtime_options=Module["_mono_wasm_parse_runtime_options"]=Module["asm"]["Ab"]).apply(null,arguments)};var _mono_wasm_enable_on_demand_gc=Module["_mono_wasm_enable_on_demand_gc"]=function(){return(_mono_wasm_enable_on_demand_gc=Module["_mono_wasm_enable_on_demand_gc"]=Module["asm"]["Bb"]).apply(null,arguments)};var _mono_wasm_intern_string=Module["_mono_wasm_intern_string"]=function(){return(_mono_wasm_intern_string=Module["_mono_wasm_intern_string"]=Module["asm"]["Cb"]).apply(null,arguments)};var _mono_wasm_typed_array_new=Module["_mono_wasm_typed_array_new"]=function(){return(_mono_wasm_typed_array_new=Module["_mono_wasm_typed_array_new"]=Module["asm"]["Db"]).apply(null,arguments)};var _mono_wasm_unbox_enum=Module["_mono_wasm_unbox_enum"]=function(){return(_mono_wasm_unbox_enum=Module["_mono_wasm_unbox_enum"]=Module["asm"]["Eb"]).apply(null,arguments)};var _memset=Module["_memset"]=function(){return(_memset=Module["_memset"]=Module["asm"]["Fb"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["Gb"]).apply(null,arguments)};var _putchar=Module["_putchar"]=function(){return(_putchar=Module["_putchar"]=Module["asm"]["Hb"]).apply(null,arguments)};var _mono_background_exec=Module["_mono_background_exec"]=function(){return(_mono_background_exec=Module["_mono_background_exec"]=Module["asm"]["Ib"]).apply(null,arguments)};var _mono_wasm_get_icudt_name=Module["_mono_wasm_get_icudt_name"]=function(){return(_mono_wasm_get_icudt_name=Module["_mono_wasm_get_icudt_name"]=Module["asm"]["Jb"]).apply(null,arguments)};var _mono_wasm_load_icu_data=Module["_mono_wasm_load_icu_data"]=function(){return(_mono_wasm_load_icu_data=Module["_mono_wasm_load_icu_data"]=Module["asm"]["Kb"]).apply(null,arguments)};var _mono_print_method_from_ip=Module["_mono_print_method_from_ip"]=function(){return(_mono_print_method_from_ip=Module["_mono_print_method_from_ip"]=Module["asm"]["Lb"]).apply(null,arguments)};var _mono_set_timeout_exec=Module["_mono_set_timeout_exec"]=function(){return(_mono_set_timeout_exec=Module["_mono_set_timeout_exec"]=Module["asm"]["Mb"]).apply(null,arguments)};var _mono_wasm_pause_on_exceptions=Module["_mono_wasm_pause_on_exceptions"]=function(){return(_mono_wasm_pause_on_exceptions=Module["_mono_wasm_pause_on_exceptions"]=Module["asm"]["Nb"]).apply(null,arguments)};var _mono_wasm_setup_single_step=Module["_mono_wasm_setup_single_step"]=function(){return(_mono_wasm_setup_single_step=Module["_mono_wasm_setup_single_step"]=Module["asm"]["Ob"]).apply(null,arguments)};var _mono_wasm_clear_all_breakpoints=Module["_mono_wasm_clear_all_breakpoints"]=function(){return(_mono_wasm_clear_all_breakpoints=Module["_mono_wasm_clear_all_breakpoints"]=Module["asm"]["Pb"]).apply(null,arguments)};var _mono_wasm_set_breakpoint=Module["_mono_wasm_set_breakpoint"]=function(){return(_mono_wasm_set_breakpoint=Module["_mono_wasm_set_breakpoint"]=Module["asm"]["Qb"]).apply(null,arguments)};var _mono_wasm_remove_breakpoint=Module["_mono_wasm_remove_breakpoint"]=function(){return(_mono_wasm_remove_breakpoint=Module["_mono_wasm_remove_breakpoint"]=Module["asm"]["Rb"]).apply(null,arguments)};var _mono_wasm_current_bp_id=Module["_mono_wasm_current_bp_id"]=function(){return(_mono_wasm_current_bp_id=Module["_mono_wasm_current_bp_id"]=Module["asm"]["Sb"]).apply(null,arguments)};var _mono_wasm_enum_frames=Module["_mono_wasm_enum_frames"]=function(){return(_mono_wasm_enum_frames=Module["_mono_wasm_enum_frames"]=Module["asm"]["Tb"]).apply(null,arguments)};var _mono_wasm_set_variable_on_frame=Module["_mono_wasm_set_variable_on_frame"]=function(){return(_mono_wasm_set_variable_on_frame=Module["_mono_wasm_set_variable_on_frame"]=Module["asm"]["Ub"]).apply(null,arguments)};var _mono_wasm_get_deref_ptr_value=Module["_mono_wasm_get_deref_ptr_value"]=function(){return(_mono_wasm_get_deref_ptr_value=Module["_mono_wasm_get_deref_ptr_value"]=Module["asm"]["Vb"]).apply(null,arguments)};var _mono_wasm_get_local_vars=Module["_mono_wasm_get_local_vars"]=function(){return(_mono_wasm_get_local_vars=Module["_mono_wasm_get_local_vars"]=Module["asm"]["Wb"]).apply(null,arguments)};var _mono_wasm_get_object_properties=Module["_mono_wasm_get_object_properties"]=function(){return(_mono_wasm_get_object_properties=Module["_mono_wasm_get_object_properties"]=Module["asm"]["Xb"]).apply(null,arguments)};var _mono_wasm_get_array_values=Module["_mono_wasm_get_array_values"]=function(){return(_mono_wasm_get_array_values=Module["_mono_wasm_get_array_values"]=Module["asm"]["Yb"]).apply(null,arguments)};var _mono_wasm_invoke_getter_on_object=Module["_mono_wasm_invoke_getter_on_object"]=function(){return(_mono_wasm_invoke_getter_on_object=Module["_mono_wasm_invoke_getter_on_object"]=Module["asm"]["Zb"]).apply(null,arguments)};var _mono_wasm_set_value_on_object=Module["_mono_wasm_set_value_on_object"]=function(){return(_mono_wasm_set_value_on_object=Module["_mono_wasm_set_value_on_object"]=Module["asm"]["_b"]).apply(null,arguments)};var _mono_wasm_invoke_getter_on_value=Module["_mono_wasm_invoke_getter_on_value"]=function(){return(_mono_wasm_invoke_getter_on_value=Module["_mono_wasm_invoke_getter_on_value"]=Module["asm"]["$b"]).apply(null,arguments)};var _mono_wasm_set_is_debugger_attached=Module["_mono_wasm_set_is_debugger_attached"]=function(){return(_mono_wasm_set_is_debugger_attached=Module["_mono_wasm_set_is_debugger_attached"]=Module["asm"]["ac"]).apply(null,arguments)};var _ntohs=Module["_ntohs"]=function(){return(_ntohs=Module["_ntohs"]=Module["asm"]["bc"]).apply(null,arguments)};var _htons=Module["_htons"]=function(){return(_htons=Module["_htons"]=Module["asm"]["cc"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["dc"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["ec"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["fc"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["gc"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["hc"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ic"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["jc"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["kc"]).apply(null,arguments)};function invoke_vi(index,a1){var sp=stackSave();try{wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ArrayToString"]=UTF8ArrayToString;Module["UTF8ToString"]=UTF8ToString;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["addFunction"]=addFunction;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();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){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run();
-
-// SIG // Begin signature block
-// SIG // MIIkiQYJKoZIhvcNAQcCoIIkejCCJHYCAQExDzANBglg
-// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
-// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
-// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
-// SIG // PLeKwAgCwe2CPN782zkeEf0KfzZbJmCrLpS8iENFFtWg
-// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA
-// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV
-// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
-// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
-// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
-// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX
-// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR
-// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
-// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
-// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB
-// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW
-// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc
-// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb
-// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi
-// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk
-// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF
-// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO
-// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa
-// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp
-// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3
-// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym
-// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq
-// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB
-// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3
-// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw
-// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy
-// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf
-// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU
-// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv
-// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw
-// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv
-// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw
-// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA
-// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB
-// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA
-// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP
-// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe
-// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi
-// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY
-// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO
-// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM
-// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN
-// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm
-// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW
-// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F
-// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3
-// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV
-// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1
-// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
-// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
-// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
-// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
-// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
-// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5
-// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET
-// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
-// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
-// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu
-// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC
-// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf
-// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI
-// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv
-// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y
-// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT
-// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
-// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
-// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD
-// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf
-// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji
-// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys
-// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn
-// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB
-// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx
-// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT
-// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA
-// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
-// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE
-// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw
-// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC
-// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL
-// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
-// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
-// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF
-// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
-// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
-// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu
-// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
-// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu
-// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf
-// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA
-// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou
-// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+
-// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS
-// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE
-// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V
-// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu
-// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
-// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
-// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c
-// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN
-// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f
-// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA
-// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3
-// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8
-// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7
-// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ
-// SIG // UnMTDXpQzTGCFfEwghXtAgEBMIGVMH4xCzAJBgNVBAYT
-// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
-// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
-// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl
-// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A
-// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN
-// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
-// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIO+j
-// SIG // /BZlk1fhkXEi+WULmsUiSkNrwq1x/0ZWBzjJYz6KMEIG
-// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv
-// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w
-// SIG // DQYJKoZIhvcNAQEBBQAEggGAFA2yiPcmjO5fRqia9Wia
-// SIG // uE4PtJ1/ht2JzVjgxuO5qR65vahC3mqQYtuP4Rob01W+
-// SIG // jMrXoGElLlAmcDnjer7uVhNdojFma3G8HmuxLZdXMq1f
-// SIG // +aJI3O+nM5vZKHaBY9pYxU1pa3TkUvtZZ/YJFBdhbKZD
-// SIG // Ls1MYVhTkSwDeneYZoTMnUuGRHh+PaId1aHZKpYlVtdV
-// SIG // j7fe4MA69cxp/L1/kImlYrXyEOCKsjMoYP2+2oPVsCSd
-// SIG // EqGO7WjkMCeL+pVy0jJhp33rc/zQcmlPckMUNfj7PCxH
-// SIG // u8uiphWyyKqYnsw+GSFMNwmREcQBSn7eN6/Vba07M74M
-// SIG // O3izrFGoobjArchg5sSefgDBSURVDhZgb/0c+MOXH3o1
-// SIG // LvJratAGmsYH6l7UYF03diOLAUENmv+xODrOs7zkH7hJ
-// SIG // A9wGcELhUZjHA9YiGpc/ArBooRskd+F+uo7PCndVOSVq
-// SIG // LNCIqeZcl20g/lskSIAh6ww5+ELR+TiC+P+N/du+FBHY
-// SIG // doBM1fBaoYIS+zCCEvcGCisGAQQBgjcDAwExghLnMIIS
-// SIG // 4wYJKoZIhvcNAQcCoIIS1DCCEtACAQMxDzANBglghkgB
-// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw
-// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB
-// SIG // BQAEIF9W/UlnlTLeyoCPkSO+Vze4KnVZVhXQet9xGpGD
-// SIG // VDUBAgZgsBDDb7UYEzIwMjEwNjAzMTAyNzI0LjIxMlow
-// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5KMIIE
-// SIG // +TCCA+GgAwIBAgITMwAAAUGvf1KXXPLcRQAAAAABQTAN
-// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
-// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
-// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
-// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
-// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjdaFw0yMjAxMTIx
-// SIG // NzI4MjdaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
-// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD
-// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z
-// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO
-// SIG // OkQwODItNEJGRC1FRUJBMSUwIwYDVQQDExxNaWNyb3Nv
-// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG
-// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8irLqL28dal+PJUm
-// SIG // UJOwvYn/sOCEzQzZyj94XbFPtRhDhPjagvvKOv1GgMoO
-// SIG // uXvkpM3uM5E67vyOCPxqhTAzq7Ak3zkEXXBv7JoM8Xm0
-// SIG // x5UcnAkpUiEo0eycRl6bnYIB3KlZW3uz4Jc2v2FV0KCG
-// SIG // kLrvqfKP8V/i2hVyN854OejWpx8wGUazM4CYUVowcgED
-// SIG // c76OY+Xa4W27DCZJm2f9ol4BjSL+b2L/T8n/LEGknaUx
-// SIG // wSQTN1LQCt+uBDCASd6VQR5CLLJVt6MBL0W1NlaWxEAJ
-// SIG // wlIdyBnS1ihLvRg1jc/KUZe0sRFdD3fhKrjPac3hoy00
-// SIG // 7Fvr6Go0WJ4pr2rJdQIDAQABo4IBGzCCARcwHQYDVR0O
-// SIG // BBYEFC0oPyxuLpD9RXBr9c8NO0EFEsbEMB8GA1UdIwQY
-// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP
-// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y
-// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI
-// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct
-// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI
-// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBAFJ63yJ9
-// SIG // 2ChqCgpexD48okviGuC4ikNsvmwlCSet1sFpvJEzLJB8
-// SIG // cTF4z4qQTz8AsQtcew6mAVmQCYDu9f5ee11xXj1LwHYs
-// SIG // ZGnSs/OfRul1VKmY51OQpqvK5O/Ct4fs0Iblzo8eyOLJ
-// SIG // ygTk97aXVA4Uzq8GblL7LQ5XiwAY446MOALnNXFo/Kq9
-// SIG // tvzipwY1YcRn/nlMQ+b92OiLLmHVMi2wAUORiKFvaAfY
-// SIG // WjhQd+2qHLMsdpNluwBbWe7FF5ABsDo0HROMWyCgxdLQ
-// SIG // 3vqr3DMSH3ZWKiirFsvWJmchfZPGRObwqszvSXPFmPBZ
-// SIG // 9o+er+4UoLV+50GWnnQky7HVgLkwggZxMIIEWaADAgEC
-// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw
-// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
-// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
-// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
-// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
-// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa
-// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
-// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
-// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN
-// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR
-// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh
-// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg
-// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg
-// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG
-// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX
-// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy
-// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB
-// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw
-// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK
-// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA
-// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
-// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
-// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
-// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
-// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
-// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93
-// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
-// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E
-// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC
-// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k
-// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0
-// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA
-// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF
-// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P
-// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI
-// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL
-// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ
-// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y
-// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL
-// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38
-// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+
-// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ
-// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl
-// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30
-// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp
-// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR
-// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj
-// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1
-// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLUMIICPQIB
-// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH
-// SIG // BgUrDgMCGgMVAKrlvym1CquIoQcrzncLvkD1WpUDoIGD
-// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
-// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
-// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
-// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
-// SIG // DQYJKoZIhvcNAQEFBQACBQDkYyCxMCIYDzIwMjEwNjAz
-// SIG // MTczNDQxWhgPMjAyMTA2MDQxNzM0NDFaMHQwOgYKKwYB
-// SIG // BAGEWQoEATEsMCowCgIFAORjILECAQAwBwIBAAICEcww
-// SIG // BwIBAAICEgswCgIFAORkcjECAQAwNgYKKwYBBAGEWQoE
-// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEK
-// SIG // MAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQBtyFzG
-// SIG // N2gJJZ3T6Dzxrw0RoLe9MAvzpz7H2wn8BMAuUs68+9Sz
-// SIG // 0qPPgY06wPmE9dqyNzKBjwQrPnJ/qIegjqxgIAazKKN2
-// SIG // hxkAF/kZg0zTK4jDKKUAzIlSwaXbpD19RKHHRdyXGu/0
-// SIG // xlUHCFogRUpH8CZQsXulgvS7H0jiYUkTLTGCAw0wggMJ
-// SIG // AgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
-// SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
-// SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
-// SIG // BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
-// SIG // AhMzAAABQa9/Updc8txFAAAAAAFBMA0GCWCGSAFlAwQC
-// SIG // AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ
-// SIG // AQQwLwYJKoZIhvcNAQkEMSIEIDpRwFQTDOc8xcJlaU+j
-// SIG // NiTtrqf2gu9E6sxjCfitRM3RMIH6BgsqhkiG9w0BCRAC
-// SIG // LzGB6jCB5zCB5DCBvQQgUT8BPIzqc3SecHRPLKBtW0vO
-// SIG // OnT+78haWo+XcxVerd4wgZgwgYCkfjB8MQswCQYDVQQG
-// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
-// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
-// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
-// SIG // ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAUGvf1KXXPLcRQAA
-// SIG // AAABQTAiBCDEmllKq6p2dSDRT7WXEfJzMnBQlv3YcYTQ
-// SIG // /uWbkawwhzANBgkqhkiG9w0BAQsFAASCAQAhfBpb75wo
-// SIG // So2gcoQJiDZ9lV0kGglSZX1BDF8J62A6IVx2Pmn7D4IY
-// SIG // IKXiWQe19jI1zYw8TuiFUPzFNQbkdJHvt3P8A4FoowN3
-// SIG // tMwdX6Vh5pisICKU05HguvtJ8sc6iVBPTk7LFHG/+n3p
-// SIG // Wf/9ou6BZkxdYddKcn9Aw1udIEc+mXLrji6BrJmE8Fr4
-// SIG // rXOutJkFBTBOyDfxeBqqb3EzcH620EQL9CEShF4Ozs14
-// SIG // QAdOnIGLdDYe0QCqZh13uT1o4d6vp374oi78tV8ledom
-// SIG // 9JJe0S6eeUr8/Pvl4p5qkPNIlZKDVKdj9DNUHIGj/Gac
-// SIG // OJi52Nnfjra0FMb1/kMTkRZa
-// SIG // End signature block
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.timezones.blat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.timezones.blat
deleted file mode 100644
index 2b8309168c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.timezones.blat and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.wasm b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.wasm
deleted file mode 100644
index 8c6ce02850..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.wasm and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet_support.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet_support.js
deleted file mode 100644
index d4b54ff863..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet_support.js
+++ /dev/null
@@ -1,382 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-var DotNetSupportLib = {
- $DOTNET: {
- conv_string: function (mono_obj) {
- return MONO.string_decoder.copy (mono_obj);
- }
- },
- mono_wasm_invoke_js_blazor: function(exceptionMessage, callInfo, arg0, arg1, arg2) {
- var mono_string = globalThis._mono_string_cached
- || (globalThis._mono_string_cached = Module.cwrap('mono_wasm_string_from_js', 'number', ['string']));
-
- try {
- var blazorExports = globalThis.Blazor;
- if (!blazorExports) {
- throw new Error('The blazor.webassembly.js library is not loaded.');
- }
-
- return blazorExports._internal.invokeJSFromDotNet(callInfo, arg0, arg1, arg2);
- } catch (ex) {
- var exceptionJsString = ex.message + '\n' + ex.stack;
- var exceptionSystemString = mono_string(exceptionJsString);
- setValue (exceptionMessage, exceptionSystemString, 'i32'); // *exceptionMessage = exceptionSystemString;
- return 0;
- }
- },
-
- // This is for back-compat only and will eventually be removed
- mono_wasm_invoke_js_marshalled: function(exceptionMessage, asyncHandleLongPtr, functionName, argsJson, treatResultAsVoid) {
-
- var mono_string = globalThis._mono_string_cached
- || (globalThis._mono_string_cached = Module.cwrap('mono_wasm_string_from_js', 'number', ['string']));
-
- try {
- // Passing a .NET long into JS via Emscripten is tricky. The method here is to pass
- // as pointer to the long, then combine two reads from the HEAPU32 array.
- // Even though JS numbers can't represent the full range of a .NET long, it's OK
- // because we'll never exceed Number.MAX_SAFE_INTEGER (2^53 - 1) in this case.
- //var u32Index = $1 >> 2;
- var u32Index = asyncHandleLongPtr >> 2;
- var asyncHandleJsNumber = Module.HEAPU32[u32Index + 1]*4294967296 + Module.HEAPU32[u32Index];
-
- // var funcNameJsString = UTF8ToString (functionName);
- // var argsJsonJsString = argsJson && UTF8ToString (argsJson);
- var funcNameJsString = DOTNET.conv_string(functionName);
- var argsJsonJsString = argsJson && DOTNET.conv_string (argsJson);
-
- var dotNetExports = globaThis.DotNet;
- if (!dotNetExports) {
- throw new Error('The Microsoft.JSInterop.js library is not loaded.');
- }
-
- if (asyncHandleJsNumber) {
- dotNetExports.jsCallDispatcher.beginInvokeJSFromDotNet(asyncHandleJsNumber, funcNameJsString, argsJsonJsString, treatResultAsVoid);
- return 0;
- } else {
- var resultJson = dotNetExports.jsCallDispatcher.invokeJSFromDotNet(funcNameJsString, argsJsonJsString, treatResultAsVoid);
- return resultJson === null ? 0 : mono_string(resultJson);
- }
- } catch (ex) {
- var exceptionJsString = ex.message + '\n' + ex.stack;
- var exceptionSystemString = mono_string(exceptionJsString);
- setValue (exceptionMessage, exceptionSystemString, 'i32'); // *exceptionMessage = exceptionSystemString;
- return 0;
- }
- },
-
- // This is for back-compat only and will eventually be removed
- mono_wasm_invoke_js_unmarshalled: function(exceptionMessage, funcName, arg0, arg1, arg2) {
- try {
- // Get the function you're trying to invoke
- var funcNameJsString = DOTNET.conv_string(funcName);
- var dotNetExports = globalThis.DotNet;
- if (!dotNetExports) {
- throw new Error('The Microsoft.JSInterop.js library is not loaded.');
- }
- var funcInstance = dotNetExports.jsCallDispatcher.findJSFunction(funcNameJsString);
-
- return funcInstance.call(null, arg0, arg1, arg2);
- } catch (ex) {
- var exceptionJsString = ex.message + '\n' + ex.stack;
- var mono_string = Module.cwrap('mono_wasm_string_from_js', 'number', ['string']); // TODO: Cache
- var exceptionSystemString = mono_string(exceptionJsString);
- setValue (exceptionMessage, exceptionSystemString, 'i32'); // *exceptionMessage = exceptionSystemString;
- return 0;
- }
- }
-
-
-};
-
-autoAddDeps(DotNetSupportLib, '$DOTNET')
-mergeInto(LibraryManager.library, DotNetSupportLib)
-
-
-// SIG // Begin signature block
-// SIG // MIIkiQYJKoZIhvcNAQcCoIIkejCCJHYCAQExDzANBglg
-// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
-// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
-// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
-// SIG // DQxM5aUosMIFmI353dLRcro0jWTAvinWkY5FLkoNZqCg
-// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA
-// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV
-// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
-// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
-// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
-// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX
-// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR
-// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
-// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
-// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB
-// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW
-// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc
-// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb
-// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi
-// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk
-// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF
-// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO
-// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa
-// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp
-// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3
-// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym
-// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq
-// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB
-// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3
-// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw
-// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy
-// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf
-// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU
-// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv
-// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw
-// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv
-// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw
-// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA
-// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB
-// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA
-// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP
-// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe
-// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi
-// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY
-// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO
-// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM
-// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN
-// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm
-// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW
-// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F
-// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3
-// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV
-// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1
-// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
-// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
-// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
-// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
-// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
-// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5
-// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET
-// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
-// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
-// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu
-// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC
-// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf
-// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI
-// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv
-// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y
-// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT
-// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
-// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
-// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD
-// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf
-// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji
-// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys
-// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn
-// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB
-// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx
-// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT
-// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA
-// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
-// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE
-// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw
-// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC
-// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL
-// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
-// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
-// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF
-// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
-// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
-// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu
-// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
-// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu
-// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf
-// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA
-// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou
-// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+
-// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS
-// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE
-// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V
-// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu
-// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
-// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
-// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c
-// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN
-// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f
-// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA
-// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3
-// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8
-// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7
-// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ
-// SIG // UnMTDXpQzTGCFfEwghXtAgEBMIGVMH4xCzAJBgNVBAYT
-// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
-// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
-// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl
-// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A
-// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN
-// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
-// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIPei
-// SIG // aMpT7aW0G0eaO4V7u+OYsUIWBD2V6EuD1ajffj24MEIG
-// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv
-// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w
-// SIG // DQYJKoZIhvcNAQEBBQAEggGASEblTgnTmkn+iGPTMgPr
-// SIG // +5uptto3kTMfvkelPQ3w/xHmtXcAdH24QMN1aSgRgQkH
-// SIG // oHsEzQgzSVBwR5jRH/yeM8rA3JqNHY7Gqo1Mhjz6KSxh
-// SIG // 4n1YHmD+QYcpt1jSkqWvV6APQhsYyFv+0SsiAErlDRrv
-// SIG // vuIHM5xjmVi5yjW2GGOLDtKN0UOtWS3Fagjdv4L02kXi
-// SIG // a4XX9rRjzh8ykJawJrd/OgFKbBZlk/O/5ClWVMQ0ijoQ
-// SIG // 5Gb2olho4CZ3M0cqsCigz8GMtQDEKb2y4MYYUrKHlkmo
-// SIG // tW+q5Jqhw+ocM7sOIz/EIWfjw/D+Lz44N2oQag0MwW0o
-// SIG // 0JBk4TcqIHkiYZ1At70J118HmWllMsh35TDgZTD6Ds7W
-// SIG // NEG9Y7e+0GwRiva/wLQq/L6vGDtMfBXBJCwpNuwlniok
-// SIG // bY4LFW45OtTkCBleFPyuTyNzz7DkG0+XJhE5fw3H6Tsy
-// SIG // VgHbV3fAUM76vS/rVrihi6M+M7HejkC7il15R8lqm2La
-// SIG // NUG0IugSoYIS+zCCEvcGCisGAQQBgjcDAwExghLnMIIS
-// SIG // 4wYJKoZIhvcNAQcCoIIS1DCCEtACAQMxDzANBglghkgB
-// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw
-// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB
-// SIG // BQAEILs+o5Vp2Uu3D+piTqZS72r4qxA46uSkXA4muDH6
-// SIG // FxXaAgZgsATplaQYEzIwMjEwNjAzMTAyNzI0LjIxN1ow
-// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5KMIIE
-// SIG // +TCCA+GgAwIBAgITMwAAAT7OyndSxfc0KwAAAAABPjAN
-// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
-// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
-// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
-// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
-// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjVaFw0yMjAxMTIx
-// SIG // NzI4MjVaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
-// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD
-// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z
-// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO
-// SIG // Ojg2REYtNEJCQy05MzM1MSUwIwYDVQQDExxNaWNyb3Nv
-// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG
-// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFTEyDzZfpws404g
-// SIG // SC0kt4VSyX/vaxwOfri89gQdxvfQNvvQARebKR3plqHz
-// SIG // 0ZHZW+bmFxyGtTh9zw20LSdpMcWYDFc1rzPuJvTNAnDk
-// SIG // KyQP+TqrW7j/lDlCLbqi8ubo4EqSpkHra0Zt15j2r/IJ
-// SIG // GZbu3QaRY6qYMZxxkkw4Y5ubAwV3E1p+TNzFg8nzgJ9k
-// SIG // wEM4xvZAf9NhHhM2K/jx092xmKxyFfp0X0tboY9d1Oyh
-// SIG // dCXl8spOigE32g8zH12Y2NXTfI4141LQU+9dKOKQ7YFF
-// SIG // 1kwofuGGwxMU0CsDimODWgr6VFVcNDd2tQbGubgdfLBG
-// SIG // EBfje0PyoOOXEO1m4QIDAQABo4IBGzCCARcwHQYDVR0O
-// SIG // BBYEFJNa8534u9BiLWvwtbZUDraGiP17MB8GA1UdIwQY
-// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP
-// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y
-// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI
-// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct
-// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI
-// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBAKaz+RF9
-// SIG // Wp+GkrkVj6cY5djCdVepJFyufABJ1qKlCWXhOoYAcB7w
-// SIG // 7ZxzRC4Z2iY4bc9QU93sa2YDwhQwFPeqfKZfWSkmrcus
-// SIG // 49QB9EGPc9FwIgfBQK2AJthaYEysTawS40f6yc6w/ybo
-// SIG // tAclqFAr+BPDt0zGZoExvGc8ZpVAZpvSyXbzGLuKtm8K
-// SIG // +R73VC4DUp4sRFck1Cx8ILvYdYSNYqORyh0Gwi3v4HWm
-// SIG // w6HutafFOdFjaKQEcSsn0SNLfY25qOqnu6DL+NAo7z3q
-// SIG // D0eBDISilWob5dllDcONfsu99UEtOnrbdl292yGNIyxi
-// SIG // lpI8XGNgGcZxKN6VqLBxAuKlWOYwggZxMIIEWaADAgEC
-// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw
-// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
-// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
-// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
-// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
-// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa
-// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
-// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
-// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN
-// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR
-// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh
-// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg
-// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg
-// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG
-// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX
-// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy
-// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB
-// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw
-// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK
-// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA
-// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
-// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
-// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
-// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
-// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
-// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93
-// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
-// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E
-// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC
-// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k
-// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0
-// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA
-// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF
-// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P
-// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI
-// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL
-// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ
-// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y
-// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL
-// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38
-// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+
-// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ
-// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl
-// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30
-// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp
-// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR
-// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj
-// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1
-// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLUMIICPQIB
-// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH
-// SIG // BgUrDgMCGgMVAKBMFej0xjCTjCk1sTdTKa+TzJDUoIGD
-// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
-// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
-// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
-// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
-// SIG // DQYJKoZIhvcNAQEFBQACBQDkYxTdMCIYDzIwMjEwNjAz
-// SIG // MTY0NDEzWhgPMjAyMTA2MDQxNjQ0MTNaMHQwOgYKKwYB
-// SIG // BAGEWQoEATEsMCowCgIFAORjFN0CAQAwBwIBAAICClww
-// SIG // BwIBAAICEWswCgIFAORkZl0CAQAwNgYKKwYBBAGEWQoE
-// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEK
-// SIG // MAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQCC1rRg
-// SIG // Um9T0Ah6EhW50sEN59pkZRy0IgWsJcHlLQpvuQsViBPR
-// SIG // T31t6DW2LGocHjECh7d4qMeTTFZkyQPxXQygdUlJ07FD
-// SIG // o4myvnoM60HYf8+Ol1NxBOFmmLbLhAGN7VQDFbpMHBQI
-// SIG // 4NMiG1Ac/PEu4PU/wsjlpVv69kzg2mek5DGCAw0wggMJ
-// SIG // AgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
-// SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
-// SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
-// SIG // BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
-// SIG // AhMzAAABPs7Kd1LF9zQrAAAAAAE+MA0GCWCGSAFlAwQC
-// SIG // AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ
-// SIG // AQQwLwYJKoZIhvcNAQkEMSIEICub1JDAL/AsiPiNlCbL
-// SIG // 6bT/2mCQpgIN5GH9eCiLaYMJMIH6BgsqhkiG9w0BCRAC
-// SIG // LzGB6jCB5zCB5DCBvQQgi+vOjaqNTvKOZGut49HXrqtw
-// SIG // Uj2ZCnVOurBwfgQxmxMwgZgwgYCkfjB8MQswCQYDVQQG
-// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
-// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
-// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
-// SIG // ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAT7OyndSxfc0KwAA
-// SIG // AAABPjAiBCDDg1tbQNT5a0tUZMwkkm3mp0UsTWCruFb9
-// SIG // MCaPExqjRDANBgkqhkiG9w0BAQsFAASCAQBH2iVHVOlH
-// SIG // VmptqEcBLS3eNS8ycIqxph4ALRJ1GnEZDaGCyvSiL/y0
-// SIG // 5Vx7GFvWSaRfZ8Kq0BgfWZEYCpq8uZ9gZYy1paDGU6Ps
-// SIG // YAZtQZak32SzipkHZsswC7W9ePKfMT4FV4tZtupRBgE6
-// SIG // 9J0PRnpXNRXwtZgAYyiKU8TVQsfUryRXYAKQily9GzwY
-// SIG // UG67G7umMk9LnycPNUlEgIbn58qhJ59lMDdbrWigHJLF
-// SIG // VXzfvWNXLIsMQKPZPgA1sCaUhLrBu+T3nFUX0R57ve7m
-// SIG // Xl2HoGZLdkA4V0pXYO5J7yCAvbGjEzm5lltyyQnYrqfx
-// SIG // 0RV0o3+4XN4MV2Blp63JcnTX
-// SIG // End signature block
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/driver.c b/Examples/Complete/Camera/Blazor/wwwroot/_framework/driver.c
deleted file mode 100644
index 515391815c..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/driver.c
+++ /dev/null
@@ -1,1118 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-// FIXME: unavailable in emscripten
-// #include
-
-#include
-
-#include
-#include
-#include
-#include
-
-#include "pinvoke.h"
-
-#ifdef CORE_BINDINGS
-void core_initialize_internals ();
-#endif
-
-// Blazor specific custom routines - see dotnet_support.js for backing code
-extern void* mono_wasm_invoke_js_blazor (MonoString **exceptionMessage, void *callInfo, void* arg0, void* arg1, void* arg2);
-// The following two are for back-compat and will eventually be removed
-extern void* mono_wasm_invoke_js_marshalled (MonoString **exceptionMessage, void *asyncHandleLongPtr, MonoString *funcName, MonoString *argsJson);
-extern void* mono_wasm_invoke_js_unmarshalled (MonoString **exceptionMessage, MonoString *funcName, void* arg0, void* arg1, void* arg2);
-
-void mono_wasm_enable_debugging (int);
-
-int mono_wasm_register_root (char *start, size_t size, const char *name);
-void mono_wasm_deregister_root (char *addr);
-
-void mono_ee_interp_init (const char *opts);
-void mono_marshal_ilgen_init (void);
-void mono_method_builder_ilgen_init (void);
-void mono_sgen_mono_ilgen_init (void);
-void mono_icall_table_init (void);
-void mono_aot_register_module (void **aot_info);
-char *monoeg_g_getenv(const char *variable);
-int monoeg_g_setenv(const char *variable, const char *value, int overwrite);
-int32_t monoeg_g_hasenv(const char *variable);
-void mono_free (void*);
-int32_t mini_parse_debug_option (const char *option);
-char *mono_method_get_full_name (MonoMethod *method);
-
-static MonoClass* datetime_class;
-static MonoClass* datetimeoffset_class;
-static MonoClass* uri_class;
-static MonoClass* task_class;
-static MonoClass* safehandle_class;
-static MonoClass* voidtaskresult_class;
-
-static int resolved_datetime_class = 0,
- resolved_datetimeoffset_class = 0,
- resolved_uri_class = 0,
- resolved_task_class = 0,
- resolved_safehandle_class = 0,
- resolved_voidtaskresult_class = 0;
-
-int mono_wasm_enable_gc = 1;
-
-/* Not part of public headers */
-#define MONO_ICALL_TABLE_CALLBACKS_VERSION 2
-
-typedef struct {
- int version;
- void* (*lookup) (MonoMethod *method, char *classname, char *methodname, char *sigstart, int32_t *uses_handles);
- const char* (*lookup_icall_symbol) (void* func);
-} MonoIcallTableCallbacks;
-
-void
-mono_install_icall_table_callbacks (const MonoIcallTableCallbacks *cb);
-
-int mono_regression_test_step (int verbose_level, char *image, char *method_name);
-void mono_trace_init (void);
-
-#define g_new(type, size) ((type *) malloc (sizeof (type) * (size)))
-#define g_new0(type, size) ((type *) calloc (sizeof (type), (size)))
-
-static MonoDomain *root_domain;
-
-static MonoString*
-mono_wasm_invoke_js (MonoString *str, int *is_exception)
-{
- if (str == NULL)
- return NULL;
-
- mono_unichar2 *native_val = mono_string_chars (str);
- int native_len = mono_string_length (str) * 2;
- int native_res_len;
- int *p_native_res_len = &native_res_len;
-
- mono_unichar2 *native_res = (mono_unichar2*)EM_ASM_INT ({
- var str = MONO.string_decoder.decode ($0, $0 + $1);
- try {
- var res = eval (str);
- if (res === null || res == undefined)
- return 0;
- res = res.toString ();
- setValue ($2, 0, "i32");
- } catch (e) {
- res = e.toString();
- setValue ($2, 1, "i32");
- if (res === null || res === undefined)
- res = "unknown exception";
-
- var stack = e.stack;
- if (stack) {
- // Some JS runtimes insert the error message at the top of the stack, some don't,
- // so normalize it by using the stack as the result if it already contains the error
- if (stack.startsWith(res))
- res = stack;
- else
- res += "\n" + stack;
- }
- }
- var buff = Module._malloc((res.length + 1) * 2);
- stringToUTF16 (res, buff, (res.length + 1) * 2);
- setValue ($3, res.length, "i32");
- return buff;
- }, (int)native_val, native_len, is_exception, p_native_res_len);
-
- if (native_res == NULL)
- return NULL;
-
- MonoString *res = mono_string_new_utf16 (mono_domain_get (), native_res, native_res_len);
- free (native_res);
- return res;
-}
-
-static void
-wasm_trace_logger (const char *log_domain, const char *log_level, const char *message, mono_bool fatal, void *user_data)
-{
- EM_ASM({
- var log_level = $0;
- var message = Module.UTF8ToString ($1);
- var isFatal = $2;
- var domain = Module.UTF8ToString ($3); // is this always Mono?
- var dataPtr = $4;
-
- if (MONO["logging"] && MONO.logging["trace"]) {
- MONO.logging.trace(domain, log_level, message, isFatal, dataPtr);
- return;
- }
-
- if (isFatal)
- console.trace (message);
-
- switch (Module.UTF8ToString ($0)) {
- case "critical":
- case "error":
- console.error (message);
- break;
- case "warning":
- console.warn (message);
- break;
- case "message":
- console.log (message);
- break;
- case "info":
- console.info (message);
- break;
- case "debug":
- console.debug (message);
- break;
- default:
- console.log (message);
- break;
- }
- }, log_level, message, fatal, log_domain, user_data);
-}
-
-typedef uint32_t target_mword;
-typedef target_mword SgenDescriptor;
-typedef SgenDescriptor MonoGCDescriptor;
-MONO_API int mono_gc_register_root (char *start, size_t size, MonoGCDescriptor descr, MonoGCRootSource source, void *key, const char *msg);
-void mono_gc_deregister_root (char* addr);
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_register_root (char *start, size_t size, const char *name)
-{
- return mono_gc_register_root (start, size, (MonoGCDescriptor)NULL, MONO_ROOT_SOURCE_EXTERNAL, NULL, name ? name : "mono_wasm_register_root");
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_deregister_root (char *addr)
-{
- mono_gc_deregister_root (addr);
-}
-
-#ifdef DRIVER_GEN
-#include "driver-gen.c"
-#endif
-
-typedef struct WasmAssembly_ WasmAssembly;
-
-struct WasmAssembly_ {
- MonoBundledAssembly assembly;
- WasmAssembly *next;
-};
-
-static WasmAssembly *assemblies;
-static int assembly_count;
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_add_assembly (const char *name, const unsigned char *data, unsigned int size)
-{
- int len = strlen (name);
- if (!strcasecmp (".pdb", &name [len - 4])) {
- char *new_name = strdup (name);
- //FIXME handle debugging assemblies with .exe extension
- strcpy (&new_name [len - 3], "dll");
- mono_register_symfile_for_assembly (new_name, data, size);
- return 1;
- }
- WasmAssembly *entry = g_new0 (WasmAssembly, 1);
- entry->assembly.name = strdup (name);
- entry->assembly.data = data;
- entry->assembly.size = size;
- entry->next = assemblies;
- assemblies = entry;
- ++assembly_count;
- return mono_has_pdb_checksum ((char*)data, size);
-}
-
-int
-mono_wasm_assembly_already_added (const char *assembly_name)
-{
- if (assembly_count == 0)
- return 0;
-
- WasmAssembly *entry = assemblies;
- while (entry != NULL) {
- int entry_name_minus_extn_len = strlen(entry->assembly.name) - 4;
- if (entry_name_minus_extn_len == strlen(assembly_name) && strncmp (entry->assembly.name, assembly_name, entry_name_minus_extn_len) == 0)
- return 1;
- entry = entry->next;
- }
-
- return 0;
-}
-
-typedef struct WasmSatelliteAssembly_ WasmSatelliteAssembly;
-
-struct WasmSatelliteAssembly_ {
- MonoBundledSatelliteAssembly *assembly;
- WasmSatelliteAssembly *next;
-};
-
-static WasmSatelliteAssembly *satellite_assemblies;
-static int satellite_assembly_count;
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_add_satellite_assembly (const char *name, const char *culture, const unsigned char *data, unsigned int size)
-{
- WasmSatelliteAssembly *entry = g_new0 (WasmSatelliteAssembly, 1);
- entry->assembly = mono_create_new_bundled_satellite_assembly (name, culture, data, size);
- entry->next = satellite_assemblies;
- satellite_assemblies = entry;
- ++satellite_assembly_count;
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_setenv (const char *name, const char *value)
-{
- monoeg_g_setenv (strdup (name), strdup (value), 1);
-}
-
-static void *sysglobal_native_handle;
-
-static void*
-wasm_dl_load (const char *name, int flags, char **err, void *user_data)
-{
- void* handle = wasm_dl_lookup_pinvoke_table (name);
- if (handle)
- return handle;
-
- if (!strcmp (name, "System.Globalization.Native"))
- return sysglobal_native_handle;
-
-#if WASM_SUPPORTS_DLOPEN
- return dlopen(name, flags);
-#endif
-
- return NULL;
-}
-
-static void*
-wasm_dl_symbol (void *handle, const char *name, char **err, void *user_data)
-{
- if (handle == sysglobal_native_handle)
- assert (0);
-
-#if WASM_SUPPORTS_DLOPEN
- if (!wasm_dl_is_pinvoke_tables (handle)) {
- return dlsym (handle, name);
- }
-#endif
-
- PinvokeImport *table = (PinvokeImport*)handle;
- for (int i = 0; table [i].name; ++i) {
- if (!strcmp (table [i].name, name))
- return table [i].func;
- }
- return NULL;
-}
-
-#if !defined(ENABLE_AOT) || defined(EE_MODE_LLVMONLY_INTERP)
-#define NEED_INTERP 1
-#ifndef LINK_ICALLS
-// FIXME: llvm+interp mode needs this to call icalls
-#define NEED_NORMAL_ICALL_TABLES 1
-#endif
-#endif
-
-#ifdef LINK_ICALLS
-
-#include "icall-table.h"
-
-static int
-compare_int (const void *k1, const void *k2)
-{
- return *(int*)k1 - *(int*)k2;
-}
-
-static void*
-icall_table_lookup (MonoMethod *method, char *classname, char *methodname, char *sigstart, int32_t *uses_handles)
-{
- uint32_t token = mono_method_get_token (method);
- assert (token);
- assert ((token & MONO_TOKEN_METHOD_DEF) == MONO_TOKEN_METHOD_DEF);
- uint32_t token_idx = token - MONO_TOKEN_METHOD_DEF;
-
- int *indexes = NULL;
- int indexes_size = 0;
- uint8_t *handles = NULL;
- void **funcs = NULL;
-
- *uses_handles = 0;
-
- const char *image_name = mono_image_get_name (mono_class_get_image (mono_method_get_class (method)));
-
-#if defined(ICALL_TABLE_mscorlib)
- if (!strcmp (image_name, "mscorlib")) {
- indexes = mscorlib_icall_indexes;
- indexes_size = sizeof (mscorlib_icall_indexes) / 4;
- handles = mscorlib_icall_handles;
- funcs = mscorlib_icall_funcs;
- assert (sizeof (mscorlib_icall_indexes [0]) == 4);
- }
-#endif
-#if defined(ICALL_TABLE_corlib)
- if (!strcmp (image_name, "System.Private.CoreLib")) {
- indexes = corlib_icall_indexes;
- indexes_size = sizeof (corlib_icall_indexes) / 4;
- handles = corlib_icall_handles;
- funcs = corlib_icall_funcs;
- assert (sizeof (corlib_icall_indexes [0]) == 4);
- }
-#endif
-#ifdef ICALL_TABLE_System
- if (!strcmp (image_name, "System")) {
- indexes = System_icall_indexes;
- indexes_size = sizeof (System_icall_indexes) / 4;
- handles = System_icall_handles;
- funcs = System_icall_funcs;
- }
-#endif
- assert (indexes);
-
- void *p = bsearch (&token_idx, indexes, indexes_size, 4, compare_int);
- if (!p) {
- return NULL;
- printf ("wasm: Unable to lookup icall: %s\n", mono_method_get_name (method));
- exit (1);
- }
-
- uint32_t idx = (int*)p - indexes;
- *uses_handles = handles [idx];
-
- //printf ("ICALL: %s %x %d %d\n", methodname, token, idx, (int)(funcs [idx]));
-
- return funcs [idx];
-}
-
-static const char*
-icall_table_lookup_symbol (void *func)
-{
- assert (0);
- return NULL;
-}
-
-#endif
-
-/*
- * get_native_to_interp:
- *
- * Return a pointer to a wasm function which can be used to enter the interpreter to
- * execute METHOD from native code.
- * EXTRA_ARG is the argument passed to the interp entry functions in the runtime.
- */
-void*
-get_native_to_interp (MonoMethod *method, void *extra_arg)
-{
- MonoClass *klass = mono_method_get_class (method);
- MonoImage *image = mono_class_get_image (klass);
- MonoAssembly *assembly = mono_image_get_assembly (image);
- MonoAssemblyName *aname = mono_assembly_get_name (assembly);
- const char *name = mono_assembly_name_get_name (aname);
- const char *class_name = mono_class_get_name (klass);
- const char *method_name = mono_method_get_name (method);
- char key [128];
- int len;
-
- assert (strlen (name) < 100);
- snprintf (key, sizeof(key), "%s_%s_%s", name, class_name, method_name);
- len = strlen (key);
- for (int i = 0; i < len; ++i) {
- if (key [i] == '.')
- key [i] = '_';
- }
-
- void *addr = wasm_dl_get_native_to_interp (key, extra_arg);
- return addr;
-}
-
-void mono_initialize_internals ()
-{
- mono_add_internal_call ("Interop/Runtime::InvokeJS", mono_wasm_invoke_js);
- // TODO: what happens when two types in different assemblies have the same FQN?
-
- // Blazor specific custom routines - see dotnet_support.js for backing code
- mono_add_internal_call ("WebAssembly.JSInterop.InternalCalls::InvokeJS", mono_wasm_invoke_js_blazor);
- // The following two are for back-compat and will eventually be removed
- mono_add_internal_call ("WebAssembly.JSInterop.InternalCalls::InvokeJSMarshalled", mono_wasm_invoke_js_marshalled);
- mono_add_internal_call ("WebAssembly.JSInterop.InternalCalls::InvokeJSUnmarshalled", mono_wasm_invoke_js_unmarshalled);
-
-#ifdef CORE_BINDINGS
- core_initialize_internals();
-#endif
-
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_register_bundled_satellite_assemblies ()
-{
- /* In legacy satellite_assembly_count is always false */
- if (satellite_assembly_count) {
- MonoBundledSatelliteAssembly **satellite_bundle_array = g_new0 (MonoBundledSatelliteAssembly *, satellite_assembly_count + 1);
- WasmSatelliteAssembly *cur = satellite_assemblies;
- int i = 0;
- while (cur) {
- satellite_bundle_array [i] = cur->assembly;
- cur = cur->next;
- ++i;
- }
- mono_register_bundled_satellite_assemblies ((const MonoBundledSatelliteAssembly **)satellite_bundle_array);
- }
-}
-
-void mono_wasm_link_icu_shim (void);
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_load_runtime (const char *unused, int debug_level)
-{
- const char *interp_opts = "";
-
-#ifndef INVARIANT_GLOBALIZATION
- mono_wasm_link_icu_shim ();
-#endif
-
-#ifdef DEBUG
- monoeg_g_setenv ("MONO_LOG_LEVEL", "debug", 0);
- monoeg_g_setenv ("MONO_LOG_MASK", "gc", 0);
- // Setting this env var allows Diagnostic.Debug to write to stderr. In a browser environment this
- // output will be sent to the console. Right now this is the only way to emit debug logging from
- // corlib assemblies.
- monoeg_g_setenv ("COMPlus_DebugWriteToStdErr", "1", 0);
-#endif
-
- const char *appctx_keys[2];
- appctx_keys [0] = "APP_CONTEXT_BASE_DIRECTORY";
- appctx_keys [1] = "RUNTIME_IDENTIFIER";
-
- const char *appctx_values[2];
- appctx_values [0] = "/";
- appctx_values [1] = "browser-wasm";
-
- monovm_initialize (2, appctx_keys, appctx_values);
-
- mini_parse_debug_option ("top-runtime-invoke-unhandled");
-
- mono_dl_fallback_register (wasm_dl_load, wasm_dl_symbol, NULL, NULL);
- mono_wasm_install_get_native_to_interp_tramp (get_native_to_interp);
-
-#ifdef ENABLE_AOT
- monoeg_g_setenv ("MONO_AOT_MODE", "aot", 1);
-
- // Defined in driver-gen.c
- register_aot_modules ();
-#ifdef EE_MODE_LLVMONLY_INTERP
- mono_jit_set_aot_mode (MONO_AOT_MODE_LLVMONLY_INTERP);
-#else
- mono_jit_set_aot_mode (MONO_AOT_MODE_LLVMONLY);
-#endif
-#else
- mono_jit_set_aot_mode (MONO_AOT_MODE_INTERP_ONLY);
-
- /*
- * debug_level > 0 enables debugging and sets the debug log level to debug_level
- * debug_level == 0 disables debugging and enables interpreter optimizations
- * debug_level < 0 enabled debugging and disables debug logging.
- *
- * Note: when debugging is enabled interpreter optimizations are disabled.
- */
- if (debug_level) {
- // Disable optimizations which interfere with debugging
- interp_opts = "-all";
- mono_wasm_enable_debugging (debug_level);
- }
-
-#endif
-
-#ifdef LINK_ICALLS
- /* Link in our own linked icall table */
- static const MonoIcallTableCallbacks mono_icall_table_callbacks =
- {
- MONO_ICALL_TABLE_CALLBACKS_VERSION,
- icall_table_lookup,
- icall_table_lookup_symbol
- };
- mono_install_icall_table_callbacks (&mono_icall_table_callbacks);
-#endif
-
-#ifdef NEED_NORMAL_ICALL_TABLES
- mono_icall_table_init ();
-#endif
-#ifdef NEED_INTERP
- mono_ee_interp_init (interp_opts);
- mono_marshal_ilgen_init ();
- mono_method_builder_ilgen_init ();
- mono_sgen_mono_ilgen_init ();
-#endif
-
- if (assembly_count) {
- MonoBundledAssembly **bundle_array = g_new0 (MonoBundledAssembly*, assembly_count + 1);
- WasmAssembly *cur = assemblies;
- int i = 0;
- while (cur) {
- bundle_array [i] = &cur->assembly;
- cur = cur->next;
- ++i;
- }
- mono_register_bundled_assemblies ((const MonoBundledAssembly **)bundle_array);
- }
-
- mono_wasm_register_bundled_satellite_assemblies ();
- mono_trace_init ();
- mono_trace_set_log_handler (wasm_trace_logger, NULL);
- root_domain = mono_jit_init_version ("mono", "v4.0.30319");
-
- mono_initialize_internals();
-
- mono_thread_set_main (mono_thread_current ());
-}
-
-EMSCRIPTEN_KEEPALIVE MonoAssembly*
-mono_wasm_assembly_load (const char *name)
-{
- MonoImageOpenStatus status;
- MonoAssemblyName* aname = mono_assembly_name_new (name);
- if (!name)
- return NULL;
-
- MonoAssembly *res = mono_assembly_load (aname, NULL, &status);
- mono_assembly_name_free (aname);
-
- return res;
-}
-
-EMSCRIPTEN_KEEPALIVE MonoClass*
-mono_wasm_find_corlib_class (const char *namespace, const char *name)
-{
- return mono_class_from_name (mono_get_corlib (), namespace, name);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoClass*
-mono_wasm_assembly_find_class (MonoAssembly *assembly, const char *namespace, const char *name)
-{
- return mono_class_from_name (mono_assembly_get_image (assembly), namespace, name);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoMethod*
-mono_wasm_assembly_find_method (MonoClass *klass, const char *name, int arguments)
-{
- return mono_class_get_method_from_name (klass, name, arguments);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoMethod*
-mono_wasm_get_delegate_invoke (MonoObject *delegate)
-{
- return mono_get_delegate_invoke(mono_object_get_class (delegate));
-}
-
-EMSCRIPTEN_KEEPALIVE MonoObject*
-mono_wasm_box_primitive (MonoClass *klass, void *value, int value_size)
-{
- if (!klass)
- return NULL;
-
- MonoType *type = mono_class_get_type (klass);
- int alignment;
- if (mono_type_size (type, &alignment) > value_size)
- return NULL;
-
- // TODO: use mono_value_box_checked and propagate error out
- return mono_value_box (root_domain, klass, value);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoObject*
-mono_wasm_invoke_method (MonoMethod *method, MonoObject *this_arg, void *params[], MonoObject **out_exc)
-{
- MonoObject *exc = NULL;
- MonoObject *res;
-
- if (out_exc)
- *out_exc = NULL;
- res = mono_runtime_invoke (method, this_arg, params, &exc);
- if (exc) {
- if (out_exc)
- *out_exc = exc;
-
- MonoObject *exc2 = NULL;
- res = (MonoObject*)mono_object_to_string (exc, &exc2);
- if (exc2)
- res = (MonoObject*) mono_string_new (root_domain, "Exception Double Fault");
- return res;
- }
-
- MonoMethodSignature *sig = mono_method_signature (method);
- MonoType *type = mono_signature_get_return_type (sig);
- // If the method return type is void return null
- // This gets around a memory access crash when the result return a value when
- // a void method is invoked.
- if (mono_type_get_type (type) == MONO_TYPE_VOID)
- return NULL;
-
- return res;
-}
-
-EMSCRIPTEN_KEEPALIVE MonoMethod*
-mono_wasm_assembly_get_entry_point (MonoAssembly *assembly)
-{
- MonoImage *image;
- MonoMethod *method;
-
- image = mono_assembly_get_image (assembly);
- uint32_t entry = mono_image_get_entry_point (image);
- if (!entry)
- return NULL;
-
- mono_domain_ensure_entry_assembly (root_domain, assembly);
- method = mono_get_method (image, entry, NULL);
-
- /*
- * If the entry point looks like a compiler generated wrapper around
- * an async method in the form "" then try to look up the async methods
- * "$" and "Name" it could be wrapping. We do this because the generated
- * sync wrapper will call task.GetAwaiter().GetResult() when we actually want
- * to yield to the host runtime.
- */
- if (mono_method_get_flags (method, NULL) & 0x0800 /* METHOD_ATTRIBUTE_SPECIAL_NAME */) {
- const char *name = mono_method_get_name (method);
- int name_length = strlen (name);
-
- if ((*name != '<') || (name [name_length - 1] != '>'))
- return method;
-
- MonoClass *klass = mono_method_get_class (method);
- char *async_name = malloc (name_length + 2);
- snprintf (async_name, name_length + 2, "%s$", name);
-
- // look for "$"
- MonoMethodSignature *sig = mono_method_get_signature (method, image, mono_method_get_token (method));
- MonoMethod *async_method = mono_class_get_method_from_name (klass, async_name, mono_signature_get_param_count (sig));
- if (async_method != NULL) {
- free (async_name);
- return async_method;
- }
-
- // look for "Name" by trimming the first and last character of ""
- async_name [name_length - 1] = '\0';
- async_method = mono_class_get_method_from_name (klass, async_name + 1, mono_signature_get_param_count (sig));
-
- free (async_name);
- if (async_method != NULL)
- return async_method;
- }
- return method;
-}
-
-EMSCRIPTEN_KEEPALIVE char *
-mono_wasm_string_get_utf8 (MonoString *str)
-{
- return mono_string_to_utf8 (str); //XXX JS is responsible for freeing this
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_string_convert (MonoString *str)
-{
- if (str == NULL)
- return;
-
- mono_unichar2 *native_val = mono_string_chars (str);
- int native_len = mono_string_length (str) * 2;
-
- EM_ASM ({
- MONO.string_decoder.decode($0, $0 + $1, true);
- }, (int)native_val, native_len);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoString *
-mono_wasm_string_from_js (const char *str)
-{
- if (str)
- return mono_string_new (root_domain, str);
- else
- return NULL;
-}
-
-EMSCRIPTEN_KEEPALIVE MonoString *
-mono_wasm_string_from_utf16 (const mono_unichar2 * chars, int length)
-{
- assert (length >= 0);
-
- if (chars)
- return mono_string_new_utf16 (root_domain, chars, length);
- else
- return NULL;
-}
-
-static int
-class_is_task (MonoClass *klass)
-{
- if (!task_class && !resolved_task_class) {
- task_class = mono_class_from_name (mono_get_corlib(), "System.Threading.Tasks", "Task");
- resolved_task_class = 1;
- }
-
- if (task_class && (klass == task_class || mono_class_is_subclass_of(klass, task_class, 0)))
- return 1;
-
- return 0;
-}
-
-MonoClass* mono_get_uri_class(MonoException** exc)
-{
- MonoAssembly* assembly = mono_wasm_assembly_load ("System");
- if (!assembly)
- return NULL;
- MonoClass* klass = mono_wasm_assembly_find_class(assembly, "System", "Uri");
- return klass;
-}
-
-#define MARSHAL_TYPE_INT 1
-#define MARSHAL_TYPE_FP64 2
-#define MARSHAL_TYPE_STRING 3
-#define MARSHAL_TYPE_VT 4
-#define MARSHAL_TYPE_DELEGATE 5
-#define MARSHAL_TYPE_TASK 6
-#define MARSHAL_TYPE_OBJECT 7
-#define MARSHAL_TYPE_BOOL 8
-#define MARSHAL_TYPE_ENUM 9
-#define MARSHAL_TYPE_DATE 20
-#define MARSHAL_TYPE_DATEOFFSET 21
-#define MARSHAL_TYPE_URI 22
-#define MARSHAL_TYPE_SAFEHANDLE 23
-
-// typed array marshalling
-#define MARSHAL_ARRAY_BYTE 10
-#define MARSHAL_ARRAY_UBYTE 11
-#define MARSHAL_ARRAY_UBYTE_C 12
-#define MARSHAL_ARRAY_SHORT 13
-#define MARSHAL_ARRAY_USHORT 14
-#define MARSHAL_ARRAY_INT 15
-#define MARSHAL_ARRAY_UINT 16
-#define MARSHAL_ARRAY_FLOAT 17
-#define MARSHAL_ARRAY_DOUBLE 18
-
-#define MARSHAL_TYPE_FP32 24
-#define MARSHAL_TYPE_UINT32 25
-#define MARSHAL_TYPE_INT64 26
-#define MARSHAL_TYPE_UINT64 27
-#define MARSHAL_TYPE_CHAR 28
-#define MARSHAL_TYPE_STRING_INTERNED 29
-#define MARSHAL_TYPE_VOID 30
-
-void mono_wasm_ensure_classes_resolved ()
-{
- if (!datetime_class && !resolved_datetime_class) {
- datetime_class = mono_class_from_name (mono_get_corlib(), "System", "DateTime");
- resolved_datetime_class = 1;
- }
- if (!datetimeoffset_class && !resolved_datetimeoffset_class) {
- datetimeoffset_class = mono_class_from_name (mono_get_corlib(), "System", "DateTimeOffset");
- resolved_datetimeoffset_class = 1;
- }
- if (!uri_class && !resolved_uri_class) {
- MonoException** exc = NULL;
- uri_class = mono_get_uri_class(exc);
- resolved_uri_class = 1;
- }
- if (!safehandle_class && !resolved_safehandle_class) {
- safehandle_class = mono_class_from_name (mono_get_corlib(), "System.Runtime.InteropServices", "SafeHandle");
- resolved_safehandle_class = 1;
- }
- if (!voidtaskresult_class && !resolved_voidtaskresult_class) {
- voidtaskresult_class = mono_class_from_name (mono_get_corlib(), "System.Threading.Tasks", "VoidTaskResult");
- resolved_voidtaskresult_class = 1;
- }
-}
-
-int
-mono_wasm_marshal_type_from_mono_type (int mono_type, MonoClass *klass, MonoType *type)
-{
- switch (mono_type) {
- // case MONO_TYPE_CHAR: prob should be done not as a number?
- case MONO_TYPE_BOOLEAN:
- return MARSHAL_TYPE_BOOL;
- case MONO_TYPE_I1:
- case MONO_TYPE_U1:
- case MONO_TYPE_I2:
- case MONO_TYPE_U2:
- case MONO_TYPE_I4:
- case MONO_TYPE_I: // IntPtr
- return MARSHAL_TYPE_INT;
- case MONO_TYPE_CHAR:
- return MARSHAL_TYPE_CHAR;
- case MONO_TYPE_U4: // The distinction between this and signed int is
- // important due to how numbers work in JavaScript
- return MARSHAL_TYPE_UINT32;
- case MONO_TYPE_I8:
- return MARSHAL_TYPE_INT64;
- case MONO_TYPE_U8:
- return MARSHAL_TYPE_UINT64;
- case MONO_TYPE_R4:
- return MARSHAL_TYPE_FP32;
- case MONO_TYPE_R8:
- return MARSHAL_TYPE_FP64;
- case MONO_TYPE_STRING:
- return MARSHAL_TYPE_STRING;
- case MONO_TYPE_SZARRAY: { // simple zero based one-dim-array
- MonoClass *eklass = mono_class_get_element_class (klass);
- MonoType *etype = mono_class_get_type (eklass);
-
- switch (mono_type_get_type (etype)) {
- case MONO_TYPE_U1:
- return MARSHAL_ARRAY_UBYTE;
- case MONO_TYPE_I1:
- return MARSHAL_ARRAY_BYTE;
- case MONO_TYPE_U2:
- return MARSHAL_ARRAY_USHORT;
- case MONO_TYPE_I2:
- return MARSHAL_ARRAY_SHORT;
- case MONO_TYPE_U4:
- return MARSHAL_ARRAY_UINT;
- case MONO_TYPE_I4:
- return MARSHAL_ARRAY_INT;
- case MONO_TYPE_R4:
- return MARSHAL_ARRAY_FLOAT;
- case MONO_TYPE_R8:
- return MARSHAL_ARRAY_DOUBLE;
- default:
- return MARSHAL_TYPE_OBJECT;
- }
- }
- default:
- mono_wasm_ensure_classes_resolved ();
-
- if (klass == datetime_class)
- return MARSHAL_TYPE_DATE;
- if (klass == datetimeoffset_class)
- return MARSHAL_TYPE_DATEOFFSET;
- if (uri_class && mono_class_is_assignable_from(uri_class, klass))
- return MARSHAL_TYPE_URI;
- if (klass == voidtaskresult_class)
- return MARSHAL_TYPE_VOID;
- if (mono_class_is_enum (klass))
- return MARSHAL_TYPE_ENUM;
- if (!mono_type_is_reference (type)) //vt
- return MARSHAL_TYPE_VT;
- if (mono_class_is_delegate (klass))
- return MARSHAL_TYPE_DELEGATE;
- if (class_is_task(klass))
- return MARSHAL_TYPE_TASK;
- if (safehandle_class && (klass == safehandle_class || mono_class_is_subclass_of(klass, safehandle_class, 0))) {
- return MARSHAL_TYPE_SAFEHANDLE;
- }
-
- return MARSHAL_TYPE_OBJECT;
- }
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_get_obj_type (MonoObject *obj)
-{
- if (!obj)
- return 0;
-
- /* Process obj before calling into the runtime, class_from_name () can invoke managed code */
- MonoClass *klass = mono_object_get_class (obj);
- if ((klass == mono_get_string_class ()) &&
- (mono_string_is_interned ((MonoString *)obj) == (MonoString *)obj))
- return MARSHAL_TYPE_STRING_INTERNED;
-
- MonoType *type = mono_class_get_type (klass);
- obj = NULL;
-
- int mono_type = mono_type_get_type (type);
-
- return mono_wasm_marshal_type_from_mono_type (mono_type, klass, type);
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_try_unbox_primitive_and_get_type (MonoObject *obj, void *result)
-{
- int *resultI = result;
- int64_t *resultL = result;
- float *resultF = result;
- double *resultD = result;
-
- if (!obj) {
- *resultL = 0;
- return 0;
- }
-
- /* Process obj before calling into the runtime, class_from_name () can invoke managed code */
- MonoClass *klass = mono_object_get_class (obj);
- if ((klass == mono_get_string_class ()) &&
- (mono_string_is_interned ((MonoString *)obj) == (MonoString *)obj)) {
- *resultL = 0;
- return MARSHAL_TYPE_STRING_INTERNED;
- }
-
- MonoType *type = mono_class_get_type (klass), *original_type = type;
-
- if (mono_class_is_enum (klass))
- type = mono_type_get_underlying_type (type);
-
- int mono_type = mono_type_get_type (type);
-
- // FIXME: We would prefer to unbox once here but it will fail if the value isn't unboxable
-
- switch (mono_type) {
- case MONO_TYPE_I1:
- case MONO_TYPE_BOOLEAN:
- *resultI = *(signed char*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_U1:
- *resultI = *(unsigned char*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_I2:
- case MONO_TYPE_CHAR:
- *resultI = *(short*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_U2:
- *resultI = *(unsigned short*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_I4:
- case MONO_TYPE_I:
- *resultI = *(int*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_U4:
- // FIXME: Will this behave the way we want for large unsigned values?
- *resultI = *(int*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_R4:
- *resultF = *(float*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_R8:
- *resultD = *(double*)mono_object_unbox (obj);
- break;
- case MONO_TYPE_I8:
- case MONO_TYPE_U8:
- // FIXME: At present the javascript side of things can't handle this,
- // but there's no reason not to future-proof this API
- *resultL = *(int64_t*)mono_object_unbox (obj);
- break;
- default:
- // If we failed to do a fast unboxing, return the original type information so
- // that the caller can do a proper, slow unboxing later
- *resultL = 0;
- obj = NULL;
- return mono_wasm_marshal_type_from_mono_type (mono_type, klass, original_type);
- }
-
- // We successfully performed a fast unboxing here so use the type information
- // matching what we unboxed (i.e. an enum's underlying type instead of its type)
- obj = NULL;
- return mono_wasm_marshal_type_from_mono_type (mono_type, klass, type);
-}
-
-// FIXME: This function is retained specifically because runtime-test.js uses it
-EMSCRIPTEN_KEEPALIVE int
-mono_unbox_int (MonoObject *obj)
-{
- if (!obj)
- return 0;
- MonoType *type = mono_class_get_type (mono_object_get_class(obj));
-
- void *ptr = mono_object_unbox (obj);
- switch (mono_type_get_type (type)) {
- case MONO_TYPE_I1:
- case MONO_TYPE_BOOLEAN:
- return *(signed char*)ptr;
- case MONO_TYPE_U1:
- return *(unsigned char*)ptr;
- case MONO_TYPE_I2:
- return *(short*)ptr;
- case MONO_TYPE_U2:
- return *(unsigned short*)ptr;
- case MONO_TYPE_I4:
- case MONO_TYPE_I:
- return *(int*)ptr;
- case MONO_TYPE_U4:
- return *(unsigned int*)ptr;
- case MONO_TYPE_CHAR:
- return *(short*)ptr;
- // WASM doesn't support returning longs to JS
- // case MONO_TYPE_I8:
- // case MONO_TYPE_U8:
- default:
- printf ("Invalid type %d to mono_unbox_int\n", mono_type_get_type (type));
- return 0;
- }
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_array_length (MonoArray *array)
-{
- return mono_array_length (array);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoObject*
-mono_wasm_array_get (MonoArray *array, int idx)
-{
- return mono_array_get (array, MonoObject*, idx);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoArray*
-mono_wasm_obj_array_new (int size)
-{
- return mono_array_new (root_domain, mono_get_object_class (), size);
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_obj_array_set (MonoArray *array, int idx, MonoObject *obj)
-{
- mono_array_setref (array, idx, obj);
-}
-
-EMSCRIPTEN_KEEPALIVE MonoArray*
-mono_wasm_string_array_new (int size)
-{
- return mono_array_new (root_domain, mono_get_string_class (), size);
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_exec_regression (int verbose_level, char *image)
-{
- return mono_regression_test_step (verbose_level, image, NULL) ? 0 : 1;
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_exit (int exit_code)
-{
- exit (exit_code);
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_set_main_args (int argc, char* argv[])
-{
- mono_runtime_set_main_args (argc, argv);
-}
-
-EMSCRIPTEN_KEEPALIVE int
-mono_wasm_strdup (const char *s)
-{
- return (int)strdup (s);
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_parse_runtime_options (int argc, char* argv[])
-{
- mono_jit_parse_options (argc, argv);
-}
-
-EMSCRIPTEN_KEEPALIVE void
-mono_wasm_enable_on_demand_gc (int enable)
-{
- mono_wasm_enable_gc = enable ? 1 : 0;
-}
-
-EMSCRIPTEN_KEEPALIVE MonoString *
-mono_wasm_intern_string (MonoString *string)
-{
- return mono_string_intern (string);
-}
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-flags.txt b/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-flags.txt
deleted file mode 100644
index bfcdcb7cdc..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-flags.txt
+++ /dev/null
@@ -1 +0,0 @@
---profiling-funcs -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=1 -s FORCE_FILESYSTEM=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'FS_createPath', 'FS_createDataFile', 'cwrap', 'setValue', 'getValue', 'UTF8ToString', 'UTF8ArrayToString', 'addFunction']" -s "EXPORTED_FUNCTIONS=['_putchar']" --source-map-base http://example.com -emit-llvm -DENABLE_METADATA_UPDATE=1 -Oz --llvm-opts 2
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-version.txt b/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-version.txt
deleted file mode 100644
index 8fd4e7025b..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-version.txt
+++ /dev/null
@@ -1 +0,0 @@
-emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.12 (d0e647bf266caad50943e78c9841e05e9c499a5d)
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt.dat
deleted file mode 100644
index c527c4d8e9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt.dat and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_CJK.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_CJK.dat
deleted file mode 100644
index 39a71c5538..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_CJK.dat and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_EFIGS.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_EFIGS.dat
deleted file mode 100644
index 924353157a..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_EFIGS.dat and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_no_CJK.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_no_CJK.dat
deleted file mode 100644
index 2e696e256c..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_no_CJK.dat and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/library_mono.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/library_mono.js
deleted file mode 100644
index 096cd00cc7..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/library_mono.js
+++ /dev/null
@@ -1,2804 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-/**
- * @typedef WasmId
- * @type {object}
- * @property {string} idStr - full object id string
- * @property {string} scheme - eg, object, valuetype, array ..
- * @property {string} value - string part after `dotnet:scheme:` of the id string
- * @property {object} o - value parsed as JSON
- */
-
-/**
- * @typedef WasmRoot - a single address in the managed heap, visible to the GC
- * @type {object}
- * @property {ManagedPointer} value - pointer into the managed heap, stored in the root
- * @property {function} get_address - retrieves address of the root in wasm memory
- * @property {function} get - retrieves pointer value
- * @property {function} set - updates the pointer
- * @property {function} release - releases the root storage for future use
- */
-
-/**
- * @typedef WasmRootBuffer - a collection of addresses in the managed heap, visible to the GC
- * @type {object}
- * @property {number} length - number of elements the root buffer can hold
- * @property {function} get_address - retrieves address of an element in wasm memory, by index
- * @property {function} get - retrieves an element by index
- * @property {function} set - sets an element's value by index
- * @property {function} release - releases the root storage for future use
- */
-
-/**
- * @typedef ManagedPointer
- * @type {number} - address in the managed heap
- */
-
-/**
- * @typedef NativePointer
- * @type {number} - address in wasm memory
- */
-
-/**
- * @typedef Event
- * @type {object}
- * @property {string} eventName - name of the event being raised
- * @property {object} eventArgs - arguments for the event itself
- */
-
-var MonoSupportLib = {
- $MONO__postset: 'MONO.export_functions (Module);',
- $MONO: {
- pump_count: 0,
- timeout_queue: [],
- _vt_stack: [],
- mono_wasm_runtime_is_ready : false,
- mono_wasm_ignore_pdb_load_errors: true,
-
- /** @type {object.} */
- _id_table: {},
-
- pump_message: function () {
- if (!this.mono_background_exec)
- this.mono_background_exec = Module.cwrap ("mono_background_exec", null);
- while (MONO.timeout_queue.length > 0) {
- --MONO.pump_count;
- MONO.timeout_queue.shift()();
- }
- while (MONO.pump_count > 0) {
- --MONO.pump_count;
- this.mono_background_exec ();
- }
- },
-
- export_functions: function (module) {
- module ["pump_message"] = MONO.pump_message.bind(MONO);
- module ["mono_load_runtime_and_bcl"] = MONO.mono_load_runtime_and_bcl.bind(MONO);
- module ["mono_load_runtime_and_bcl_args"] = MONO.mono_load_runtime_and_bcl_args.bind(MONO);
- module ["mono_wasm_load_bytes_into_heap"] = MONO.mono_wasm_load_bytes_into_heap.bind(MONO);
- module ["mono_wasm_load_icu_data"] = MONO.mono_wasm_load_icu_data.bind(MONO);
- module ["mono_wasm_get_icudt_name"] = MONO.mono_wasm_get_icudt_name.bind(MONO);
- module ["mono_wasm_globalization_init"] = MONO.mono_wasm_globalization_init.bind(MONO);
- module ["mono_wasm_get_loaded_files"] = MONO.mono_wasm_get_loaded_files.bind(MONO);
- module ["mono_wasm_new_root_buffer"] = MONO.mono_wasm_new_root_buffer.bind(MONO);
- module ["mono_wasm_new_root_buffer_from_pointer"] = MONO.mono_wasm_new_root_buffer_from_pointer.bind(MONO);
- module ["mono_wasm_new_root"] = MONO.mono_wasm_new_root.bind(MONO);
- module ["mono_wasm_new_roots"] = MONO.mono_wasm_new_roots.bind(MONO);
- module ["mono_wasm_release_roots"] = MONO.mono_wasm_release_roots.bind(MONO);
- },
-
- _base64Converter: {
- // Code from JSIL:
- // https://github.com/sq/JSIL/blob/1d57d5427c87ab92ffa3ca4b82429cd7509796ba/JSIL.Libraries/Includes/Bootstrap/Core/Classes/System.Convert.js#L149
- // Thanks to Katelyn Gadd @kg
-
- _base64Table: [
- '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',
- '+', '/'
- ],
-
- _makeByteReader: function (bytes, index, count) {
- var position = (typeof (index) === "number") ? index : 0;
- var endpoint;
-
- if (typeof (count) === "number")
- endpoint = (position + count);
- else
- endpoint = (bytes.length - position);
-
- var result = {
- read: function () {
- if (position >= endpoint)
- return false;
-
- var nextByte = bytes[position];
- position += 1;
- return nextByte;
- }
- };
-
- Object.defineProperty(result, "eof", {
- get: function () {
- return (position >= endpoint);
- },
- configurable: true,
- enumerable: true
- });
-
- return result;
- },
-
- toBase64StringImpl: function (inArray, offset, length) {
- var reader = this._makeByteReader(inArray, offset, length);
- var result = "";
- var ch1 = 0, ch2 = 0, ch3 = 0, bits = 0, equalsCount = 0, sum = 0;
- var mask1 = (1 << 24) - 1, mask2 = (1 << 18) - 1, mask3 = (1 << 12) - 1, mask4 = (1 << 6) - 1;
- var shift1 = 18, shift2 = 12, shift3 = 6, shift4 = 0;
-
- while (true) {
- ch1 = reader.read();
- ch2 = reader.read();
- ch3 = reader.read();
-
- if (ch1 === false)
- break;
- if (ch2 === false) {
- ch2 = 0;
- equalsCount += 1;
- }
- if (ch3 === false) {
- ch3 = 0;
- equalsCount += 1;
- }
-
- // Seems backwards, but is right!
- sum = (ch1 << 16) | (ch2 << 8) | (ch3 << 0);
-
- bits = (sum & mask1) >> shift1;
- result += this._base64Table[bits];
- bits = (sum & mask2) >> shift2;
- result += this._base64Table[bits];
-
- if (equalsCount < 2) {
- bits = (sum & mask3) >> shift3;
- result += this._base64Table[bits];
- }
-
- if (equalsCount === 2) {
- result += "==";
- } else if (equalsCount === 1) {
- result += "=";
- } else {
- bits = (sum & mask4) >> shift4;
- result += this._base64Table[bits];
- }
- }
-
- return result;
- },
- },
-
- _mono_wasm_root_buffer_prototype: {
- _throw_index_out_of_range: function () {
- throw new Error ("index out of range");
- },
- _check_in_range: function (index) {
- if ((index >= this.__count) || (index < 0))
- this._throw_index_out_of_range();
- },
- /** @returns {NativePointer} */
- get_address: function (index) {
- this._check_in_range (index);
- return this.__offset + (index * 4);
- },
- /** @returns {number} */
- get_address_32: function (index) {
- this._check_in_range (index);
- return this.__offset32 + index;
- },
- /** @returns {ManagedPointer} */
- get: function (index) {
- this._check_in_range (index);
- return Module.HEAP32[this.get_address_32 (index)];
- },
- set: function (index, value) {
- Module.HEAP32[this.get_address_32 (index)] = value;
- return value;
- },
- _unsafe_get: function (index) {
- return Module.HEAP32[this.__offset32 + index];
- },
- _unsafe_set: function (index, value) {
- Module.HEAP32[this.__offset32 + index] = value;
- },
- clear: function () {
- if (this.__offset)
- MONO._zero_region (this.__offset, this.__count * 4);
- },
- release: function () {
- if (this.__offset && this.__ownsAllocation) {
- MONO.mono_wasm_deregister_root (this.__offset);
- MONO._zero_region (this.__offset, this.__count * 4);
- Module._free (this.__offset);
- }
-
- this.__handle = this.__offset = this.__count = this.__offset32 = 0;
- },
- toString: function () {
- return "[root buffer @" + this.get_address (0) + ", size " + this.__count + "]";
- }
- },
-
- _scratch_root_buffer: null,
- _scratch_root_free_indices: null,
- _scratch_root_free_indices_count: 0,
- _scratch_root_free_instances: [],
-
- _mono_wasm_root_prototype: {
- /** @returns {NativePointer} */
- get_address: function () {
- return this.__buffer.get_address (this.__index);
- },
- /** @returns {number} */
- get_address_32: function () {
- return this.__buffer.get_address_32 (this.__index);
- },
- /** @returns {ManagedPointer} */
- get: function () {
- var result = this.__buffer._unsafe_get (this.__index);
- return result;
- },
- set: function (value) {
- this.__buffer._unsafe_set (this.__index, value);
- return value;
- },
- /** @returns {ManagedPointer} */
- valueOf: function () {
- return this.get ();
- },
- clear: function () {
- this.set (0);
- },
- release: function () {
- const maxPooledInstances = 128;
- if (MONO._scratch_root_free_instances.length > maxPooledInstances) {
- MONO._mono_wasm_release_scratch_index (this.__index);
- this.__buffer = 0;
- this.__index = 0;
- } else {
- this.set (0);
- MONO._scratch_root_free_instances.push (this);
- }
- },
- toString: function () {
- return "[root @" + this.get_address () + "]";
- }
- },
-
- _mono_wasm_release_scratch_index: function (index) {
- if (index === undefined)
- return;
-
- this._scratch_root_buffer.set (index, 0);
- this._scratch_root_free_indices[this._scratch_root_free_indices_count] = index;
- this._scratch_root_free_indices_count++;
- },
-
- _mono_wasm_claim_scratch_index: function () {
- if (!this._scratch_root_buffer) {
- const maxScratchRoots = 8192;
- this._scratch_root_buffer = this.mono_wasm_new_root_buffer (maxScratchRoots, "js roots");
-
- this._scratch_root_free_indices = new Int32Array (maxScratchRoots);
- this._scratch_root_free_indices_count = maxScratchRoots;
- for (var i = 0; i < maxScratchRoots; i++)
- this._scratch_root_free_indices[i] = maxScratchRoots - i - 1;
-
- Object.defineProperty (this._mono_wasm_root_prototype, "value", {
- get: this._mono_wasm_root_prototype.get,
- set: this._mono_wasm_root_prototype.set,
- configurable: false
- });
- }
-
- if (this._scratch_root_free_indices_count < 1)
- throw new Error ("Out of scratch root space");
-
- var result = this._scratch_root_free_indices[this._scratch_root_free_indices_count - 1];
- this._scratch_root_free_indices_count--;
- return result;
- },
-
- _zero_region: function (byteOffset, sizeBytes) {
- if (((byteOffset % 4) === 0) && ((sizeBytes % 4) === 0))
- Module.HEAP32.fill(0, byteOffset / 4, sizeBytes / 4);
- else
- Module.HEAP8.fill(0, byteOffset, sizeBytes);
- },
-
- /**
- * Allocates a block of memory that can safely contain pointers into the managed heap.
- * The result object has get(index) and set(index, value) methods that can be used to retrieve and store managed pointers.
- * Once you are done using the root buffer, you must call its release() method.
- * For small numbers of roots, it is preferable to use the mono_wasm_new_root and mono_wasm_new_roots APIs instead.
- * @param {number} capacity - the maximum number of elements the buffer can hold.
- * @param {string} [msg] - a description of the root buffer (for debugging)
- * @returns {WasmRootBuffer}
- */
- mono_wasm_new_root_buffer: function (capacity, msg) {
- if (!this.mono_wasm_register_root || !this.mono_wasm_deregister_root) {
- this.mono_wasm_register_root = Module.cwrap ("mono_wasm_register_root", "number", ["number", "number", "string"]);
- this.mono_wasm_deregister_root = Module.cwrap ("mono_wasm_deregister_root", null, ["number"]);
- }
-
- if (capacity <= 0)
- throw new Error ("capacity >= 1");
-
- capacity = capacity | 0;
-
- var capacityBytes = capacity * 4;
- var offset = Module._malloc (capacityBytes);
- if ((offset % 4) !== 0)
- throw new Error ("Malloc returned an unaligned offset");
-
- this._zero_region (offset, capacityBytes);
-
- var result = Object.create (this._mono_wasm_root_buffer_prototype);
- result.__offset = offset;
- result.__offset32 = (offset / 4) | 0;
- result.__count = capacity;
- result.length = capacity;
- result.__handle = this.mono_wasm_register_root (offset, capacityBytes, msg || 0);
- result.__ownsAllocation = true;
-
- return result;
- },
-
- /**
- * Creates a root buffer object representing an existing allocation in the native heap and registers
- * the allocation with the GC. The caller is responsible for managing the lifetime of the allocation.
- * @param {NativePointer} offset - the offset of the root buffer in the native heap.
- * @param {number} capacity - the maximum number of elements the buffer can hold.
- * @param {string} [msg] - a description of the root buffer (for debugging)
- * @returns {WasmRootBuffer}
- */
- mono_wasm_new_root_buffer_from_pointer: function (offset, capacity, msg) {
- if (!this.mono_wasm_register_root || !this.mono_wasm_deregister_root) {
- this.mono_wasm_register_root = Module.cwrap ("mono_wasm_register_root", "number", ["number", "number", "string"]);
- this.mono_wasm_deregister_root = Module.cwrap ("mono_wasm_deregister_root", null, ["number"]);
- }
-
- if (capacity <= 0)
- throw new Error ("capacity >= 1");
-
- capacity = capacity | 0;
-
- var capacityBytes = capacity * 4;
- if ((offset % 4) !== 0)
- throw new Error ("Unaligned offset");
-
- this._zero_region (offset, capacityBytes);
-
- var result = Object.create (this._mono_wasm_root_buffer_prototype);
- result.__offset = offset;
- result.__offset32 = (offset / 4) | 0;
- result.__count = capacity;
- result.length = capacity;
- result.__handle = this.mono_wasm_register_root (offset, capacityBytes, msg || 0);
- result.__ownsAllocation = false;
-
- return result;
- },
-
- /**
- * Allocates temporary storage for a pointer into the managed heap.
- * Pointers stored here will be visible to the GC, ensuring that the object they point to aren't moved or collected.
- * If you already have a managed pointer you can pass it as an argument to initialize the temporary storage.
- * The result object has get() and set(value) methods, along with a .value property.
- * When you are done using the root you must call its .release() method.
- * @param {ManagedPointer} [value] - an address in the managed heap to initialize the root with (or 0)
- * @returns {WasmRoot}
- */
- mono_wasm_new_root: function (value) {
- var result;
-
- if (this._scratch_root_free_instances.length > 0) {
- result = this._scratch_root_free_instances.pop ();
- } else {
- var index = this._mono_wasm_claim_scratch_index ();
- var buffer = this._scratch_root_buffer;
-
- result = Object.create (this._mono_wasm_root_prototype);
- result.__buffer = buffer;
- result.__index = index;
- }
-
- if (value !== undefined) {
- if (typeof (value) !== "number")
- throw new Error ("value must be an address in the managed heap");
-
- result.set (value);
- } else {
- result.set (0);
- }
-
- return result;
- },
-
- /**
- * Allocates 1 or more temporary roots, accepting either a number of roots or an array of pointers.
- * mono_wasm_new_roots(n): returns an array of N zero-initialized roots.
- * mono_wasm_new_roots([a, b, ...]) returns an array of new roots initialized with each element.
- * Each root must be released with its release method, or using the mono_wasm_release_roots API.
- * @param {(number | ManagedPointer[])} count_or_values - either a number of roots or an array of pointers
- * @returns {WasmRoot[]}
- */
- mono_wasm_new_roots: function (count_or_values) {
- var result;
-
- if (Array.isArray (count_or_values)) {
- result = new Array (count_or_values.length);
- for (var i = 0; i < result.length; i++)
- result[i] = this.mono_wasm_new_root (count_or_values[i]);
- } else if ((count_or_values | 0) > 0) {
- result = new Array (count_or_values);
- for (var i = 0; i < result.length; i++)
- result[i] = this.mono_wasm_new_root ();
- } else {
- throw new Error ("count_or_values must be either an array or a number greater than 0");
- }
-
- return result;
- },
-
- /**
- * Releases 1 or more root or root buffer objects.
- * Multiple objects may be passed on the argument list.
- * 'undefined' may be passed as an argument so it is safe to call this method from finally blocks
- * even if you are not sure all of your roots have been created yet.
- * @param {... WasmRoot} roots
- */
- mono_wasm_release_roots: function () {
- for (var i = 0; i < arguments.length; i++) {
- if (!arguments[i])
- continue;
-
- arguments[i].release ();
- }
- },
-
- mono_text_decoder: undefined,
- string_decoder: {
- copy: function (mono_string) {
- if (mono_string == 0)
- return null;
-
- if (!this.mono_wasm_string_convert)
- this.mono_wasm_string_convert = Module.cwrap ("mono_wasm_string_convert", null, ['number']);
-
- this.mono_wasm_string_convert (mono_string);
- var result = this.result;
- this.result = undefined;
- return result;
- },
- decode: function (start, end, save) {
- if (!MONO.mono_text_decoder) {
- MONO.mono_text_decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;
- }
-
- var str = "";
- if (MONO.mono_text_decoder) {
- // When threading is enabled, TextDecoder does not accept a view of a
- // SharedArrayBuffer, we must make a copy of the array first.
- var subArray = typeof SharedArrayBuffer !== 'undefined' && Module.HEAPU8.buffer instanceof SharedArrayBuffer
- ? Module.HEAPU8.slice(start, end)
- : Module.HEAPU8.subarray(start, end);
-
- str = MONO.mono_text_decoder.decode(subArray);
- } else {
- for (var i = 0; i < end - start; i+=2) {
- var char = Module.getValue (start + i, 'i16');
- str += String.fromCharCode (char);
- }
- }
- if (save)
- this.result = str;
-
- return str;
- },
- },
-
- mono_wasm_get_exception_object: function() {
- var exception_obj = MONO.active_exception;
- MONO.active_exception = null;
- return exception_obj ;
- },
-
- mono_wasm_get_call_stack: function() {
- if (!this.mono_wasm_current_bp_id)
- this.mono_wasm_current_bp_id = Module.cwrap ("mono_wasm_current_bp_id", 'number');
- if (!this.mono_wasm_enum_frames)
- this.mono_wasm_enum_frames = Module.cwrap ("mono_wasm_enum_frames", null);
-
- var bp_id = this.mono_wasm_current_bp_id ();
- this.active_frames = [];
- this.mono_wasm_enum_frames ();
-
- var the_frames = this.active_frames;
- this.active_frames = [];
- return {
- "breakpoint_id": bp_id,
- "frames": the_frames,
- };
- },
-
- _fixup_name_value_objects: function (var_list) {
- let out_list = [];
-
- var i = 0;
- while (i < var_list.length) {
- let o = var_list [i];
- const this_has_name = o.name !== undefined;
- let next_has_value_or_get_set = false;
-
- if (i + 1 < var_list.length) {
- const next = var_list [i+1];
- next_has_value_or_get_set = next.value !== undefined || next.get !== undefined || next.set !== undefined;
- }
-
- if (!this_has_name) {
- // insert the object as-is
- // Eg. in case of locals, the names are added
- // later
- i ++;
- } else if (next_has_value_or_get_set) {
- // found a {name} followed by a {value/get}
- o = Object.assign (o, var_list [i + 1]);
- i += 2;
- } else {
- // missing value/get, so add a placeholder one
- o.value = {
- type: "symbol",
- value: "",
- description: ""
- };
- i ++;
- }
-
- out_list.push (o);
- }
-
- return out_list;
- },
-
- _filter_automatic_properties: function (props, accessors_only=false) {
- // Note: members in @props, have derived class members, followed by
- // those from parent classes
-
- // Note: Auto-properties have backing fields, named with a special suffix.
- // @props here will have the backing field, *and* the getter.
- //
- // But we want to return only one name/value pair:
- // [name of the auto-property] = value of the backing field
-
- let getters = {};
- let all_fields_except_backing_fields = {};
- let backing_fields = {};
-
- // Split props into the 3 groups - backing_fields, getters, and all_fields_except_backing_fields
- props.forEach(p => {
- if (p.name === undefined) {
- console.debug(`Bug: Found a member with no name. Skipping it. p: ${JSON.stringify(p)}`);
- return;
- }
-
- if (p.name.endsWith('k__BackingField')) {
- const auto_prop_name = p.name.replace ('k__BackingField', '')
- .replace ('<', '')
- .replace ('>', '');
-
- // Only take the first one, as that is overriding others
- if (!(auto_prop_name in backing_fields))
- backing_fields[auto_prop_name] = Object.assign(p, { name: auto_prop_name });
-
- } else if (p.get !== undefined) {
- // if p wasn't overridden by a getter or a field,
- // from a more derived class
- if (!(p.name in getters) && !(p.name in all_fields_except_backing_fields))
- getters[p.name] = p;
-
- } else if (!(p.name in all_fields_except_backing_fields)) {
- all_fields_except_backing_fields[p.name] = p;
- }
- });
-
- // Filter/merge backing fields, and getters
- Object.values(backing_fields).forEach(backing_field => {
- const auto_prop_name = backing_field.name;
- const getter = getters[auto_prop_name];
-
- if (getter === undefined) {
- // backing field with no getter
- // eg. when a field overrides/`new string foo=..`
- // an autoproperty
- return;
- }
-
- if (auto_prop_name in all_fields_except_backing_fields) {
- delete getters[auto_prop_name];
- } else if (getter.__args.owner_class === backing_field.__args.owner_class) {
- // getter+backing_field are from the same class.
- // Add the backing_field value as a field
- all_fields_except_backing_fields[auto_prop_name] = backing_field;
-
- // .. and drop the auto-prop getter
- delete getters[auto_prop_name];
- }
- });
-
- if (accessors_only)
- return Object.values(getters);
-
- return Object.values(all_fields_except_backing_fields).concat(Object.values(getters));
- },
-
- /** Given `dotnet:object:foo:bar`,
- * returns { scheme:'object', value: 'foo:bar' }
- *
- * Given `dotnet:pointer:{ b: 3 }`
- * returns { scheme:'object', value: '{b:3}`, o: {b:3}
- *
- * @param {string} idStr
- * @param {boolean} [throwOnError=false]
- *
- * @returns {WasmId}
- */
- _parse_object_id: function (idStr, throwOnError = false) {
- if (idStr === undefined || idStr == "" || !idStr.startsWith ('dotnet:')) {
- if (throwOnError)
- throw new Error (`Invalid id: ${idStr}`);
-
- return undefined;
- }
-
- const [, scheme, ...rest] = idStr.split(':');
- let res = {
- scheme,
- value: rest.join (':'),
- idStr,
- o: {}
- };
-
- try {
- res.o = JSON.parse(res.value);
- // eslint-disable-next-line no-empty
- } catch (e) {}
-
- return res;
- },
-
- _resolve_member_by_name: function (base_object, base_name, expr_parts) {
- if (base_object === undefined || base_object.value === undefined)
- throw new Error(`Bug: base_object is undefined`);
-
- if (base_object.value.type === 'object' && base_object.value.subtype === 'null')
- throw new ReferenceError(`Null reference: ${base_name} is null`);
-
- if (base_object.value.type !== 'object')
- throw new ReferenceError(`'.' is only supported on non-primitive types. Failed on '${base_name}'`);
-
- if (expr_parts.length == 0)
- throw new Error(`Invalid member access expression`);//FIXME: need the full expression here
-
- const root = expr_parts[0];
- const props = this.mono_wasm_get_details(base_object.value.objectId, {});
- let resObject = props.find(l => l.name == root);
- if (resObject !== undefined) {
- if (resObject.value === undefined && resObject.get !== undefined)
- resObject = this._invoke_getter(base_object.value.objectId, root);
- }
-
- if (resObject === undefined || expr_parts.length == 1)
- return resObject;
- else {
- expr_parts.shift();
- return this._resolve_member_by_name(resObject, root, expr_parts);
- }
- },
-
- mono_wasm_eval_member_access: function (scope, var_list, rootObjectId, expr) {
- if (expr === undefined || expr.length == 0)
- throw new Error(`expression argument required`);
-
- let parts = expr.split('.');
- if (parts.length == 0)
- throw new Error(`Invalid member access expression: ${expr}`);
-
- const root = parts[0];
-
- const locals = this.mono_wasm_get_variables(scope, var_list);
- let rootObject = locals.find(l => l.name === root);
- if (rootObject === undefined) {
- // check `this`
- const thisObject = locals.find(l => l.name == "this");
- if (thisObject === undefined)
- throw new ReferenceError(`Could not find ${root} in locals, and no 'this' found.`);
-
- const thisProps = this.mono_wasm_get_details(thisObject.value.objectId, {});
- rootObject = thisProps.find(tp => tp.name == root);
- if (rootObject === undefined)
- throw new ReferenceError(`Could not find ${root} in locals, or in 'this'`);
-
- if (rootObject.value === undefined && rootObject.get !== undefined)
- rootObject = this._invoke_getter(thisObject.value.objectId, root);
- }
-
- parts.shift();
-
- if (parts.length == 0)
- return rootObject;
-
- if (rootObject === undefined || rootObject.value === undefined)
- throw new Error(`Could not get a value for ${root}`);
-
- return this._resolve_member_by_name(rootObject, root, parts);
- },
-
- mono_wasm_set_variable_value: function (scope, index, name, newValue) {
- console.debug (">> mono_wasm_set_variable_value " + name + " - " + newValue);
- var ret = this._c_fn_table.mono_wasm_set_variable_on_frame_wrapper(scope, index, name, newValue);
- if (ret == false)
- throw new Error(`Could not get a value for ${name}`);
- return ret;
- },
-
- /**
- * @param {WasmId} id
- * @returns {object[]}
- */
- _get_vt_properties: function (id, args={}) {
- let entry = this._get_id_props (id.idStr);
-
- if (entry === undefined || entry.members === undefined) {
- if (!isNaN (id.o.containerId)) {
- // We are expanding, so get *all* the members.
- // Which ones to return based on @args, can be determined
- // at the time of return
- this._get_object_properties (id.o.containerId, { expandValueTypes: true });
- } else if (!isNaN (id.o.arrayId))
- this._get_array_values (id, Number (id.o.arrayIdx), 1, true);
- else
- throw new Error (`Invalid valuetype id (${id.idStr}). Can't get properties for it.`);
- }
-
- // Let's try again
- entry = this._get_id_props (id.idStr);
-
- if (entry !== undefined && entry.members !== undefined) {
- if (args.accessorPropertiesOnly === true)
- return entry.accessors;
-
- return entry.members;
- }
-
- throw new Error (`Unknown valuetype id: ${id.idStr}. Failed to get properties for it.`);
- },
-
- /**
- *
- * @callback GetIdArgsCallback
- * @param {object} var
- * @param {number} idx
- * @returns {object}
- */
-
- /**
- * @param {object[]} vars
- * @param {GetIdArgsCallback} getIdArgs
- * @returns {object}
- */
- _assign_vt_ids: function (vars, getIdArgs)
- {
- vars.forEach ((v, i) => {
- // we might not have a `.value`, like in case of getters which have a `.get` instead
- const value = v.value;
- if (value === undefined || !value.isValueType)
- return;
-
- if (value.objectId !== undefined)
- throw new Error (`Bug: Trying to assign valuetype id, but the var already has one: ${v}`);
-
- value.objectId = this._new_or_add_id_props ({ scheme: 'valuetype', idArgs: getIdArgs (v, i), props: value._props });
- delete value._props;
- });
-
- return vars;
- },
-
- //
- // @var_list: [ { index: , name: }, .. ]
- mono_wasm_get_variables: function(scope, var_list) {
- const numBytes = var_list.length * Int32Array.BYTES_PER_ELEMENT;
- const ptr = Module._malloc(numBytes);
- let heapBytes = new Int32Array(Module.HEAP32.buffer, ptr, numBytes);
- for (let i=0; i ({ containerId: this._async_method_objectId, fieldOffset: v.fieldOffset }));
-
- for (let i in res) {
- const res_name = res [i].name;
- if (this._async_method_objectId != 0) {
- //Async methods are special in the way that local variables can be lifted to generated class fields
- //value of "this" comes here either
- if (res_name !== undefined && res_name.indexOf ('>') > 0) {
- // For async methods, we get the names too, so use that
- // ALTHOUGH, the name wouldn't have `<>` for method args
- res [i].name = res_name.substring (1, res_name.indexOf ('>'));
- }
- } else if (res_name === undefined && var_list [i] !== undefined) {
- // For non-async methods, we just have the var id, but we have the name
- // from the caller
- res [i].name = var_list [i].name;
- }
- }
-
- this._post_process_details(res);
- return res;
- },
-
- // Keep in sync with the flags in mini-wasm-debugger.c
- _get_properties_args_to_gpflags: function (args) {
- let gpflags =0;
- /*
- Disabled for now. Instead, we ask debugger.c to return
- ~all~ the members, and then handle the filtering in mono.js .
-
- if (args.ownProperties)
- gpflags |= 1;
- if (args.accessorPropertiesOnly)
- gpflags |= 2;
- */
- if (args.expandValueTypes)
- gpflags |= 4;
-
- return gpflags;
- },
-
- /**
- * @param {number} idNum
- * @param {boolean} expandValueTypes
- * @returns {object}
- */
- _get_object_properties: function(idNum, args={}) {
- let gpflags = this._get_properties_args_to_gpflags (args);
-
- let { res_ok, res } = this.mono_wasm_get_object_properties_info (idNum, gpflags);
- if (!res_ok)
- throw new Error (`Failed to get properties for ${idNum}`);
-
- res = MONO._filter_automatic_properties (res, args.accessorPropertiesOnly === true);
- res = this._assign_vt_ids (res, v => ({ containerId: idNum, fieldOffset: v.fieldOffset }));
- res = this._post_process_details (res);
-
- return res;
- },
-
- /**
- * @param {WasmId} id
- * @param {number} [startIdx=0]
- * @param {number} [count=-1]
- * @param {boolean} [expandValueTypes=false]
- * @returns {object[]}
- */
- _get_array_values: function (id, startIdx = 0, count = -1, expandValueTypes = false) {
- if (isNaN (id.o.arrayId) || isNaN (startIdx))
- throw new Error (`Invalid array id: ${id.idStr}`);
-
- let gpflags = this._get_properties_args_to_gpflags({ expandValueTypes });
- let { res_ok, res } = this.mono_wasm_get_array_values_info (id.o.arrayId, startIdx, count, gpflags);
- if (!res_ok)
- throw new Error (`Failed to get properties for array id ${id.idStr}`);
-
- res = this._assign_vt_ids (res, (_, i) => ({ arrayId: id.o.arrayId, arrayIdx: Number (startIdx) + i}));
-
- for (let i = 0; i < res.length; i ++) {
- let value = res [i].value;
- if (value.objectId !== undefined && value.objectId.startsWith("dotnet:pointer"))
- this._new_or_add_id_props ({ objectId: value.objectId, props: { varName: `[${i}]` } });
- }
- res = this._post_process_details (res);
- return res;
- },
-
- _post_process_details: function (details) {
- if (details == undefined)
- return {};
-
- if (details.length > 0)
- this._extract_and_cache_value_types(details);
-
- // remove __args added by add_properties_var
- details.forEach(d => delete d.__args);
- return details;
- },
-
- /**
- * Gets the next id number to use for generating ids
- *
- * @returns {number}
- */
- _next_id: function () {
- return ++this._next_id_var;
- },
-
- _extract_and_cache_value_types: function (var_list) {
- if (var_list == undefined || !Array.isArray (var_list) || var_list.length == 0)
- return var_list;
-
- for (let i in var_list) {
- let value = var_list [i].value;
- if (value === undefined)
- continue;
-
- if (value.objectId !== undefined && value.objectId.startsWith ("dotnet:pointer:")) {
- let ptr_args = this._get_id_props (value.objectId);
- if (ptr_args === undefined)
- throw new Error (`Bug: Expected to find an entry for pointer id: ${value.objectId}`);
-
- // It might have been already set in some cases, like arrays
- // where the name would be `0`, but we want `[0]` for pointers,
- // so the deref would look like `*[0]`
- ptr_args.varName = ptr_args.varName || var_list [i].name;
- }
-
- if (value.type != "object" || value.isValueType != true || value.expanded != true) // undefined would also give us false
- continue;
-
- if (value.members === undefined) {
- // this could happen for valuetypes that maybe
- // we were not able to describe, like `ref` parameters
- // So, skip that
- continue;
- }
-
- // Generate objectId for expanded valuetypes
- value.objectId = value.objectId || this._new_or_add_id_props ({ scheme: 'valuetype' });
-
- this._extract_and_cache_value_types (value.members);
-
- const accessors = value.members.filter(m => m.get !== undefined);
- const new_props = Object.assign ({ members: value.members, accessors }, value.__extra_vt_props);
-
- this._new_or_add_id_props ({ objectId: value.objectId, props: new_props });
- delete value.members;
- delete value.__extra_vt_props;
- }
-
- return var_list;
- },
-
- _get_cfo_res_details: function (objectId, args) {
- if (!(objectId in this._call_function_res_cache))
- throw new Error(`Could not find any object with id ${objectId}`);
-
- const real_obj = this._call_function_res_cache [objectId];
-
- const descriptors = Object.getOwnPropertyDescriptors (real_obj);
- if (args.accessorPropertiesOnly) {
- Object.keys (descriptors).forEach (k => {
- if (descriptors [k].get === undefined)
- Reflect.deleteProperty (descriptors, k);
- });
- }
-
- let res_details = [];
- Object.keys (descriptors).forEach (k => {
- let new_obj;
- let prop_desc = descriptors [k];
- if (typeof prop_desc.value == "object") {
- // convert `{value: { type='object', ... }}`
- // to `{ name: 'foo', value: { type='object', ... }}
- new_obj = Object.assign ({ name: k }, prop_desc);
- } else if (prop_desc.value !== undefined) {
- // This is needed for values that were not added by us,
- // thus are like { value: 5 }
- // instead of { value: { type = 'number', value: 5 }}
- //
- // This can happen, for eg., when `length` gets added for arrays
- // or `__proto__`.
- new_obj = {
- name: k,
- // merge/add `type` and `description` to `d.value`
- value: Object.assign ({ type: (typeof prop_desc.value), description: '' + prop_desc.value },
- prop_desc)
- };
- } else if (prop_desc.get !== undefined) {
- // The real_obj has the actual getter. We are just returning a placeholder
- // If the caller tries to run function on the cfo_res object,
- // that accesses this property, then it would be run on `real_obj`,
- // which *has* the original getter
- new_obj = {
- name: k,
- get: {
- className: "Function",
- description: `get ${k} () {}`,
- type: "function"
- }
- };
- } else {
- new_obj = { name: k, value: { type: "symbol", value: "", description: ""} };
- }
-
- res_details.push (new_obj);
- });
-
- return { __value_as_json_string__: JSON.stringify (res_details) };
- },
-
- /**
- * Generates a new id, and a corresponding entry for associated properties
- * like `dotnet:pointer:{ a: 4 }`
- * The third segment of that `{a:4}` is the idArgs parameter
- *
- * Only `scheme` or `objectId` can be set.
- * if `scheme`, then a new id is generated, and it's properties set
- * if `objectId`, then it's properties are updated
- *
- * @param {object} args
- * @param {string} [args.scheme=undefined] scheme second part of `dotnet:pointer:..`
- * @param {string} [args.objectId=undefined] objectId
- * @param {object} [args.idArgs={}] The third segment of the objectId
- * @param {object} [args.props={}] Properties for the generated id
- *
- * @returns {string} generated/updated id string
- */
- _new_or_add_id_props: function ({ scheme = undefined, objectId = undefined, idArgs = {}, props = {} }) {
- if (scheme === undefined && objectId === undefined)
- throw new Error (`Either scheme or objectId must be given`);
-
- if (scheme !== undefined && objectId !== undefined)
- throw new Error (`Both scheme, and objectId cannot be given`);
-
- if (objectId !== undefined && Object.entries (idArgs).length > 0)
- throw new Error (`Both objectId, and idArgs cannot be given`);
-
- if (Object.entries (idArgs).length == 0) {
- // We want to generate a new id, only if it doesn't have other
- // attributes that it can use to uniquely identify.
- // Eg, we don't do this for `dotnet:valuetype:{containerId:4, fieldOffset: 24}`
- idArgs.num = this._next_id ();
- }
-
- let idStr;
- if (objectId !== undefined) {
- idStr = objectId;
- const old_props = this._id_table [idStr];
- if (old_props === undefined)
- throw new Error (`ObjectId not found in the id table: ${idStr}`);
-
- this._id_table [idStr] = Object.assign (old_props, props);
- } else {
- idStr = `dotnet:${scheme}:${JSON.stringify (idArgs)}`;
- this._id_table [idStr] = props;
- }
-
- return idStr;
- },
-
- /**
- * @param {string} objectId
- * @returns {object}
- */
- _get_id_props: function (objectId) {
- return this._id_table [objectId];
- },
-
- _get_deref_ptr_value: function (objectId) {
- const ptr_args = this._get_id_props (objectId);
- if (ptr_args === undefined)
- throw new Error (`Unknown pointer id: ${objectId}`);
-
- if (ptr_args.ptr_addr == 0 || ptr_args.klass_addr == 0)
- throw new Error (`Both ptr_addr and klass_addr need to be non-zero, to dereference a pointer. objectId: ${objectId}`);
-
- const value_addr = new DataView (Module.HEAPU8.buffer).getUint32 (ptr_args.ptr_addr, /* littleEndian */ true);
- let { res_ok, res } = this.mono_wasm_get_deref_ptr_value_info (value_addr, ptr_args.klass_addr);
- if (!res_ok)
- throw new Error (`Failed to dereference pointer ${objectId}`);
-
- if (res.length > 0) {
- if (ptr_args.varName === undefined)
- throw new Error (`Bug: no varName found for the pointer. objectId: ${objectId}`);
-
- res [0].name = `*${ptr_args.varName}`;
- }
-
- res = this._post_process_details (res);
- return res;
- },
-
- mono_wasm_get_details: function (objectId, args={}) {
- let id = this._parse_object_id (objectId, true);
-
- switch (id.scheme) {
- case "object": {
- if (isNaN (id.value))
- throw new Error (`Invalid objectId: ${objectId}. Expected a numeric id.`);
-
- args.expandValueTypes = false;
- return this._get_object_properties(id.value, args);
- }
-
- case "array":
- return this._get_array_values (id);
-
- case "valuetype":
- return this._get_vt_properties(id, args);
-
- case "cfo_res":
- return this._get_cfo_res_details (objectId, args);
-
- case "pointer": {
- return this._get_deref_ptr_value (objectId);
- }
-
- default:
- throw new Error(`Unknown object id format: ${objectId}`);
- }
- },
-
- _cache_call_function_res: function (obj) {
- const id = `dotnet:cfo_res:${this._next_call_function_res_id++}`;
- this._call_function_res_cache[id] = obj;
- return id;
- },
-
- mono_wasm_release_object: function (objectId) {
- if (objectId in this._cache_call_function_res)
- delete this._cache_call_function_res[objectId];
- },
-
- /**
- * @param {string} objectIdStr objectId
- * @param {string} name property name
- * @returns {object} return value
- */
- _invoke_getter: function (objectIdStr, name) {
- const id = this._parse_object_id (objectIdStr);
- if (id === undefined)
- throw new Error (`Invalid object id: ${objectIdStr}`);
-
- let getter_res;
- if (id.scheme == 'object') {
- if (isNaN (id.o) || id.o < 0)
- throw new Error (`Invalid object id: ${objectIdStr}`);
-
- let { res_ok, res } = this.mono_wasm_invoke_getter_on_object_info (id.o, name);
- if (!res_ok)
- throw new Error (`Invoking getter on ${objectIdStr} failed`);
-
- getter_res = res;
- } else if (id.scheme == 'valuetype') {
- const id_props = this._get_id_props (objectIdStr);
- if (id_props === undefined)
- throw new Error (`Unknown valuetype id: ${objectIdStr}`);
-
- if (typeof id_props.value64 !== 'string' || isNaN (id_props.klass))
- throw new Error (`Bug: Cannot invoke getter on ${objectIdStr}, because of missing or invalid klass/value64 fields. idProps: ${JSON.stringify (id_props)}`);
-
- const dataPtr = Module._malloc (id_props.value64.length);
- const dataHeap = new Uint8Array (Module.HEAPU8.buffer, dataPtr, id_props.value64.length);
- dataHeap.set (new Uint8Array (this._base64_to_uint8 (id_props.value64)));
-
- let { res_ok, res } = this.mono_wasm_invoke_getter_on_value_info (dataHeap.byteOffset, id_props.klass, name);
- Module._free (dataHeap.byteOffset);
-
- if (!res_ok) {
- console.debug (`Invoking getter on valuetype ${objectIdStr}, with props: ${JSON.stringify (id_props)} failed`);
- throw new Error (`Invoking getter on valuetype ${objectIdStr} failed`);
- }
- getter_res = res;
- } else {
- throw new Error (`Only object, and valuetypes supported for getters, id: ${objectIdStr}`);
- }
-
- getter_res = MONO._post_process_details (getter_res);
- return getter_res.length > 0 ? getter_res [0] : {};
- },
-
- /**
- * @param {string} objectIdStr objectId
- * @param {string} name property name
- * @returns {object} return true if it works and false if it doesn't
- */
- _set_value_on_object: function (objectIdStr, name, newvalue) {
- const id = this._parse_object_id (objectIdStr);
- if (id === undefined)
- throw new Error (`Invalid object id: ${objectIdStr}`);
-
- let setter_res;
- if (id.scheme == 'object') {
- if (isNaN (id.o) || id.o < 0)
- throw new Error (`Invalid object id: ${objectIdStr}`);
-
- var ret = this._c_fn_table.mono_wasm_set_value_on_object_wrapper (id.o, name, newvalue);
- if (!ret)
- throw new Error (`Invoking setter on ${objectIdStr} failed`);
-
- setter_res = ret;
- }
- else
- throw new Error (`Only object is supported for setters, id: ${objectIdStr}`);
- return setter_res;
- },
-
- _create_proxy_from_object_id: function (objectId) {
- const details = this.mono_wasm_get_details(objectId);
-
- if (objectId.startsWith ('dotnet:array:'))
- return details.map (p => p.value);
-
- let proxy = {};
- Object.keys (details).forEach (p => {
- var prop = details [p];
- if (prop.get !== undefined) {
- // TODO: `set`
-
- Object.defineProperty (proxy,
- prop.name,
- { get () { return MONO._invoke_getter (objectId, prop.name); } }
- );
- } else {
- proxy [prop.name] = prop.value;
- }
- });
-
- const handler1 = {
- set (obj, prop, newValue) {return MONO._set_value_on_object (objectId, prop, newValue.toString());},
- };
- return new Proxy(proxy, handler1);
- },
-
- mono_wasm_call_function_on: function (request) {
- if (request.arguments != undefined && !Array.isArray (request.arguments))
- throw new Error (`"arguments" should be an array, but was ${request.arguments}`);
-
- const objId = request.objectId;
- let proxy;
-
- if (objId.startsWith ('dotnet:cfo_res:')) {
- if (objId in this._call_function_res_cache)
- proxy = this._call_function_res_cache [objId];
- else
- throw new Error (`Unknown object id ${objId}`);
- } else {
- proxy = this._create_proxy_from_object_id (objId);
- }
-
- const fn_args = request.arguments != undefined ? request.arguments.map(a => JSON.stringify(a.value)) : [];
- const fn_eval_str = `var fn = ${request.functionDeclaration}; fn.call (proxy, ...[${fn_args}]);`;
-
- const fn_res = eval (fn_eval_str);
- if (fn_res === undefined)
- return { type: "undefined" };
-
- if (fn_res === null || (fn_res.subtype === 'null' && fn_res.value === undefined))
- return fn_res;
-
- // primitive type
- if (Object (fn_res) !== fn_res)
- return fn_res;
-
- // return .value, if it is a primitive type
- if (fn_res.value !== undefined && Object (fn_res.value.value) !== fn_res.value.value)
- return fn_res.value;
-
- if (request.returnByValue)
- return {type: "object", value: fn_res};
-
- const fn_res_id = this._cache_call_function_res (fn_res);
- if (Object.getPrototypeOf (fn_res) == Array.prototype) {
- return {
- type: "object",
- subtype: "array",
- className: "Array",
- description: `Array(${fn_res.length})`,
- objectId: fn_res_id
- };
- } else {
- return { type: "object", className: "Object", description: "Object", objectId: fn_res_id };
- }
- },
-
- _clear_per_step_state: function () {
- this._next_id_var = 0;
- this._id_table = {};
- },
-
- mono_wasm_debugger_resume: function () {
- this._clear_per_step_state ();
- },
-
- mono_wasm_start_single_stepping: function (kind) {
- console.debug (">> mono_wasm_start_single_stepping " + kind);
- if (!this.mono_wasm_setup_single_step)
- this.mono_wasm_setup_single_step = Module.cwrap ("mono_wasm_setup_single_step", 'number', [ 'number']);
-
- this._clear_per_step_state ();
-
- return this.mono_wasm_setup_single_step (kind);
- },
-
- mono_wasm_set_pause_on_exceptions: function (state) {
- if (!this.mono_wasm_pause_on_exceptions)
- this.mono_wasm_pause_on_exceptions = Module.cwrap ("mono_wasm_pause_on_exceptions", 'number', [ 'number']);
- var state_enum = 0;
- switch (state) {
- case 'uncaught':
- state_enum = 1; //EXCEPTION_MODE_UNCAUGHT
- break;
- case 'all':
- state_enum = 2; //EXCEPTION_MODE_ALL
- break;
- }
- return this.mono_wasm_pause_on_exceptions (state_enum);
- },
-
- mono_wasm_detach_debugger: function () {
- if (!this.mono_wasm_set_is_debugger_attached)
- this.mono_wasm_set_is_debugger_attached = Module.cwrap ('mono_wasm_set_is_debugger_attached', 'void', ['bool']);
- this.mono_wasm_set_is_debugger_attached(false);
- },
-
- _register_c_fn: function (name, ...args) {
- Object.defineProperty (this._c_fn_table, name + '_wrapper', { value: Module.cwrap (name, ...args) });
- },
-
- /**
- * Calls `Module.cwrap` for the function name,
- * and creates a wrapper around it that returns
- * `{ bool result, object var_info }
- *
- * @param {string} name C function name
- * @param {string} ret_type
- * @param {string[]} params
- *
- * @returns {void}
- */
- _register_c_var_fn: function (name, ret_type, params) {
- if (ret_type !== 'bool')
- throw new Error (`Bug: Expected a C function signature that returns bool`);
-
- this._register_c_fn (name, ret_type, params);
- Object.defineProperty (this, name + '_info', {
- value: function (...args) {
- MONO.var_info = [];
- const res_ok = MONO._c_fn_table [name + '_wrapper'] (...args);
- let res = MONO.var_info;
- MONO.var_info = [];
- if (res_ok) {
- res = this._fixup_name_value_objects (res);
- return { res_ok, res };
- }
-
- return { res_ok, res: undefined };
- }
- });
- },
-
- mono_wasm_runtime_ready: function () {
- this.mono_wasm_runtime_is_ready = true;
- this._clear_per_step_state ();
-
- // FIXME: where should this go?
- this._next_call_function_res_id = 0;
- this._call_function_res_cache = {};
-
- this._c_fn_table = {};
- this._register_c_var_fn ('mono_wasm_get_object_properties', 'bool', [ 'number', 'number' ]);
- this._register_c_var_fn ('mono_wasm_get_array_values', 'bool', [ 'number', 'number', 'number', 'number' ]);
- this._register_c_var_fn ('mono_wasm_invoke_getter_on_object', 'bool', [ 'number', 'string' ]);
- this._register_c_var_fn ('mono_wasm_invoke_getter_on_value', 'bool', [ 'number', 'number', 'string' ]);
- this._register_c_var_fn ('mono_wasm_get_local_vars', 'bool', [ 'number', 'number', 'number']);
- this._register_c_var_fn ('mono_wasm_get_deref_ptr_value', 'bool', [ 'number', 'number']);
- this._register_c_fn ('mono_wasm_set_value_on_object', 'bool', [ 'number', 'string', 'string' ]);
- this._register_c_fn ('mono_wasm_set_variable_on_frame', 'bool', [ 'number', 'number', 'string', 'string']);
- // DO NOT REMOVE - magic debugger init function
- if (globalThis.dotnetDebugger)
- debugger;
- else
- console.debug ("mono_wasm_runtime_ready", "fe00e07a-5519-4dfe-b35a-f867dbaf2e28");
- },
-
- mono_wasm_set_breakpoint: function (assembly, method_token, il_offset) {
- if (!this.mono_wasm_set_bp)
- this.mono_wasm_set_bp = Module.cwrap ('mono_wasm_set_breakpoint', 'number', ['string', 'number', 'number']);
-
- return this.mono_wasm_set_bp (assembly, method_token, il_offset)
- },
-
- mono_wasm_remove_breakpoint: function (breakpoint_id) {
- if (!this.mono_wasm_del_bp)
- this.mono_wasm_del_bp = Module.cwrap ('mono_wasm_remove_breakpoint', 'number', ['number']);
-
- return this.mono_wasm_del_bp (breakpoint_id);
- },
-
- // Set environment variable NAME to VALUE
- // Should be called before mono_load_runtime_and_bcl () in most cases
- mono_wasm_setenv: function (name, value) {
- if (!this.wasm_setenv)
- this.wasm_setenv = Module.cwrap ('mono_wasm_setenv', null, ['string', 'string']);
- this.wasm_setenv (name, value);
- },
-
- mono_wasm_set_runtime_options: function (options) {
- if (!this.wasm_parse_runtime_options)
- this.wasm_parse_runtime_options = Module.cwrap ('mono_wasm_parse_runtime_options', null, ['number', 'number']);
- var argv = Module._malloc (options.length * 4);
- var wasm_strdup = Module.cwrap ('mono_wasm_strdup', 'number', ['string']);
- let aindex = 0;
- for (var i = 0; i < options.length; ++i) {
- Module.setValue (argv + (aindex * 4), wasm_strdup (options [i]), "i32");
- aindex += 1;
- }
- this.wasm_parse_runtime_options (options.length, argv);
- },
-
- //
- // Initialize the AOT profiler with OPTIONS.
- // Requires the AOT profiler to be linked into the app.
- // options = { write_at: "", send_to: "" }
- // should be in the format ::.
- // write_at defaults to 'WebAssembly.Runtime::StopProfile'.
- // send_to defaults to 'WebAssembly.Runtime::DumpAotProfileData'.
- // DumpAotProfileData stores the data into Module.aot_profile_data.
- //
- mono_wasm_init_aot_profiler: function (options) {
- if (options == null)
- options = {}
- if (!('write_at' in options))
- options.write_at = 'Interop/Runtime::StopProfile';
- if (!('send_to' in options))
- options.send_to = 'Interop/Runtime::DumpAotProfileData';
- var arg = "aot:write-at-method=" + options.write_at + ",send-to-method=" + options.send_to;
- Module.ccall ('mono_wasm_load_profiler_aot', null, ['string'], [arg]);
- },
-
- // options = { write_at: "", send_to: "" }
- // should be in the format ::.
- // write_at defaults to 'WebAssembly.Runtime::StopProfile'.
- // send_to defaults to 'WebAssembly.Runtime::DumpCoverageProfileData'.
- // DumpCoverageProfileData stores the data into Module.coverage_profile_data.
- mono_wasm_init_coverage_profiler: function (options) {
- if (options == null)
- options = {}
- if (!('write_at' in options))
- options.write_at = 'WebAssembly.Runtime::StopProfile';
- if (!('send_to' in options))
- options.send_to = 'WebAssembly.Runtime::DumpCoverageProfileData';
- var arg = "coverage:write-at-method=" + options.write_at + ",send-to-method=" + options.send_to;
- Module.ccall ('mono_wasm_load_profiler_coverage', null, ['string'], [arg]);
- },
-
- _apply_configuration_from_args: function (args) {
- for (var k in (args.environment_variables || {}))
- MONO.mono_wasm_setenv (k, args.environment_variables[k]);
-
- if (args.runtime_options)
- MONO.mono_wasm_set_runtime_options (args.runtime_options);
-
- if (args.aot_profiler_options)
- MONO.mono_wasm_init_aot_profiler (args.aot_profiler_options);
-
- if (args.coverage_profiler_options)
- MONO.mono_wasm_init_coverage_profiler (args.coverage_profiler_options);
- },
-
- _get_fetch_file_cb_from_args: function (args) {
- if (typeof (args.fetch_file_cb) === "function")
- return args.fetch_file_cb;
-
- if (ENVIRONMENT_IS_NODE) {
- var fs = require('fs');
- return function (asset) {
- console.debug ("MONO_WASM: Loading... " + asset);
- var binary = fs.readFileSync (asset);
- var resolve_func2 = function (resolve, reject) {
- resolve (new Uint8Array (binary));
- };
-
- var resolve_func1 = function (resolve, reject) {
- var response = {
- ok: true,
- url: asset,
- arrayBuffer: function () {
- return new Promise (resolve_func2);
- }
- };
- resolve (response);
- };
-
- return new Promise (resolve_func1);
- };
- } else if (typeof (fetch) === "function") {
- return function (asset) {
- return fetch (asset, { credentials: 'same-origin' });
- };
- } else {
- throw new Error ("No fetch_file_cb was provided and this environment does not expose 'fetch'.");
- }
- },
-
- _handle_loaded_asset: function (ctx, asset, url, blob) {
- var bytes = new Uint8Array (blob);
- if (ctx.tracing)
- console.log ("MONO_WASM: Loaded:", asset.name, "size", bytes.length, "from", url);
-
- var virtualName = asset.virtual_path || asset.name;
- var offset = null;
-
- switch (asset.behavior) {
- case "resource":
- case "assembly":
- ctx.loaded_files.push ({ url: url, file: virtualName});
- case "heap":
- case "icu":
- offset = this.mono_wasm_load_bytes_into_heap (bytes);
- ctx.loaded_assets[virtualName] = [offset, bytes.length];
- break;
-
- case "vfs":
- // FIXME
- var lastSlash = virtualName.lastIndexOf("/");
- var parentDirectory = (lastSlash > 0)
- ? virtualName.substr(0, lastSlash)
- : null;
- var fileName = (lastSlash > 0)
- ? virtualName.substr(lastSlash + 1)
- : virtualName;
- if (fileName.startsWith("/"))
- fileName = fileName.substr(1);
- if (parentDirectory) {
- if (ctx.tracing)
- console.log ("MONO_WASM: Creating directory '" + parentDirectory + "'");
-
- var pathRet = ctx.createPath(
- "/", parentDirectory, true, true // fixme: should canWrite be false?
- );
- } else {
- parentDirectory = "/";
- }
-
- if (ctx.tracing)
- console.log ("MONO_WASM: Creating file '" + fileName + "' in directory '" + parentDirectory + "'");
-
- if (!this.mono_wasm_load_data_archive (bytes, parentDirectory)) {
- var fileRet = ctx.createDataFile (
- parentDirectory, fileName,
- bytes, true /* canRead */, true /* canWrite */, true /* canOwn */
- );
- }
- break;
-
- default:
- throw new Error ("Unrecognized asset behavior:", asset.behavior, "for asset", asset.name);
- }
-
- if (asset.behavior === "assembly") {
- var hasPpdb = ctx.mono_wasm_add_assembly (virtualName, offset, bytes.length);
-
- if (!hasPpdb) {
- var index = ctx.loaded_files.findIndex(element => element.file == virtualName);
- ctx.loaded_files.splice(index, 1);
- }
- }
- else if (asset.behavior === "icu") {
- if (this.mono_wasm_load_icu_data (offset))
- ctx.num_icu_assets_loaded_successfully += 1;
- else
- console.error ("Error loading ICU asset", asset.name);
- }
- else if (asset.behavior === "resource") {
- ctx.mono_wasm_add_satellite_assembly (virtualName, asset.culture, offset, bytes.length);
- }
- },
-
- // deprecated
- mono_load_runtime_and_bcl: function (
- unused_vfs_prefix, deploy_prefix, debug_level, file_list, loaded_cb, fetch_file_cb
- ) {
- var args = {
- fetch_file_cb: fetch_file_cb,
- loaded_cb: loaded_cb,
- debug_level: debug_level,
- assembly_root: deploy_prefix,
- assets: []
- };
-
- for (var i = 0; i < file_list.length; i++) {
- var file_name = file_list[i];
- var behavior;
- if (file_name.startsWith ("icudt") && file_name.endsWith (".dat")) {
- // ICU data files are expected to be "icudt%FilterName%.dat"
- behavior = "icu";
- } else { // if (file_name.endsWith (".pdb") || file_name.endsWith (".dll"))
- behavior = "assembly";
- }
-
- args.assets.push ({
- name: file_name,
- behavior: behavior
- });
- }
-
- return this.mono_load_runtime_and_bcl_args (args);
- },
-
- // Initializes the runtime and loads assemblies, debug information, and other files.
- // @args is a dictionary-style Object with the following properties:
- // assembly_root: (required) the subfolder containing managed assemblies and pdbs
- // debug_level or enable_debugging: (required)
- // assets: (required) a list of assets to load along with the runtime. each asset
- // is a dictionary-style Object with the following properties:
- // name: (required) the name of the asset, including extension.
- // behavior: (required) determines how the asset will be handled once loaded:
- // "heap": store asset into the native heap
- // "assembly": load asset as a managed assembly (or debugging information)
- // "resource": load asset as a managed resource assembly
- // "icu": load asset as an ICU data archive
- // "vfs": load asset into the virtual filesystem (for fopen, File.Open, etc)
- // load_remote: (optional) if true, an attempt will be made to load the asset
- // from each location in @args.remote_sources.
- // virtual_path: (optional) if specified, overrides the path of the asset in
- // the virtual filesystem and similar data structures once loaded.
- // is_optional: (optional) if true, any failure to load this asset will be ignored.
- // loaded_cb: (required) a function () invoked when loading has completed.
- // fetch_file_cb: (optional) a function (string) invoked to fetch a given file.
- // If no callback is provided a default implementation appropriate for the current
- // environment will be selected (readFileSync in node, fetch elsewhere).
- // If no default implementation is available this call will fail.
- // remote_sources: (optional) additional search locations for assets.
- // sources will be checked in sequential order until the asset is found.
- // the string "./" indicates to load from the application directory (as with the
- // files in assembly_list), and a fully-qualified URL like "https://example.com/" indicates
- // that asset loads can be attempted from a remote server. Sources must end with a "/".
- // environment_variables: (optional) dictionary-style Object containing environment variables
- // runtime_options: (optional) array of runtime options as strings
- // aot_profiler_options: (optional) dictionary-style Object. see the comments for
- // mono_wasm_init_aot_profiler. If omitted, aot profiler will not be initialized.
- // coverage_profiler_options: (optional) dictionary-style Object. see the comments for
- // mono_wasm_init_coverage_profiler. If omitted, coverage profiler will not be initialized.
- // globalization_mode: (optional) configures the runtime's globalization mode:
- // "icu": load ICU globalization data from any runtime assets with behavior "icu".
- // "invariant": operate in invariant globalization mode.
- // "auto" (default): if "icu" behavior assets are present, use ICU, otherwise invariant.
- // diagnostic_tracing: (optional) enables diagnostic log messages during startup
- mono_load_runtime_and_bcl_args: function (args) {
- try {
- return this._load_assets_and_runtime (args);
- } catch (exc) {
- console.error ("error in mono_load_runtime_and_bcl_args:", exc);
- throw exc;
- }
- },
-
- // @bytes must be a typed array. space is allocated for it in the native heap
- // and it is copied to that location. returns the address of the allocation.
- mono_wasm_load_bytes_into_heap: function (bytes) {
- var memoryOffset = Module._malloc (bytes.length);
- var heapBytes = new Uint8Array (Module.HEAPU8.buffer, memoryOffset, bytes.length);
- heapBytes.set (bytes);
- return memoryOffset;
- },
-
- num_icu_assets_loaded_successfully: 0,
-
- // @offset must be the address of an ICU data archive in the native heap.
- // returns true on success.
- mono_wasm_load_icu_data: function (offset) {
- var fn = Module.cwrap ('mono_wasm_load_icu_data', 'number', ['number']);
- var ok = (fn (offset)) === 1;
- if (ok)
- this.num_icu_assets_loaded_successfully++;
- return ok;
- },
-
- // Get icudt.dat exact filename that matches given culture, examples:
- // "ja" -> "icudt_CJK.dat"
- // "en_US" (or "en-US" or just "en") -> "icudt_EFIGS.dat"
- // etc, see "mono_wasm_get_icudt_name" implementation in pal_icushim_static.c
- mono_wasm_get_icudt_name: function (culture) {
- return Module.ccall ('mono_wasm_get_icudt_name', 'string', ['string'], [culture]);
- },
-
- _finalize_startup: function (args, ctx) {
- var loaded_files_with_debug_info = [];
-
- MONO.loaded_assets = ctx.loaded_assets;
- ctx.loaded_files.forEach(value => loaded_files_with_debug_info.push(value.url));
- MONO.loaded_files = loaded_files_with_debug_info;
- if (ctx.tracing) {
- console.log ("MONO_WASM: loaded_assets: " + JSON.stringify(ctx.loaded_assets));
- console.log ("MONO_WASM: loaded_files: " + JSON.stringify(ctx.loaded_files));
- }
-
- var load_runtime = Module.cwrap ('mono_wasm_load_runtime', null, ['string', 'number']);
-
- console.debug ("MONO_WASM: Initializing mono runtime");
-
- this.mono_wasm_globalization_init (args.globalization_mode);
-
- if (ENVIRONMENT_IS_SHELL || ENVIRONMENT_IS_NODE) {
- try {
- load_runtime ("unused", args.debug_level);
- } catch (ex) {
- print ("MONO_WASM: load_runtime () failed: " + ex);
- print ("MONO_WASM: Stacktrace: \n");
- print (ex.stack);
-
- var wasm_exit = Module.cwrap ('mono_wasm_exit', null, ['number']);
- wasm_exit (1);
- }
- } else {
- load_runtime ("unused", args.debug_level);
- }
-
- let tz;
- try {
- tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
- } catch {}
- MONO.mono_wasm_setenv ("TZ", tz || "UTC");
- MONO.mono_wasm_runtime_ready ();
- args.loaded_cb ();
- },
-
- _load_assets_and_runtime: function (args) {
- if (args.enable_debugging)
- args.debug_level = args.enable_debugging;
- if (args.assembly_list)
- throw new Error ("Invalid args (assembly_list was replaced by assets)");
- if (args.runtime_assets)
- throw new Error ("Invalid args (runtime_assets was replaced by assets)");
- if (args.runtime_asset_sources)
- throw new Error ("Invalid args (runtime_asset_sources was replaced by remote_sources)");
- if (!args.loaded_cb)
- throw new Error ("loaded_cb not provided");
-
- var ctx = {
- tracing: args.diagnostic_tracing || false,
- pending_count: args.assets.length,
- mono_wasm_add_assembly: Module.cwrap ('mono_wasm_add_assembly', 'number', ['string', 'number', 'number']),
- mono_wasm_add_satellite_assembly: Module.cwrap ('mono_wasm_add_satellite_assembly', 'void', ['string', 'string', 'number', 'number']),
- loaded_assets: Object.create (null),
- // dlls and pdbs, used by blazor and the debugger
- loaded_files: [],
- createPath: Module['FS_createPath'],
- createDataFile: Module['FS_createDataFile']
- };
-
- if (ctx.tracing)
- console.log ("mono_wasm_load_runtime_with_args", JSON.stringify(args));
-
- this._apply_configuration_from_args (args);
-
- var fetch_file_cb = this._get_fetch_file_cb_from_args (args);
-
- var onPendingRequestComplete = function () {
- --ctx.pending_count;
-
- if (ctx.pending_count === 0) {
- try {
- MONO._finalize_startup (args, ctx);
- } catch (exc) {
- console.error ("Unhandled exception in _finalize_startup", exc);
- throw exc;
- }
- }
- };
-
- var processFetchResponseBuffer = function (asset, url, blob) {
- try {
- MONO._handle_loaded_asset (ctx, asset, url, blob);
- } catch (exc) {
- console.error ("Unhandled exception in processFetchResponseBuffer", exc);
- throw exc;
- } finally {
- onPendingRequestComplete ();
- }
- };
-
- args.assets.forEach (function (asset) {
- var attemptNextSource;
- var sourceIndex = 0;
- var sourcesList = asset.load_remote ? args.remote_sources : [""];
-
- var handleFetchResponse = function (response) {
- if (!response.ok) {
- try {
- attemptNextSource ();
- return;
- } catch (exc) {
- console.error ("MONO_WASM: Unhandled exception in handleFetchResponse attemptNextSource for asset", asset.name, exc);
- throw exc;
- }
- }
-
- try {
- var bufferPromise = response ['arrayBuffer'] ();
- bufferPromise.then (processFetchResponseBuffer.bind (this, asset, response.url));
- } catch (exc) {
- console.error ("MONO_WASM: Unhandled exception in handleFetchResponse for asset", asset.name, exc);
- attemptNextSource ();
- }
- };
-
- attemptNextSource = function () {
- if (sourceIndex >= sourcesList.length) {
- var msg = "MONO_WASM: Failed to load " + asset.name;
- try {
- var isOk = asset.is_optional ||
- (asset.name.match (/\.pdb$/) && MONO.mono_wasm_ignore_pdb_load_errors);
-
- if (isOk)
- console.debug (msg);
- else {
- console.error (msg);
- throw new Error (msg);
- }
- } finally {
- onPendingRequestComplete ();
- }
- }
-
- var sourcePrefix = sourcesList[sourceIndex];
- sourceIndex++;
-
- // HACK: Special-case because MSBuild doesn't allow "" as an attribute
- if (sourcePrefix === "./")
- sourcePrefix = "";
-
- var attemptUrl;
- if (sourcePrefix.trim() === "") {
- if (asset.behavior === "assembly")
- attemptUrl = locateFile (args.assembly_root + "/" + asset.name);
- else if (asset.behavior === "resource") {
- var path = asset.culture !== '' ? `${asset.culture}/${asset.name}` : asset.name;
- attemptUrl = locateFile (args.assembly_root + "/" + path);
- }
- else
- attemptUrl = asset.name;
- } else {
- attemptUrl = sourcePrefix + asset.name;
- }
-
- try {
- if (asset.name === attemptUrl) {
- if (ctx.tracing)
- console.log ("Attempting to fetch '" + attemptUrl + "'");
- } else {
- if (ctx.tracing)
- console.log ("Attempting to fetch '" + attemptUrl + "' for", asset.name);
- }
- var fetch_promise = fetch_file_cb (attemptUrl);
- fetch_promise.then (handleFetchResponse);
- } catch (exc) {
- console.error ("MONO_WASM: Error fetching " + attemptUrl, exc);
- attemptNextSource ();
- }
- };
-
- attemptNextSource ();
- });
- },
-
- // Performs setup for globalization.
- // @globalization_mode is one of "icu", "invariant", or "auto".
- // "auto" will use "icu" if any ICU data archives have been loaded,
- // otherwise "invariant".
- mono_wasm_globalization_init: function (globalization_mode) {
- var invariantMode = false;
-
- if (globalization_mode === "invariant")
- invariantMode = true;
-
- if (!invariantMode) {
- if (this.num_icu_assets_loaded_successfully > 0) {
- console.debug ("MONO_WASM: ICU data archive(s) loaded, disabling invariant mode");
- } else if (globalization_mode !== "icu") {
- console.debug ("MONO_WASM: ICU data archive(s) not loaded, using invariant globalization mode");
- invariantMode = true;
- } else {
- var msg = "invariant globalization mode is inactive and no ICU data archives were loaded";
- console.error ("MONO_WASM: ERROR: " + msg);
- throw new Error (msg);
- }
- }
-
- if (invariantMode)
- this.mono_wasm_setenv ("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1");
-
- // Set globalization mode to PredefinedCulturesOnly
- this.mono_wasm_setenv ("DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY", "1");
- },
-
- // Used by the debugger to enumerate loaded dlls and pdbs
- mono_wasm_get_loaded_files: function() {
- if (!this.mono_wasm_set_is_debugger_attached)
- this.mono_wasm_set_is_debugger_attached = Module.cwrap ('mono_wasm_set_is_debugger_attached', 'void', ['bool']);
- this.mono_wasm_set_is_debugger_attached (true);
- return MONO.loaded_files;
- },
-
- mono_wasm_get_loaded_asset_table: function() {
- return MONO.loaded_assets;
- },
-
- mono_wasm_clear_all_breakpoints: function() {
- if (!this.mono_clear_bps)
- this.mono_clear_bps = Module.cwrap ('mono_wasm_clear_all_breakpoints', null);
-
- this.mono_clear_bps ();
- },
-
- mono_wasm_add_null_var: function(className)
- {
- let fixed_class_name = MONO._mono_csharp_fixup_class_name(Module.UTF8ToString (className));
- if (!fixed_class_name) {
- // Eg, when a @className is passed from js itself, like
- // mono_wasm_add_null_var ("string")
- fixed_class_name = className;
- }
- MONO.var_info.push ({value: {
- type: "object",
- className: fixed_class_name,
- description: fixed_class_name,
- subtype: "null"
- }});
- },
-
- _mono_wasm_add_string_var: function(var_value) {
- if (var_value === 0) {
- MONO.mono_wasm_add_null_var ("string");
- return;
- }
-
- MONO.var_info.push({
- value: {
- type: "string",
- value: var_value,
- description: var_value
- }
- });
- },
-
- _mono_wasm_add_getter_var: function(className) {
- const fixed_class_name = MONO._mono_csharp_fixup_class_name (className);
- var name;
- if (MONO.var_info.length > 0)
- name = MONO.var_info [MONO.var_info.length - 1].name;
- name = (name === undefined) ? "" : name;
-
- MONO.var_info.push({
- get: {
- className: "Function",
- description: `get ${name} () {}`,
- type: "function",
- }
- });
- },
-
- _mono_wasm_add_array_var: function(className, objectId, length) {
- const fixed_class_name = MONO._mono_csharp_fixup_class_name(className);
- if (objectId == 0) {
- MONO.mono_wasm_add_null_var (fixed_class_name);
- return;
- }
-
- MONO.var_info.push({
- value: {
- type: "object",
- subtype: "array",
- className: fixed_class_name,
- description: `${fixed_class_name}(${length})`,
- objectId: this._new_or_add_id_props ({ scheme: 'array', idArgs: { arrayId: objectId } })
- }
- });
- },
-
- // FIXME: improve
- _base64_to_uint8: function (base64String) {
- const byteCharacters = atob (base64String);
- const byteNumbers = new Array(byteCharacters.length);
- for (let i = 0; i < byteCharacters.length; i++) {
- byteNumbers[i] = byteCharacters.charCodeAt(i);
- }
-
- return new Uint8Array (byteNumbers);
- },
-
- _begin_value_type_var: function(className, args) {
- if (args === undefined || (typeof args !== 'object')) {
- console.debug (`_begin_value_type_var: Expected an args object`);
- return;
- }
-
- const fixed_class_name = MONO._mono_csharp_fixup_class_name(className);
- const toString = args.toString;
- const base64String = btoa (String.fromCharCode (...new Uint8Array (Module.HEAPU8.buffer, args.value_addr, args.value_size)));
- const vt_obj = {
- value: {
- type : "object",
- className : fixed_class_name,
- description : (toString === 0 ? fixed_class_name: Module.UTF8ToString (toString)),
- expanded : true,
- isValueType : true,
- __extra_vt_props: { klass: args.klass, value64: base64String },
- members : []
- }
- };
- if (MONO._vt_stack.length == 0)
- MONO._old_var_info = MONO.var_info;
-
- MONO.var_info = vt_obj.value.members;
- MONO._vt_stack.push (vt_obj);
- },
-
- _end_value_type_var: function() {
- let top_vt_obj_popped = MONO._vt_stack.pop ();
- top_vt_obj_popped.value.members = MONO._filter_automatic_properties (
- MONO._fixup_name_value_objects (top_vt_obj_popped.value.members));
-
- if (MONO._vt_stack.length == 0) {
- MONO.var_info = MONO._old_var_info;
- MONO.var_info.push(top_vt_obj_popped);
- } else {
- var top_obj = MONO._vt_stack [MONO._vt_stack.length - 1];
- top_obj.value.members.push (top_vt_obj_popped);
- MONO.var_info = top_obj.value.members;
- }
- },
-
- _add_valuetype_unexpanded_var: function(className, args) {
- if (args === undefined || (typeof args !== 'object')) {
- console.debug (`_add_valuetype_unexpanded_var: Expected an args object`);
- return;
- }
-
- const fixed_class_name = MONO._mono_csharp_fixup_class_name (className);
- const toString = args.toString;
-
- MONO.var_info.push ({
- value: {
- type: "object",
- className: fixed_class_name,
- description: (toString === 0 ? fixed_class_name : Module.UTF8ToString (toString)),
- isValueType: true
- }
- });
- },
-
- mono_wasm_add_properties_var: function (name, args) {
- if (typeof args !== 'object')
- args = { field_offset: args };
-
- if (args.owner_class !== undefined && args.owner_class !== 0)
- args.owner_class = Module.UTF8ToString(args.owner_class);
-
- let name_obj = {
- name: Module.UTF8ToString (name),
- fieldOffset: args.field_offset,
- __args: args
- };
- if (args.is_own)
- name_obj.isOwn = true;
-
- MONO.var_info.push(name_obj);
- },
-
- mono_wasm_add_typed_value: function (type, str_value, value) {
- let type_str = type;
- if (typeof type != 'string')
- type_str = Module.UTF8ToString (type);
-
- if (str_value !== 0)
- str_value = Module.UTF8ToString (str_value);
-
- switch (type_str) {
- case "bool": {
- const v = value != 0;
- MONO.var_info.push ({
- value: {
- type: "boolean",
- value: v,
- description: v.toString ()
- },
- writable:true
- });
- break;
- }
-
- case "char": {
- const v = `${value} '${String.fromCharCode (value)}'`;
- MONO.var_info.push ({
- value: {
- type: "symbol",
- value: v,
- description: v
- },
- writable:true
- });
- break;
- }
-
- case "number":
- MONO.var_info.push ({
- value: {
- type: "number",
- value: value,
- description: '' + value
- },
- writable:true
- });
- break;
-
- case "string":
- MONO._mono_wasm_add_string_var (str_value);
- break;
-
- case "getter":
- MONO._mono_wasm_add_getter_var (str_value);
- break;
-
- case "array":
- MONO._mono_wasm_add_array_var (str_value, value.objectId, value.length);
- break;
-
- case "begin_vt":
- MONO._begin_value_type_var (str_value, value);
- break;
-
- case "end_vt":
- MONO._end_value_type_var ();
- break;
-
- case "unexpanded_vt":
- MONO._add_valuetype_unexpanded_var (str_value, value);
- break;
-
- case "pointer": {
- const fixed_value_str = MONO._mono_csharp_fixup_class_name (str_value);
- if (value.klass_addr == 0 || value.ptr_addr == 0 || fixed_value_str.startsWith ('(void*')) {
- // null or void*, which we can't deref
- MONO.var_info.push({
- value: {
- type: "symbol",
- value: fixed_value_str,
- description: fixed_value_str
- }
- });
- } else {
- MONO.var_info.push({
- value: {
- type: "object",
- className: fixed_value_str,
- description: fixed_value_str,
- objectId: this._new_or_add_id_props ({ scheme: 'pointer', props: value })
- }
- });
- }
- }
- break;
-
- case "symbol": {
- if (typeof value === 'object' && value.isClassName)
- str_value = MONO._mono_csharp_fixup_class_name (str_value);
-
- MONO.var_info.push ({
- value: {
- type: "symbol",
- value: str_value,
- description: str_value
- }
- });
- }
- break;
-
- default: {
- const msg = `'${str_value}' ${value}`;
-
- MONO.var_info.push ({
- value: {
- type: "symbol",
- value: msg,
- description: msg
- }
- });
- break;
- }
- }
- },
-
- _mono_csharp_fixup_class_name: function(className)
- {
- // Fix up generic names like Foo`2 to Foo
- // and nested class names like Foo/Bar to Foo.Bar
- return className.replace(/\//g, '.').replace(/`\d+/g, '');
- },
-
- mono_wasm_load_data_archive: function (data, prefix) {
- if (data.length < 8)
- return false;
-
- var dataview = new DataView(data.buffer);
- var magic = dataview.getUint32(0, true);
- // get magic number
- if (magic != 0x626c6174) {
- return false;
- }
- var manifestSize = dataview.getUint32(4, true);
- if (manifestSize == 0 || data.length < manifestSize + 8)
- return false;
-
- var manifest;
- try {
- manifestContent = Module.UTF8ArrayToString(data, 8, manifestSize);
- manifest = JSON.parse(manifestContent);
- if (!(manifest instanceof Array))
- return false;
- } catch (exc) {
- return false;
- }
-
- data = data.slice(manifestSize+8);
-
- // Create the folder structure
- // /usr/share/zoneinfo
- // /usr/share/zoneinfo/Africa
- // /usr/share/zoneinfo/Asia
- // ..
-
- var folders = new Set()
- manifest.filter(m => {
- var file = m[0];
- var last = file.lastIndexOf ("/");
- var directory = file.slice (0, last+1);
- folders.add(directory);
- });
- folders.forEach(folder => {
- Module['FS_createPath'](prefix, folder, true, true);
- });
-
- for (row of manifest) {
- var name = row[0];
- var length = row[1];
- var bytes = data.slice(0, length);
- Module['FS_createDataFile'](prefix, name, bytes, true, true);
- data = data.slice(length);
- }
- return true;
- },
-
- /**
- * Raises an event for the debug proxy
- *
- * @param {Event} event - event to be raised
- * @param {object} args - arguments for raising this event, eg. `{trace: true}`
- */
- mono_wasm_raise_debug_event: function(event, args={}) {
- if (typeof event !== 'object')
- throw new Error(`event must be an object, but got ${JSON.stringify(event)}`);
-
- if (event.eventName === undefined)
- throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`);
-
- if (typeof args !== 'object')
- throw new Error(`args must be an object, but got ${JSON.stringify(args)}`);
-
- console.debug('mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae', JSON.stringify(event), JSON.stringify(args));
- },
- },
-
- mono_wasm_add_typed_value: function (type, str_value, value) {
- MONO.mono_wasm_add_typed_value (type, str_value, value);
- },
-
- mono_wasm_add_properties_var: function(name, args) {
- MONO.mono_wasm_add_properties_var (name, args);
- },
-
- mono_wasm_set_is_async_method: function(objectId) {
- MONO._async_method_objectId = objectId;
- },
-
- mono_wasm_add_enum_var: function(className, members, value) {
- // FIXME: flags
- //
-
- // group0: Monday:0
- // group1: Monday
- // group2: 0
- const re = new RegExp (`[,]?([^,:]+):(${value}(?=,)|${value}$)`, 'g')
- const members_str = Module.UTF8ToString (members);
-
- const match = re.exec(members_str);
- const member_name = match == null ? ('' + value) : match [1];
-
- const fixed_class_name = MONO._mono_csharp_fixup_class_name(Module.UTF8ToString (className));
- MONO.var_info.push({
- value: {
- type: "object",
- className: fixed_class_name,
- description: member_name,
- isEnum: true
- }
- });
- },
-
- mono_wasm_add_array_item: function(position) {
- MONO.var_info.push({
- name: `${position}`
- });
- },
-
- mono_wasm_add_obj_var: function(className, toString, objectId) {
- if (objectId == 0) {
- MONO.mono_wasm_add_null_var (className);
- return;
- }
-
- const fixed_class_name = MONO._mono_csharp_fixup_class_name(Module.UTF8ToString (className));
- MONO.var_info.push({
- value: {
- type: "object",
- className: fixed_class_name,
- description: (toString === 0 ? fixed_class_name : Module.UTF8ToString (toString)),
- objectId: "dotnet:object:"+ objectId,
- }
- });
- },
-
- /*
- * @className, and @targetName are in the following format:
- *
- * :[]:
- */
- mono_wasm_add_func_var: function (className, targetName, objectId) {
- if (objectId == 0) {
- MONO.mono_wasm_add_null_var (
- MONO._mono_csharp_fixup_class_name (Module.UTF8ToString (className)));
- return;
- }
-
- function args_to_sig (args_str) {
- var parts = args_str.split (":");
- // TODO: min length = 3?
- parts = parts.map (a => MONO._mono_csharp_fixup_class_name (a));
-
- // method name at the end
- var method_name = parts.pop ();
-
- // ret type at the beginning
- var ret_sig = parts [0];
- var args_sig = parts.splice (1).join (', ');
- return `${ret_sig} ${method_name} (${args_sig})`;
- }
- let tgt_sig;
- if (targetName != 0)
- tgt_sig = args_to_sig (Module.UTF8ToString (targetName));
-
- const type_name = MONO._mono_csharp_fixup_class_name (Module.UTF8ToString (className));
- if (tgt_sig === undefined)
- tgt_sig = type_name;
-
- if (objectId == -1 || targetName === 0) {
- // Target property
- MONO.var_info.push ({
- value: {
- type: "symbol",
- value: tgt_sig,
- description: tgt_sig,
- }
- });
- } else {
- MONO.var_info.push ({
- value: {
- type: "object",
- className: type_name,
- description: tgt_sig,
- objectId: "dotnet:object:" + objectId,
- }
- });
- }
- },
-
- mono_wasm_add_frame: function(il, method, frame_id, assembly_name, method_full_name) {
- var parts = Module.UTF8ToString (method_full_name).split (":", 2);
- MONO.active_frames.push( {
- il_pos: il,
- method_token: method,
- assembly_name: Module.UTF8ToString (assembly_name),
- // Extract just the method name from `{class_name}:{method_name}`
- method_name: parts [parts.length - 1],
- frame_id
- });
- },
-
- schedule_background_exec: function () {
- ++MONO.pump_count;
- if (typeof globalThis.setTimeout === 'function') {
- globalThis.setTimeout (MONO.pump_message, 0);
- }
- },
-
- mono_set_timeout: function (timeout, id) {
- if (!this.mono_set_timeout_exec)
- this.mono_set_timeout_exec = Module.cwrap ("mono_set_timeout_exec", null, [ 'number' ]);
-
- if (typeof globalThis.setTimeout === 'function') {
- globalThis.setTimeout (function () {
- this.mono_set_timeout_exec (id);
- }, timeout);
- } else {
- ++MONO.pump_count;
- MONO.timeout_queue.push(function() {
- this.mono_set_timeout_exec (id);
- })
- }
- },
-
- mono_wasm_fire_bp: function () {
- // eslint-disable-next-line no-debugger
- debugger;
- },
-
- mono_wasm_fire_exception: function (exception_id, message, class_name, uncaught) {
- MONO.active_exception = {
- exception_id: exception_id,
- message : Module.UTF8ToString (message),
- class_name : Module.UTF8ToString (class_name),
- uncaught : uncaught
- };
- debugger;
- },
-
- mono_wasm_asm_loaded: function (assembly_name, assembly_ptr, assembly_len, pdb_ptr, pdb_len) {
- // Only trigger this codepath for assemblies loaded after app is ready
- if (MONO.mono_wasm_runtime_is_ready !== true)
- return;
-
- const assembly_name_str = assembly_name !== 0 ? Module.UTF8ToString(assembly_name).concat('.dll') : '';
-
- const assembly_data = new Uint8Array(Module.HEAPU8.buffer, assembly_ptr, assembly_len);
- const assembly_b64 = MONO._base64Converter.toBase64StringImpl(assembly_data);
-
- let pdb_b64;
- if (pdb_ptr) {
- const pdb_data = new Uint8Array(Module.HEAPU8.buffer, pdb_ptr, pdb_len);
- pdb_b64 = MONO._base64Converter.toBase64StringImpl(pdb_data);
- }
-
- MONO.mono_wasm_raise_debug_event({
- eventName: 'AssemblyLoaded',
- assembly_name: assembly_name_str,
- assembly_b64,
- pdb_b64
- });
- },
-};
-
-autoAddDeps(MonoSupportLib, '$MONO')
-mergeInto(LibraryManager.library, MonoSupportLib)
-
-// SIG // Begin signature block
-// SIG // MIIkiQYJKoZIhvcNAQcCoIIkejCCJHYCAQExDzANBglg
-// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
-// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
-// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
-// SIG // Tvvy87p47DiUVUWnMbIR1/KRbWHFmD0b1Ot+3ZtV2Eig
-// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA
-// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV
-// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
-// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
-// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
-// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX
-// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR
-// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
-// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
-// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB
-// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW
-// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc
-// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb
-// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi
-// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk
-// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF
-// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO
-// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa
-// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp
-// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3
-// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym
-// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq
-// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB
-// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3
-// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw
-// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy
-// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf
-// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU
-// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv
-// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw
-// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv
-// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw
-// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA
-// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB
-// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA
-// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP
-// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe
-// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi
-// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY
-// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO
-// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM
-// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN
-// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm
-// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW
-// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F
-// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3
-// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV
-// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1
-// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
-// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
-// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
-// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
-// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
-// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5
-// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET
-// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
-// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
-// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu
-// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC
-// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf
-// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI
-// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv
-// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y
-// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT
-// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
-// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
-// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD
-// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf
-// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji
-// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys
-// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn
-// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB
-// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx
-// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT
-// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA
-// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
-// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE
-// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw
-// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC
-// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL
-// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
-// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
-// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF
-// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
-// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
-// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu
-// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
-// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu
-// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf
-// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA
-// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou
-// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+
-// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS
-// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE
-// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V
-// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu
-// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
-// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
-// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c
-// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN
-// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f
-// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA
-// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3
-// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8
-// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7
-// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ
-// SIG // UnMTDXpQzTGCFfEwghXtAgEBMIGVMH4xCzAJBgNVBAYT
-// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
-// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
-// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl
-// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A
-// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN
-// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
-// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIc0
-// SIG // GX5eNl4PgrfOFgISutINWxZYGN5xQPt82b94AyqYMEIG
-// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv
-// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w
-// SIG // DQYJKoZIhvcNAQEBBQAEggGAJ0DQ80PWaiFWypAKfKBM
-// SIG // wmQpNy8l63FMfu0ctMvHYVXFgsYGKtMDutRNKr3UmlGw
-// SIG // 5GBnDaSURINl0TpKtzM5l+lm3xRxId8V4g4plnJYOVdR
-// SIG // 0SUpUpUld4wGuZcvJJKJgrUC57B06jBCbI/Giohe3XDI
-// SIG // 7DrpvR4xI6bvYZEkWreCHz6yOTIiTYDPT30Ekzja1mv4
-// SIG // DGI2U3Zw9SgcnmSmUeLILvtVfYnV5fVkfMeisKj8TyIM
-// SIG // lkUJ0NgWpVWk1ev7eLQkw5Oh609F8NiSA4PkRMIpvua4
-// SIG // 0E4bM7n05HlITtfgB/h4k2K26J8c+ea1eDKF624r7RY9
-// SIG // +/3WjJHZdGbIiojEii/aLdZjGhNs2YheJ7L64IlvS56u
-// SIG // dYIXMATb3ZZcCbjVqB3aiVD9xxMyzpmf//S6e4LsPCJV
-// SIG // FUS17f7yQak+5/ZVJssBG4ldCN6c9Rr61Miq5pvC44Gv
-// SIG // eos0fBbT3aJXlWtt8sg6IKd+HT2U6OTIbpVYTs4dybRa
-// SIG // Bqz6kf/XoYIS+zCCEvcGCisGAQQBgjcDAwExghLnMIIS
-// SIG // 4wYJKoZIhvcNAQcCoIIS1DCCEtACAQMxDzANBglghkgB
-// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw
-// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB
-// SIG // BQAEIMY0V2/ZQvpl02KAa9TY35X/CnTrfPplccdRWprr
-// SIG // /hvBAgZgsBDDb54YEzIwMjEwNjAzMTAyNzIzLjg1OFow
-// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5KMIIE
-// SIG // +TCCA+GgAwIBAgITMwAAAUGvf1KXXPLcRQAAAAABQTAN
-// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
-// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
-// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
-// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
-// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjdaFw0yMjAxMTIx
-// SIG // NzI4MjdaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
-// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD
-// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z
-// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO
-// SIG // OkQwODItNEJGRC1FRUJBMSUwIwYDVQQDExxNaWNyb3Nv
-// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG
-// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8irLqL28dal+PJUm
-// SIG // UJOwvYn/sOCEzQzZyj94XbFPtRhDhPjagvvKOv1GgMoO
-// SIG // uXvkpM3uM5E67vyOCPxqhTAzq7Ak3zkEXXBv7JoM8Xm0
-// SIG // x5UcnAkpUiEo0eycRl6bnYIB3KlZW3uz4Jc2v2FV0KCG
-// SIG // kLrvqfKP8V/i2hVyN854OejWpx8wGUazM4CYUVowcgED
-// SIG // c76OY+Xa4W27DCZJm2f9ol4BjSL+b2L/T8n/LEGknaUx
-// SIG // wSQTN1LQCt+uBDCASd6VQR5CLLJVt6MBL0W1NlaWxEAJ
-// SIG // wlIdyBnS1ihLvRg1jc/KUZe0sRFdD3fhKrjPac3hoy00
-// SIG // 7Fvr6Go0WJ4pr2rJdQIDAQABo4IBGzCCARcwHQYDVR0O
-// SIG // BBYEFC0oPyxuLpD9RXBr9c8NO0EFEsbEMB8GA1UdIwQY
-// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP
-// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y
-// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI
-// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct
-// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI
-// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBAFJ63yJ9
-// SIG // 2ChqCgpexD48okviGuC4ikNsvmwlCSet1sFpvJEzLJB8
-// SIG // cTF4z4qQTz8AsQtcew6mAVmQCYDu9f5ee11xXj1LwHYs
-// SIG // ZGnSs/OfRul1VKmY51OQpqvK5O/Ct4fs0Iblzo8eyOLJ
-// SIG // ygTk97aXVA4Uzq8GblL7LQ5XiwAY446MOALnNXFo/Kq9
-// SIG // tvzipwY1YcRn/nlMQ+b92OiLLmHVMi2wAUORiKFvaAfY
-// SIG // WjhQd+2qHLMsdpNluwBbWe7FF5ABsDo0HROMWyCgxdLQ
-// SIG // 3vqr3DMSH3ZWKiirFsvWJmchfZPGRObwqszvSXPFmPBZ
-// SIG // 9o+er+4UoLV+50GWnnQky7HVgLkwggZxMIIEWaADAgEC
-// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw
-// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
-// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
-// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
-// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
-// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa
-// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
-// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
-// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN
-// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR
-// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh
-// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg
-// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg
-// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG
-// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX
-// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy
-// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB
-// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw
-// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK
-// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA
-// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
-// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
-// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
-// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
-// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
-// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93
-// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
-// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E
-// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC
-// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k
-// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0
-// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA
-// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF
-// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P
-// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI
-// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL
-// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ
-// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y
-// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL
-// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38
-// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+
-// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ
-// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl
-// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30
-// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp
-// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR
-// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj
-// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1
-// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLUMIICPQIB
-// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH
-// SIG // BgUrDgMCGgMVAKrlvym1CquIoQcrzncLvkD1WpUDoIGD
-// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
-// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
-// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
-// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
-// SIG // DQYJKoZIhvcNAQEFBQACBQDkYyCxMCIYDzIwMjEwNjAz
-// SIG // MTczNDQxWhgPMjAyMTA2MDQxNzM0NDFaMHQwOgYKKwYB
-// SIG // BAGEWQoEATEsMCowCgIFAORjILECAQAwBwIBAAICEcww
-// SIG // BwIBAAICEgswCgIFAORkcjECAQAwNgYKKwYBBAGEWQoE
-// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEK
-// SIG // MAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQBtyFzG
-// SIG // N2gJJZ3T6Dzxrw0RoLe9MAvzpz7H2wn8BMAuUs68+9Sz
-// SIG // 0qPPgY06wPmE9dqyNzKBjwQrPnJ/qIegjqxgIAazKKN2
-// SIG // hxkAF/kZg0zTK4jDKKUAzIlSwaXbpD19RKHHRdyXGu/0
-// SIG // xlUHCFogRUpH8CZQsXulgvS7H0jiYUkTLTGCAw0wggMJ
-// SIG // AgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
-// SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
-// SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
-// SIG // BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
-// SIG // AhMzAAABQa9/Updc8txFAAAAAAFBMA0GCWCGSAFlAwQC
-// SIG // AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ
-// SIG // AQQwLwYJKoZIhvcNAQkEMSIEII8NUwagPkRHGAJ8Oo/i
-// SIG // OW4YAgx20yCGVo52QoQGwCM7MIH6BgsqhkiG9w0BCRAC
-// SIG // LzGB6jCB5zCB5DCBvQQgUT8BPIzqc3SecHRPLKBtW0vO
-// SIG // OnT+78haWo+XcxVerd4wgZgwgYCkfjB8MQswCQYDVQQG
-// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
-// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
-// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
-// SIG // ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAUGvf1KXXPLcRQAA
-// SIG // AAABQTAiBCDEmllKq6p2dSDRT7WXEfJzMnBQlv3YcYTQ
-// SIG // /uWbkawwhzANBgkqhkiG9w0BAQsFAASCAQDKMix79B07
-// SIG // +fbk3bFY4G6Rl6OG/BDKvIWVa6A0nJcM0lAcngEJm/j0
-// SIG // V0ooT1kDINkma8NxBS5EnY1oPpHyMG9U9vgL4uz4VwuB
-// SIG // eS+cD+fgnbaSWzksiIKwyrSByhq5D2anX+fI5uHMK2a9
-// SIG // +S8zFRwhLjdyu6IIh614P9cRTubsyOjLhD1VxG4ZQ0Sz
-// SIG // SIOtHMNPYoZgpHNeiS+rf39jIqlgAB8e3t/tqhtOIUUW
-// SIG // VJCrYx9Ri5g5WYrsPnXV2H2GY7rCMn0iSeLEkDhw5Ck1
-// SIG // ZJgRlRavAqoScb2Z3AyMQmBDfLq0aG/+Z58eWPOvG3aZ
-// SIG // H89A+KL1p3E1Lr8/Seby8NXt
-// SIG // End signature block
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/mscorlib.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/mscorlib.dll
deleted file mode 100644
index 1fd5a54bfd..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/mscorlib.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/netstandard.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/netstandard.dll
deleted file mode 100644
index 1430b87912..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/netstandard.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pal_random.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/pal_random.js
deleted file mode 100644
index 63e5bdac60..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pal_random.js
+++ /dev/null
@@ -1,320 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-var DotNetEntropyLib = {
- $DOTNETENTROPY: {
- // batchedQuotaMax is the max number of bytes as specified by the api spec.
- // If the byteLength of array is greater than 65536, throw a QuotaExceededError and terminate the algorithm.
- // https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues
- batchedQuotaMax: 65536,
- getBatchedRandomValues: function (buffer, bufferLength) {
- // for modern web browsers
- // map the work array to the memory buffer passed with the length
- for (var i = 0; i < bufferLength; i += this.batchedQuotaMax) {
- var view = new Uint8Array(Module.HEAPU8.buffer, buffer + i, Math.min(bufferLength - i, this.batchedQuotaMax));
- crypto.getRandomValues(view)
- }
- }
- },
- dotnet_browser_entropy : function (buffer, bufferLength) {
- // check that we have crypto available
- if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') {
- DOTNETENTROPY.getBatchedRandomValues(buffer, bufferLength)
- return 0;
- } else {
- // we couldn't find a proper implementation, as Math.random() is not suitable
- // instead of aborting here we will return and let managed code handle the message
- return -1;
- }
- },
-};
-
-autoAddDeps(DotNetEntropyLib, '$DOTNETENTROPY')
-mergeInto(LibraryManager.library, DotNetEntropyLib)
-
-// SIG // Begin signature block
-// SIG // MIIkjAYJKoZIhvcNAQcCoIIkfTCCJHkCAQExDzANBglg
-// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
-// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
-// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
-// SIG // He0Yy7K+G59QXMN5sHHtOtGJyoFg0Ie3YpqLi1MNoKeg
-// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA
-// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV
-// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
-// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
-// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
-// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX
-// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR
-// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
-// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
-// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB
-// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW
-// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc
-// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb
-// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi
-// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk
-// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF
-// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO
-// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa
-// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp
-// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3
-// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym
-// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq
-// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB
-// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3
-// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw
-// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy
-// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf
-// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU
-// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv
-// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw
-// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv
-// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey
-// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw
-// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA
-// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB
-// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA
-// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP
-// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe
-// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi
-// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY
-// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO
-// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM
-// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN
-// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm
-// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW
-// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F
-// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3
-// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV
-// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1
-// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
-// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
-// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
-// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
-// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
-// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5
-// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET
-// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
-// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
-// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu
-// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC
-// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf
-// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI
-// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv
-// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y
-// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT
-// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
-// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
-// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD
-// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf
-// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji
-// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys
-// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn
-// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB
-// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx
-// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT
-// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA
-// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
-// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE
-// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw
-// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC
-// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL
-// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
-// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
-// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF
-// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
-// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf
-// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu
-// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
-// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu
-// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf
-// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA
-// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou
-// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+
-// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS
-// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE
-// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V
-// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu
-// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
-// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
-// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c
-// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN
-// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f
-// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA
-// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3
-// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8
-// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7
-// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ
-// SIG // UnMTDXpQzTGCFfQwghXwAgEBMIGVMH4xCzAJBgNVBAYT
-// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
-// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
-// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl
-// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A
-// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN
-// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
-// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKTQ
-// SIG // ts56jQmXdTOrJhxHePDRP6IYHMqtdIFdJu6K2KWDMEIG
-// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv
-// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w
-// SIG // DQYJKoZIhvcNAQEBBQAEggGAOhQBtM8dGqO4xsak/oHn
-// SIG // LgxQeUK0erh74L+U88RqkAd9KtULNj1RqjYSeAxsoXxZ
-// SIG // /6F/wiQaHzYr41yGXNTiUtT2+VQ3fJRffXZA59U19pve
-// SIG // uonmwz2ZAD+NJl6uzQQsuc+aiyDmENCBI8Q95d8zfopn
-// SIG // lEpKICbrb3sAIfvOzJxod/JJEfVWm/P0r1XXMdcgbC9O
-// SIG // LmxaVgyH+L4Zwb6K3OYIQrnEKxXKAydWUCyqtynPyEsH
-// SIG // UFnSL9SogbunqXCug7xv9hUC1qqR08796dn4+Arxa4LT
-// SIG // /5yfn9pQ2QVIQPZghqKN5xYsQBFyn8Xh4fSYt9aSGrh7
-// SIG // 3k1WYPumXp901gILj4TxSZtxtOyOHxZzy/AzdAtUAFit
-// SIG // ePp5G12J7XduTJIb7SIPbvMNoOeRPEWTIRYk7orpRsqP
-// SIG // t2ChkxkKzljyAjPNpZjYM+J2+l+uYUTuUlQBSwouHw4h
-// SIG // hDGVC4mOn7/friAsLo7MOB2Als0kuXGP4uY2nC0hvAyM
-// SIG // 5/gxULEGoYIS/jCCEvoGCisGAQQBgjcDAwExghLqMIIS
-// SIG // 5gYJKoZIhvcNAQcCoIIS1zCCEtMCAQMxDzANBglghkgB
-// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw
-// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB
-// SIG // BQAEIG06YaXst+QK7V0RqeXNgH8uVNIHvnuRRBwqG+UM
-// SIG // g7LQAgZgsPYTylQYEzIwMjEwNjAzMTAyNzI2LjgwNlow
-// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5NMIIE
-// SIG // +TCCA+GgAwIBAgITMwAAATyL/bmzP0eX/QAAAAABPDAN
-// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
-// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
-// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
-// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
-// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjNaFw0yMjAxMTIx
-// SIG // NzI4MjNaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
-// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD
-// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z
-// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO
-// SIG // OjE3OUUtNEJCMC04MjQ2MSUwIwYDVQQDExxNaWNyb3Nv
-// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG
-// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmBAq6WkDqvY5DgaQ
-// SIG // t+OX0NCLzqUaivJxHvo6KSXP+VzTas2p6uYa3fcIm+EX
-// SIG // b6bj4+vJ+Q5v12btrwqp1qMYct4sa24Ev64Nwkt26qfA
-// SIG // INVEIP8QM99k7nnkzmNXDnpXF0WoaLCHI5a65L9dwGnB
-// SIG // V5uAG2DAoGDOgc3WSgEXm3OsxL/uEAsuPtQFfER0BxDn
-// SIG // aI+NjiaWxVpR72Cs17jNQB+L5o0/aP3wqtplg+yINvwq
-// SIG // WiHdoByukfkvdPYitu7lZI1Wqdv0m+AEziyW2lUPl9Po
-// SIG // WGxHAnrH/d4PrQEF7rwPHR+t3aCuSOc3WQheVP9w4m35
-// SIG // e2QhbFOpLPqYeIya2wIDAQABo4IBGzCCARcwHQYDVR0O
-// SIG // BBYEFOGhZ+LKEvo2s2E/JRjqGL8mZzxGMB8GA1UdIwQY
-// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP
-// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y
-// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI
-// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
-// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct
-// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI
-// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBADL3EIyU
-// SIG // 3Zd5bkjMxakZMUZJSfilkVFJQdyNiiVVm+Bp+nlnSU4l
-// SIG // nQtbsXoxdqD19G/l/UCIYvLtQGle/dnhIrdpUM6lYD4n
-// SIG // 8k2Ri48ytjqLuD4/xefD6dpuh7qRn7jQHoZZ/oUr7yBO
-// SIG // YIBJwor/ZVZACTjJSxxd/A2z7+6clrNC879rI2cDx73Y
-// SIG // bVfJQbTmLBPDcc55W7MnPNL0Z0XqpvCUCumfMQA+EnmP
-// SIG // HbhRV4XIhExthNG4fvzd5sBp81yczG0igCpMyMOmMan/
-// SIG // sx81jxYpvQxmcJnIavuiQSrW+BBk9BBbX6hgqzjw+Tu7
-// SIG // j8EnY9WqYF6qOx3Lce4XLOao6cIwggZxMIIEWaADAgEC
-// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw
-// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
-// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
-// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
-// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
-// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa
-// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
-// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
-// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN
-// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR
-// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh
-// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg
-// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg
-// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG
-// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX
-// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy
-// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB
-// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw
-// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK
-// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA
-// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
-// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
-// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
-// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
-// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
-// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93
-// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
-// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E
-// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC
-// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k
-// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0
-// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA
-// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF
-// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P
-// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI
-// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL
-// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ
-// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y
-// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL
-// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38
-// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+
-// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ
-// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl
-// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30
-// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp
-// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR
-// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj
-// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1
-// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLXMIICQAIB
-// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
-// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
-// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
-// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
-// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
-// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p
-// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH
-// SIG // BgUrDgMCGgMVAB1LdHpZ3mjy22teinut0UdweuTmoIGD
-// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
-// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
-// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
-// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
-// SIG // DQYJKoZIhvcNAQEFBQACBQDkYrSTMCIYDzIwMjEwNjAz
-// SIG // MDk1MzIzWhgPMjAyMTA2MDQwOTUzMjNaMHcwPQYKKwYB
-// SIG // BAGEWQoEATEvMC0wCgIFAORitJMCAQAwCgIBAAICHHsC
-// SIG // Af8wBwIBAAICEmcwCgIFAORkBhMCAQAwNgYKKwYBBAGE
-// SIG // WQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAweh
-// SIG // IKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQCY
-// SIG // ousN436K7aadq4lBgT0F3tetvOpvcoc5L/B0EHZeb+rx
-// SIG // I6wYloEMcVPOaLiSMMf0VDjzUIG3/Q31iN/Cn40W86ZS
-// SIG // 86kC3qcwFL+McvgJrNZHpU0a9DUI0lHxJi36t0Z/GC7T
-// SIG // XkZpJzeAvJ1M+tpdnSRqvDvn9+wzi3HqdNzQEjGCAw0w
-// SIG // ggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
-// SIG // EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
-// SIG // HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
-// SIG // BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy
-// SIG // MDEwAhMzAAABPIv9ubM/R5f9AAAAAAE8MA0GCWCGSAFl
-// SIG // AwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN
-// SIG // AQkQAQQwLwYJKoZIhvcNAQkEMSIEIEDP9TS9t0tVhYYh
-// SIG // aVWNhKGSloUqLAb0iMBgj6/F5ZD7MIH6BgsqhkiG9w0B
-// SIG // CRACLzGB6jCB5zCB5DCBvQQgoEkCuk0kv8DnOqm31HwR
-// SIG // r+2IbD3xmIW4FSGK4SboWkYwgZgwgYCkfjB8MQswCQYD
-// SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
-// SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
-// SIG // IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
-// SIG // VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAATyL/bmzP0eX
-// SIG // /QAAAAABPDAiBCALHqq7hdXl2pLRNhwHbHSPjkcaMyvv
-// SIG // QZpBGWeSTRYazzANBgkqhkiG9w0BAQsFAASCAQA/tNOS
-// SIG // ROAW5YXTbJIsKtU+QCCg2z5gPErQeDJUj/F5VP3vAdSc
-// SIG // 2htKXzRXPBa2ogS+bgULMjfrf8WXkjtLfhC7EGdKyJqV
-// SIG // RbCt+hOfPMyARE97EaiTukNbqVVLRM68CnknsBdi5HOg
-// SIG // K2qd7C3CZfTv2qF8rhmsWXdR9rRG9LBOIwIoABna0gIU
-// SIG // dPWrqLwRKNVNQznSFwKlI8WyLsFExx64d13AspZxjcKv
-// SIG // dedPCLNvqqw8n4RZGXy2T8snU2somQLPRpyv11U3B8El
-// SIG // MVok0S3YqvHSYGWslEKeDiavLaY38JkbFZSa6WVBxxqP
-// SIG // vjdCNxwuZMlTu3cZPdUo7iY31BTQ
-// SIG // End signature block
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.c b/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.c
deleted file mode 100644
index 3804005cb5..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "pinvoke.h"
-
-#include
-
-/*
- * The table header contain autogenerated function declarations, so avoid including standard headers
- * to avoid incompatible declarations.
- */
-#define NULL ((void*)0)
-int strcmp (const char *s1, const char *s2);
-void mono_wasm_printerr (const char *s);
-
-#ifdef GEN_PINVOKE
-#include "pinvoke-table.h"
-#else
-#include "pinvoke-tables-default.h"
-#endif
-
-void
-mono_wasm_pinvoke_vararg_stub (void)
-{
- /* This is just a stub used to mark vararg pinvokes */
-}
-
-void*
-wasm_dl_lookup_pinvoke_table (const char *name)
-{
- for (int i = 0; i < sizeof (pinvoke_tables) / sizeof (void*); ++i) {
- if (!strcmp (name, pinvoke_names [i]))
- return pinvoke_tables [i];
- }
- return NULL;
-}
-
-int
-wasm_dl_is_pinvoke_table (void *handle)
-{
- for (int i = 0; i < sizeof (pinvoke_tables) / sizeof (void*); ++i) {
- if (pinvoke_tables [i] == handle) {
- return 1;
- }
- }
- return 0;
-}
-
-void*
-wasm_dl_get_native_to_interp (const char *key, void *extra_arg)
-{
-#ifdef GEN_PINVOKE
- for (int i = 0; i < sizeof (wasm_native_to_interp_map) / sizeof (void*); ++i) {
- if (!strcmp (wasm_native_to_interp_map [i], key)) {
- void *addr = wasm_native_to_interp_funcs [i];
- wasm_native_to_interp_ftndescs [i] = *(InterpFtnDesc*)extra_arg;
- return addr;
- }
- }
- return NULL;
-#else
- return NULL;
-#endif
-}
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.h b/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.h
deleted file mode 100644
index 03c5ce4ed6..0000000000
--- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef __PINVOKE_H__
-#define __PINVOKE_H__
-
-typedef struct {
- const char *name;
- void *func;
-} PinvokeImport;
-
-typedef struct {
- void *func;
- void *arg;
-} InterpFtnDesc;
-
-void*
-wasm_dl_lookup_pinvoke_table (const char *name);
-
-int
-wasm_dl_is_pinvoke_table (void *handle);
-
-void*
-wasm_dl_get_native_to_interp (const char *key, void *extra_arg);
-
-void
-mono_wasm_pinvoke_vararg_stub (void);
-
-#endif
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/protobuf-net.Core.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/protobuf-net.Core.dll
deleted file mode 100644
index 602fa0f6f9..0000000000
Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/protobuf-net.Core.dll and /dev/null differ
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/css/app.css b/Examples/Complete/Camera/Blazor/wwwroot/css/app.css
new file mode 100644
index 0000000000..54a8aa38c3
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/css/app.css
@@ -0,0 +1,103 @@
+html, body {
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+h1:focus {
+ outline: none;
+}
+
+a, .btn-link {
+ color: #0071c1;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #1b6ec2;
+ border-color: #1861ac;
+}
+
+.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
+ box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
+}
+
+.content {
+ padding-top: 1.1rem;
+}
+
+.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;
+ }
+
+.blazor-error-boundary {
+ background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
+ padding: 1rem 1rem 1rem 3.7rem;
+ color: white;
+}
+
+ .blazor-error-boundary::after {
+ content: "An error has occurred."
+ }
+
+.loading-progress {
+ position: relative;
+ display: block;
+ width: 8rem;
+ height: 8rem;
+ margin: 20vh auto 1rem auto;
+}
+
+ .loading-progress circle {
+ fill: none;
+ stroke: #e0e0e0;
+ stroke-width: 0.6rem;
+ transform-origin: 50% 50%;
+ transform: rotate(-90deg);
+ }
+
+ .loading-progress circle:last-child {
+ stroke: #1b6ec2;
+ stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
+ transition: stroke-dasharray 0.05s ease-in-out;
+ }
+
+.loading-progress-text {
+ position: absolute;
+ text-align: center;
+ font-weight: bold;
+ inset: calc(20vh + 3.25rem) 0 auto 0.2rem;
+}
+
+ .loading-progress-text:after {
+ content: var(--blazor-load-percentage-text, "Loading");
+ }
+
+code {
+ color: #c02d76;
+}
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css
new file mode 100644
index 0000000000..02ae65b5fe
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css
@@ -0,0 +1,7 @@
+@charset "UTF-8";/*!
+ * Bootstrap v5.1.0 (https://getbootstrap.com/)
+ * Copyright 2011-2021 The Bootstrap Authors
+ * Copyright 2011-2021 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css.map b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css.map
new file mode 100644
index 0000000000..afcd9e33e9
--- /dev/null
+++ b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `
`-`
` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `
`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `
` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`