diff --git a/.gitignore b/.gitignore index dfcfd56f..3d594515 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ *.user *.userosscache *.sln.docstates +**/appsettings.secrets.json +**/appsettings.*.secrets.json # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs diff --git a/Masa.Alert.sln b/Masa.Alert.sln index b1093ae8..2b1aab72 100644 --- a/Masa.Alert.sln +++ b/Masa.Alert.sln @@ -17,10 +17,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "components", "components", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Service.Admin", "src\Services\Masa.Alert.Service\Masa.Alert.Service.Admin.csproj", "{87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web", "Web", "{F3986DD3-0372-4929-B72A-09D93196541E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Web.Admin", "src\Web\Masa.Alert.Web.Admin\Masa.Alert.Web.Admin.csproj", "{3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiGateways", "ApiGateways", "{32774681-0D67-48A6-A379-D57015094F85}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.ApiGateways.Caller", "src\ApiGateways\Caller\Masa.Alert.ApiGateways.Caller\Masa.Alert.ApiGateways.Caller.csproj", "{40685EC0-64DF-4742-B8F6-602AFAEFC0EA}" @@ -35,10 +31,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Infrastructure.D EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Infrastructure.EntityFrameworkCore", "src\Infrastructure\Masa.Alert.Infrastructure.EntityFrameworkCore\Masa.Alert.Infrastructure.EntityFrameworkCore.csproj", "{FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Web.Admin.Server", "src\Web\Masa.Alert.Web.Admin.Server\Masa.Alert.Web.Admin.Server.csproj", "{8FA1D09B-F5B5-4B42-BF86-53512F1377B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Web.Admin.WebAssembly", "src\Web\Masa.Alert.Web.Admin.WebAssembly\Masa.Alert.Web.Admin.WebAssembly.csproj", "{1644695E-4B4F-4D7D-833C-7E694E758641}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Infrastructure.Common", "src\Infrastructure\Masa.Alert.Infrastructure.Common\Masa.Alert.Infrastructure.Common.csproj", "{4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}" EndProject Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{C147F2DF-F545-4263-9FBE-C7A833BB2A73}" @@ -92,14 +84,6 @@ Global {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}.Release|Any CPU.Build.0 = Release|Any CPU {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}.Release|x86.ActiveCfg = Release|Any CPU {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}.Release|x86.Build.0 = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|x86.Build.0 = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|Any CPU.Build.0 = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|x86.ActiveCfg = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|x86.Build.0 = Release|Any CPU {40685EC0-64DF-4742-B8F6-602AFAEFC0EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40685EC0-64DF-4742-B8F6-602AFAEFC0EA}.Debug|Any CPU.Build.0 = Debug|Any CPU {40685EC0-64DF-4742-B8F6-602AFAEFC0EA}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -132,22 +116,6 @@ Global {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}.Release|Any CPU.Build.0 = Release|Any CPU {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}.Release|x86.ActiveCfg = Release|Any CPU {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}.Release|x86.Build.0 = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|x86.Build.0 = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|Any CPU.Build.0 = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|x86.ActiveCfg = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|x86.Build.0 = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|x86.ActiveCfg = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|x86.Build.0 = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|Any CPU.Build.0 = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|x86.ActiveCfg = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|x86.Build.0 = Release|Any CPU {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -260,8 +228,6 @@ Global {4A1D2DFA-D091-4CD2-B9CB-D7AAA795ABD9} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {FBFB499A-7022-4417-881B-68F63DBDB7F4} = {E011B243-0389-468B-B903-83445BED69A4} {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3} = {4A1D2DFA-D091-4CD2-B9CB-D7AAA795ABD9} - {F3986DD3-0372-4929-B72A-09D93196541E} = {92F40AFA-8416-40BE-9893-D35E1924C69D} - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7} = {F3986DD3-0372-4929-B72A-09D93196541E} {32774681-0D67-48A6-A379-D57015094F85} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {40685EC0-64DF-4742-B8F6-602AFAEFC0EA} = {32774681-0D67-48A6-A379-D57015094F85} {88AD0A79-5286-4C1C-8A58-AAC9E6870CCD} = {92F40AFA-8416-40BE-9893-D35E1924C69D} @@ -269,8 +235,6 @@ Global {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {6CAC62DA-A3AF-4BFE-8E1C-0DB9D0D81CD6} = {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE} = {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2} = {F3986DD3-0372-4929-B72A-09D93196541E} - {1644695E-4B4F-4D7D-833C-7E694E758641} = {F3986DD3-0372-4929-B72A-09D93196541E} {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD} = {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} {BE3519B8-A573-4C5D-B48C-1FA3CE1E4473} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {6D9909B5-3FF8-493C-B12A-0C312B01C106} = {92F40AFA-8416-40BE-9893-D35E1924C69D} diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs index 320bb1e6..52093645 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs @@ -12,6 +12,8 @@ public AlertDbContext CreateDbContext(string[] args) var configurationBuilder = new ConfigurationBuilder(); var configuration = configurationBuilder .AddJsonFile("appsettings.PostgreSql.json") + .AddJsonFile("appsettings.secrets.json", optional: true) + .AddEnvironmentVariables() .Build(); optionsBuilder.UseNpgsql(configuration.GetConnectionString("DefaultConnection")!, b => b.MigrationsAssembly("Masa.Alert.EntityFrameworkCore.PostgreSql")); diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj index 983fc4a2..4e9d600a 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj @@ -20,6 +20,9 @@ PreserveNewest + + PreserveNewest + diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json index 2c4670b6..0e0dcd23 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json @@ -1,5 +1,3 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=10.130.0.19;Port=3815;User Id=ss;Password=Lsd@2023;Database=alert_dev;" - } + } \ No newline at end of file diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs index 4322d2f0..e4794c13 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs @@ -12,6 +12,8 @@ public AlertDbContext CreateDbContext(string[] args) var configurationBuilder = new ConfigurationBuilder(); var configuration = configurationBuilder .AddJsonFile("appsettings.SqlServer.json") + .AddJsonFile("appsettings.secrets.json", optional: true) + .AddEnvironmentVariables() .Build(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("Masa.Alert.EntityFrameworkCore.SqlServer")); diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj index fb819a62..9feffeb2 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj @@ -16,6 +16,9 @@ + + PreserveNewest + PreserveNewest diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json index 9dc4db49..0e0dcd23 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json @@ -1,5 +1,3 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=10.130.0.19,2415;Database=alert_dev;User Id=ss;Password=Hzss@123;" - } + } \ No newline at end of file diff --git a/src/Services/Masa.Alert.Service/appsettings.json b/src/Services/Masa.Alert.Service/appsettings.json index 7ad30268..92b7bb11 100644 --- a/src/Services/Masa.Alert.Service/appsettings.json +++ b/src/Services/Masa.Alert.Service/appsettings.json @@ -19,5 +19,4 @@ "DaprGrpcPort": 20601 }, "AppId": "masa-alert-service" - //"masa-alert-servic": "fdgfdg" } diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Certificates/7348307__lonsid.cn.pfx b/src/Web/Masa.Alert.Web.Admin.Server/Certificates/7348307__lonsid.cn.pfx deleted file mode 100644 index 5a014fef..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin.Server/Certificates/7348307__lonsid.cn.pfx and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Dockerfile b/src/Web/Masa.Alert.Web.Admin.Server/Dockerfile deleted file mode 100644 index 5bbd81ba..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM registry.cn-hangzhou.aliyuncs.com/masa/sdk:8.0.203 AS publish -WORKDIR /src -COPY . . -ENV CSPROJ="src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj" -RUN dotnet restore $CSPROJ && dotnet publish $CSPROJ -c Release -o /app/publish - - -FROM registry.cn-hangzhou.aliyuncs.com/masa/dotnet_aspnet:6.0.4 -WORKDIR /app -COPY --from=publish /app/publish . -COPY ["src/Web/Masa.Alert.Web.Admin/wwwroot/i18n","wwwroot/i18n"] -ENV ASPNETCORE_URLS=https://0.0.0.0:443 -EXPOSE 80 -EXPOSE 443 -ENTRYPOINT ["dotnet", "Masa.Alert.Web.Admin.Server.dll"] \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj b/src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj deleted file mode 100644 index 5cfedd88..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - enable - enable - ..\..\..\docker-compose.dcproj - d1f0bc4d-1731-474c-8478-296e92befe3d - Linux - ..\..\.. - false - false - - - - - - - - - - - - - - - - - - PreserveNewest - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml deleted file mode 100644 index 478c4449..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml +++ /dev/null @@ -1,43 +0,0 @@ -@page -@model Masa.Alert.Web.Admin.Pages.ErrorModel - - - - - - - - Error - - - - -
-
-

Error.

-

An error occurred while processing your request.

- - @if (Model.ShowRequestId) - { -

- Request ID: @Model.RequestId -

- } - -

Development Mode

-

- Swapping to the Development environment displays detailed information about the error - that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the - ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

-
-
- - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs deleted file mode 100644 index 3da20013..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Diagnostics; - -namespace Masa.Alert.Web.Admin.Pages -{ - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - [IgnoreAntiforgeryToken] - public class ErrorModel : PageModel - { - public string? RequestId { get; set; } - - public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - - private readonly ILogger _logger; - - public ErrorModel(ILogger logger) - { - _logger = logger; - } - - public void OnGet() - { - RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; - } - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml deleted file mode 100644 index 9450fa83..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml +++ /dev/null @@ -1,2 +0,0 @@ -@page -@model Masa.Alert.Web.Admin.Server.Pages.LogoutModel diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs deleted file mode 100644 index cef4dbbc..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Server.Pages; - -public class LogoutModel : PageModel -{ - public async Task OnGetAsync() - { - if (User.Identity != null && User.Identity.IsAuthenticated == true) - { - // delete local authentication cookie - await HttpContext.SignOutAsync(); - } - - return SignOut( - new AuthenticationProperties - { - RedirectUri = "/" - }, - OpenIdConnectDefaults.AuthenticationScheme, - CookieAuthenticationDefaults.AuthenticationScheme); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml deleted file mode 100644 index 695a6c9c..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml +++ /dev/null @@ -1,15 +0,0 @@ -@page "/" -@namespace Masa.Alert.Web.Admin.Pages -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers -@{ - Layout = "_Layout"; - - var tokens = new TokenProvider - { - AccessToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken), - RefreshToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.RefreshToken), - IdToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.IdToken) - }; -} - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml deleted file mode 100644 index 87c3488d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@using Microsoft.AspNetCore.Components.Web -@namespace Masa.Alert.Web.Admin.Server.Pages -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers - - - - - - - - Masa.Alert.Web.Admin - - - - - - - - - - - - - - - - - - - @RenderBody() - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Program.cs b/src/Web/Masa.Alert.Web.Admin.Server/Program.cs deleted file mode 100644 index 54730d1b..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Program.cs +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -var builder = WebApplication.CreateBuilder(args); - -ValidatorOptions.Global.LanguageManager = new MasaLanguageManager(); -GlobalValidationOptions.SetDefaultCulture("zh-CN"); - -await builder.Services.AddMasaStackConfigAsync(MasaStackProject.Alert, MasaStackApp.WEB); -var masaStackConfig = builder.Services.GetMasaStackConfig(); - -if (builder.Environment.IsDevelopment()) -{ - builder.Services.AddDaprStarter(opt => - { - opt.AppId = masaStackConfig.GetWebId(MasaStackProject.Alert); - opt.DaprHttpPort = 20604; - opt.DaprGrpcPort = 20603; - }); -} - -builder.Services.AddDaprClient(); - -if (!builder.Environment.IsDevelopment()) -{ - builder.WebHost.UseKestrel(option => - { - option.ConfigureHttpsDefaults(options => - { - options.ServerCertificate = X509Certificate2.CreateFromPemFile("./ssl/tls.crt", "./ssl/tls.key"); - options.CheckCertificateRevocation = false; - }); - }); -} - -// Add services to the container. -builder.Services.AddRazorPages(); -builder.Services.AddServerSideBlazor(); -builder.Services.AddBlazorDownloadFile(); - -builder.Services.AddResponseCompression(opts => -{ - opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( - new[] { "application/octet-stream" }); -}); - -var tscBaseAddress = masaStackConfig.GetTscServiceDomain(); -var alertBaseAddress = builder.Services.GetMasaConfiguration().ConfigurationApi.GetDefault().GetValue("AppSettings:AlertClient:Url"); - -if (string.IsNullOrEmpty(alertBaseAddress)) -{ - alertBaseAddress = masaStackConfig.GetAlertServiceDomain(); -} - -await builder.Services.AddMasaStackComponentsAsync(MasaStackProject.Alert); - -builder.Services.AddHttpContextAccessor(); -builder.Services.AddGlobalForServer(); - -MasaOpenIdConnectOptions masaOpenIdConnectOptions = new MasaOpenIdConnectOptions -{ - Authority = masaStackConfig.GetSsoDomain(), - ClientId = masaStackConfig.GetWebId(MasaStackProject.Alert), - Scopes = new List { "offline_access" } -}; - -IdentityModelEventSource.ShowPII = true; -builder.Services.AddMasaOpenIdConnect(masaOpenIdConnectOptions); - -builder.Services.AddAlertApiGateways(option => -{ - option.AppId = masaStackConfig.GetServiceId(MasaStackProject.Alert); - option.AuthorityEndpoint = masaOpenIdConnectOptions.Authority; - option.ClientId = masaOpenIdConnectOptions.ClientId; - option.ClientSecret = masaOpenIdConnectOptions.ClientSecret; -}); - -builder.Services.AddTscClient(tscBaseAddress); -builder.Services.AddMapster(); -var assemblies = AppDomain.CurrentDomain.GetAllAssemblies(); -TypeAdapterConfig.GlobalSettings.Scan(assemblies); -builder.Services.AddAutoInject(assemblies); - -StaticWebAssetsLoader.UseStaticWebAssets(builder.Environment, builder.Configuration); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseDeveloperExceptionPage(); -} -else -{ - app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); -} - -app.UseHttpsRedirection(); - -app.UseStaticFiles(); - -app.UseRouting(); - -app.UseAuthentication(); -app.UseAuthorization(); - -app.MapControllers(); -app.MapBlazorHub(); -app.MapFallbackToPage("/_Host"); -app.Run(); \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json b/src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json deleted file mode 100644 index 13f52a0d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:9877", - "sslPort": 44650 - } - }, - "profiles": { - "Masa.Alert.Web.Admin": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "MASA_CLUSTER": "Default", - "DCC_SECRET": "masastack.com", - "ADMIN_PWD": "admin123", - "DOMAIN_NAME": "masastack.com", - "MASA_NAMESPACE": "masastack", - "TLS_NAME": "masastack", - "MASA_VERSION": "1.0-Preview1", - "IS_DEMO": "false", - "OTLP_URL": "http://otel-collector.masastack:9013", - "ELASTIC": "{\"Nodes\": [\"http://es-ydy-new.lonsid.cn:9200\"],\"Index\": \"auth_user_development\"}", - "REDIS": "{\"RedisHost\": \"10.130.0.19\", \"RedisPort\": 2135, \"RedisDb\": 3,\"RedisPassword\": \"Hzss@123\"}", - "CONNECTIONSTRING": "{\"Server\": \"10.130.0.19\", \"Port\": 2415,\"Database\":\"pm-dev\",\"UserId\": \"ss\",\"Password\":\"Hzss@123\"}", - "MASA_STACK": "[{\"id\":\"pm\",\"service\":{\"id\":\"pm-service-dev\",\"domain\":\"http://pm-service-dev.masastack.com\"},\"web\":{\"id\":\"pm-web-dev\",\"domain\":\"https://pm-dev.masastack.com\"}},{\"id\":\"dcc\",\"service\":{\"id\":\"dcc-service-dev\",\"domain\":\"http://dcc-service-dev.masastack.com\"},\"web\":{\"id\":\"dcc-web-dev\",\"domain\":\"https://dcc-dev.masastack.com\"}},{\"id\":\"tsc\",\"service\":{\"id\":\"tsc-service-dev\",\"domain\":\"http://tsc-service-dev.masastack.com\"},\"web\":{\"id\":\"tsc-web-dev\",\"domain\":\"https://tsc-dev.masastack.com\"}},{\"id\":\"alert\",\"service\":{\"id\":\"alert-service-dev\",\"domain\":\"http://alert-service-dev.masastack.com\"},\"web\":{\"id\":\"alert-web-dev\",\"domain\":\"https://alert-dev.masastack.com\"}},{\"id\":\"scheduler\",\"service\":{\"id\":\"scheduler-service-dev\",\"domain\":\"http://scheduler-service-dev.masastack.com\"},\"worker\":{\"id\":\"scheduler-worker-dev\",\"domain\":\"http://scheduler-worker-dev.masastack.com\"},\"web\":{\"id\":\"scheduler-web-dev\",\"domain\":\"https://scheduler-dev.masastack.com\"}},{\"id\":\"mc\",\"service\":{\"id\":\"mc-service-dev\",\"domain\":\"http://mc-service-dev.masastack.com\"},\"web\":{\"id\":\"mc-web-dev\",\"domain\":\"https://mc-dev.masastack.com\"}},{\"id\":\"auth\",\"service\":{\"id\":\"auth-service-dev\",\"domain\":\"http://auth-service-dev.masastack.com\"},\"web\":{\"id\":\"auth-web-dev\",\"domain\":\"https://auth-dev.masastack.com\"},\"sso\":{\"id\":\"auth-sso-dev\",\"domain\":\"https://auth-sso-dev.masastack.com\"}}]", - "MASA_ENVIRONMENT": "Development", - "SUFFIX_IDENTITY": "dev" - }, - "applicationUrl": "https://localhost:19700;http://localhost:19710", - "dotnetRunMessages": true - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "Docker": { - "commandName": "Docker", - "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", - "publishAllPorts": true, - "useSSL": true - } - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs b/src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs deleted file mode 100644 index ae6ebc64..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -// System Namespaces -global using System.Security.Cryptography.X509Certificates; - -// Microsoft Namespaces -global using Microsoft.AspNetCore.Authentication; -global using Microsoft.AspNetCore.Authentication.Cookies; -global using Microsoft.AspNetCore.Authentication.OpenIdConnect; -global using Microsoft.AspNetCore.Hosting.StaticWebAssets; -global using Microsoft.AspNetCore.Mvc; -global using Microsoft.AspNetCore.Mvc.RazorPages; -global using Microsoft.AspNetCore.ResponseCompression; -global using Microsoft.IdentityModel.Logging; -global using Microsoft.IdentityModel.Protocols.OpenIdConnect; - -// Third-party Libraries -global using BlazorDownloadFile; -global using FluentValidation; -global using FluentValidation.Resources; -global using Mapster; - -// MASA Building Blocks and Contrib Packages -global using Masa.Contrib.StackSdks.Caller; -global using Masa.Contrib.StackSdks.Config; -global using Masa.Contrib.Configuration.ConfigurationApi.Dcc; -global using Masa.Stack.Components; -global using Masa.Stack.Components.Extensions.OpenIdConnect; - -// MASA Alert Infrastructure and Extensions -global using Masa.Alert.Infrastructure.Common.Extensions; -global using Masa.Alert.ApiGateways.Caller.Extensions; \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json deleted file mode 100644 index e295a58d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "masa-alert-service": "masa-alert-service-develop" -} - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json deleted file mode 100644 index 2c0dfece..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "masa-alert-service": "masa-alert-service" -} diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json deleted file mode 100644 index b88926d2..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "masa-alert-service": "masa-alert-service-staging" -} - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.json deleted file mode 100644 index 87873a24..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "AppId": "masa-alert-web-admin" -} diff --git a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt b/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt deleted file mode 100644 index 1198c59b..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGvzCCBaegAwIBAgIQDst0LJnPKMFkgmyOgbSX+jANBgkqhkiG9w0BAQsFADBf -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMR4wHAYDVQQDExVHZW9UcnVzdCBDTiBSU0EgQ0EgRzEw -HhcNMjIwMzAzMDAwMDAwWhcNMjMwMzE0MjM1OTU5WjCBiTELMAkGA1UEBhMCQ04x -EjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5rip5bee5biCMTwwOgYDVQQK -DDPmtZnmsZ/mnJfor5flvrflgaXlurfppa7msLTorr7lpIfogqHku73mnInpmZDl -hazlj7gxFDASBgNVBAMMCyoubG9uc2lkLmNuMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAtbKBcjdZEBM6LMREx/vWuAa81uJpe6IvwKEajHoZ5NRK1CyM -L+VYBeKYhgRmBzgjJW0M16kk094/fgpAfclGswDryDnWGiuiaX2NXOroiPYFcyWX -UnEWYqsdrowbiUvFgPkXWwUwo8/RsV1nC/BiqNhduxLuQti0QkzOBeeurcunaShu -s9qbEjQeBkUUgmH4rK4U+ABv6RvwDfB1JLFFmruc3Wgndv0udylK67p9x7cXE0Wz -OhLQtI3+W5Vg8K2XXX/2AZOs+8jFkxG2x/EUQs4BKBYOvXqULLheFmut/pPxdxlb -2FNpMBq8qb0/U6oCkj2rO433EVvFzKvyx9nAGwIDAQABo4IDSjCCA0YwHwYDVR0j -BBgwFoAUkZ9eMRWuEJ+tYMH3wcyqSDQvDCYwHQYDVR0OBBYEFK/ICh/pYf/R8k57 -H6EKb+MbzgeiMCEGA1UdEQQaMBiCCyoubG9uc2lkLmNugglsb25zaWQuY24wDgYD -VR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjB1BgNV -HR8EbjBsMDSgMqAwhi5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vR2VvVHJ1c3RD -TlJTQUNBRzEuY3JsMDSgMqAwhi5odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vR2Vv -VHJ1c3RDTlJTQUNBRzEuY3JsMD4GA1UdIAQ3MDUwMwYGZ4EMAQICMCkwJwYIKwYB -BQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzBvBggrBgEFBQcBAQRj -MGEwIQYIKwYBBQUHMAGGFWh0dHA6Ly9vY3NwLmRjb2NzcC5jbjA8BggrBgEFBQcw -AoYwaHR0cDovL2NybC5kaWdpY2VydC1jbi5jb20vR2VvVHJ1c3RDTlJTQUNBRzEu -Y3J0MAkGA1UdEwQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB1AK33vvp8 -/xDIi509nB4+GGq0Zyldz7EMJMqFhjTr3IKKAAABf05aVi0AAAQDAEYwRAIgfqBq -PZpvMHW4aGsR/yucGiC7KeyYu+i7xg7k9gP5wYwCIDw1deL5sim38D6kU6BfkgV2 -YXlXv4TIQ2bLyELEcQ1SAHcANc8ZG7+xbFe/D61MbULLu7YnICZR6j/hKu+oA8M7 -1kwAAAF/TlpWMAAABAMASDBGAiEAwu1ZmZw5+99t+ilr1BryrezjJrolcU+l7a+3 -pK4G44QCIQDaROzJaidunAchCoQdQvkD7sobvJIqrcGi9RwTym2ckQB1ALNzdwfh -hFD4Y4bWBancEQlKeS2xZwwLh9zwAw55NqWaAAABf05aVmUAAAQDAEYwRAIgSM0e -5ypEiVCjJxKsG8zehtL4poEJGWNMnAAdvjhOa48CIACiIljn0KSsANPQgy51yM8y -NF6XS/NoFyAEwNIvf3P8MA0GCSqGSIb3DQEBCwUAA4IBAQCEFau//Q03vuchkVGl -sX+MSYTP0tJK3bXCCKcgrYo2ptoEFE9DJOcPcSF+Drw71G66mfPlT0v9Yvn1WyPg -81KGvBgBv2NHlQFsHy/dyxC1afUmj4E37pd9oI+KJ6yl++G8H1TN+T4PSU+WAneX -JQHmq3+xC3rcEUhqkoojIfT1nnXVKjf9KeHzKBgZwMnz7capvOBQ3pFp5oTDvt+2 -WEHM/pxnwuV+P8D7lJCx3O4DjP5Ww47FPTkq00Q5EzWQ+wy5w3ab3DPjsTmQJyZG -pOTxuh4GDCzfGWLG6uzsdCMOHcF5qxVZuw1MiY/TzJJ0CN9gTBjArE7/SfFi9qrf -HoS9 ------END CERTIFICATE----- \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key b/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key deleted file mode 100644 index cee682ee..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC1soFyN1kQEzos -xETH+9a4BrzW4ml7oi/AoRqMehnk1ErULIwv5VgF4piGBGYHOCMlbQzXqSTT3j9+ -CkB9yUazAOvIOdYaK6JpfY1c6uiI9gVzJZdScRZiqx2ujBuJS8WA+RdbBTCjz9Gx -XWcL8GKo2F27Eu5C2LRCTM4F566ty6dpKG6z2psSNB4GRRSCYfisrhT4AG/pG/AN -8HUksUWau5zdaCd2/S53KUrrun3HtxcTRbM6EtC0jf5blWDwrZddf/YBk6z7yMWT -EbbH8RRCzgEoFg69epQsuF4Wa63+k/F3GVvYU2kwGrypvT9TqgKSPas7jfcRW8XM -q/LH2cAbAgMBAAECggEAI8KitHqNNls6Z2YnjV6U93on/3jnPtSAZn6urXg4kW9w -3Mp5utF+HgZnc3T5KbGURUDttqJNI7/JqkJVSAxttDxZq3oql9L/r5hs0p1PL+mP -0AZVfn3QZJH+EQT1RHPbxtL/lEP0u0DjKe/SoKhqmoWfCPskVpa0/5mDMOlU2VJ3 -ARdQcFlaUyq66sfEo+sTa+RYBlbtRUfyCW6HBlLBeowWpGjridULTMS9WQUA2wIw -wSFofg374aB8TdYsv5lsU+innHUQ/PK/5+8j7btUXGpsl8d8bvkym8w6Jsf9RC+P -NyGlG3nit7xakWMO6B+J8PMV5BzX0+lFr8mnfg+RwQKBgQDrshNmVxg0MkT/L6+7 -Eb0S4HfdGLxOtneWsgkPtUjp5Bax6S0uGY9KOpce7Vxw417r6yhDjQxf7Gr/ejme -diawv5hvtYortPHu6WMMRhDPC3d1ycs6b+UhkD6QE/YLU4ceezDolc4eJuhsTDMp -ro4JxzTz6X28Zq0BDni9OVso2wKBgQDFWZNKXHc/KPN5q0Xh6oMSN25v8mtx5xG4 -lrCysZKoHpK2ziwHtaOJPZejMPDxRjXbe7+GxNekV8ESEPPeEiB9ie2v0LZs5zhk -CAFpevRDwKVO4TaXPmXkWyRQSXNNa7Du6k5monPdBSVyZg+wxwyWxIYLep3cRyqf -m4eu/OTJwQKBgQDVO48XiHYKSuxnHiJTEPJIkLGAYq+CWswIltthzbXAfK0XmghY -66DaG/W6ci2up9WphF8x9fqbEc2fgll8hhHs1/m2Hrx5XEOAzL7iTMVKO2qBMuZc -4PygB9rCCH0RtCjLJ9KQqW8HklW2HJ4w+I3iRMogXT5240Fjck9Dig9x/wKBgQCR -FIfua8mSWhWbxWira46N7sg2bh3E750ceVNPGrH4+/jZgPnndQXTV79JTipjBT2E -rBWiCsWI4KZkFKhjAip2f9aHoMTrjJPtHeGD3MsDn/Um5vQN/eZEGSi6CTVFnjzF -duTKGPVab3UXA6bXS42arMDqYWr5zCuuiFUYNHwxQQKBgQC9D+dpMfDaFpjxYyi9 -PK2rnzGeYvkN/I6bx/JqwZEKwiYbdTGmVcdi8HVY09051lB2GTnD6E4WcEuQ0j8N -D6a9v8sraRGEeByfvoZOzkplpnORsRJdN9ZmGhZ8R+fXX4piC+et+Ei8oCxviNJA -F3SNL0UoerZ8xuM5Z+lZaIpzew== ------END PRIVATE KEY----- \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css deleted file mode 100644 index c65334c7..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css +++ /dev/null @@ -1,45 +0,0 @@ -.text-danger { - --bs-text-opacity: 1; - color: rgba(var(--bs-danger-rgb),var(--bs-text-opacity)) !important -} - -.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." - } diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/favicon.ico b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/favicon.ico deleted file mode 100644 index 63e859b4..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/favicon.ico and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/en-US.json b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/en-US.json deleted file mode 100644 index c10cf2fd..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/en-US.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$Text": "English", - "$DateTimeFormat": "MM/dd/yyyy HH:mm:ss", - "$DateFormat": "MM/dd/yyyy", - "Dashboard": "Dashboard", - "Favorite": "Favorite", - "Settings": "Settings", - "Breadcrumb": "Breadcrumb", - "PageTab": "PageTab", - "Mode": "Mode", - "UserInfo": "UserInfo", - "UpdatePassword": "Update Password", - "ForgetPassword": "forget password", - "OldPassword": "Old password", - "NewPassword": "New password", - "ConfirmNewPassword": "Confirm new password", - "PlaceholderForConfirmNewPassword": "Enter new password again", - "FailToConfirmNewPassword": "Confirmed password does not match the new password", - "EqualOldAndNewPassword": "The new password cannot be the same as the old password", - "PasswordFormatVerificationPrompt": "The password must be a combination of letters and numbers, and the length must not be less than 8", - "Account": "Account", - "Logout": "Logout", - "SetPasswordBySMS": "SMS", - "SetPasswordByEmail": "Email", - - "GlobalNavigation": "Global Navigation", - "RecentVisits": "Recent Visits", - "Favorites": "Favorites", - "Search": "Search", - - "PhoneNumber": "Phone number", - "Email": "Email", - "Position": "Position", - "Teams": "Teams", - "Company": "Company", - "CountryOrRegion": "Country or region", - "Address": "Address", - "Department": "Department", - "CreationTime": "Creation time", - "Auths": "Auths", - "Member": "Member", - "Male": "Male", - "Female": "Female", - "Nickname": "Nickname", - "NumberOfPeople": "People", - "Change": "Change", - "Save": "Save", - "Cancel": "Cancel", - "ChangePhoneNumber": "Change Phone Number", - "PhoneNumberAuth": "Change Phone Authentication", - "Captcha": "Captcha", - "GetCaptcha": "Get captcha", - "Add": "Add", - "Ok": "Ok", - "Send": "Send", - "ChangeEmail": "Change Email", - "EmailAuth": "Email Authentication", - "EmailAddress": "Email address", - "TipOfEmailAddressVerification": "A verification email will be sent to the mailbox for verification", - "IncorrectFormat": "Incorrect format", - "IdentityCardAuth": "Identity Card Authentication", - "RealName": "Real name", - "IdentityCardNumber": "Identity Card Number", - "TipsForLogout": "Are you sure to log out of the current account?", - - "Counter": "Counter", - "Fetch data": "Fetch Data", - "Father": "Father", - "ChildOne": "Child One" -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/supportedCultures.json b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/supportedCultures.json deleted file mode 100644 index bde96eea..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/supportedCultures.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - "zh-CN", - "en-US" -] diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/zh-CN.json b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/zh-CN.json deleted file mode 100644 index eb150ab3..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/zh-CN.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "$DefaultLanguage": "true", - "$Text": "中文简体", - "$DateTimeFormat": "yyyy-MM-dd HH:mm:ss", - "$DateFormat": "yyyy年MM月dd日", - "Start time cannot be greater than end time": "开始时间不能大于结束时间", - "End time cannot be less than start time": "结束时间不能小于开始时间", - "Please select an end time": "请选择结束时间", - "Please select a start time": "请选择开始时间", - "The maximum time cannot be less than the minimum time": "最大时间不能小于最小时间", - "Hour": "时", - "Minute": "分", - "Second": "秒", - "Now": "此刻", - "Reset": "重置", - "Confirm": "确认", - "ToDay": "今日", - "Dashboard": "仪表盘", - "Favorite": "收藏", - "Settings": "设置", - "Breadcrumb": "面包屑", - "PageTab": "多页签", - "Mode": "模式", - "UserInfo": "个人信息", - "UpdatePassword": "修改密码", - "ForgetPassword": "忘记密码", - "OldPassword": "旧密码", - "NewPassword": "新密码", - "ConfirmNewPassword": "确认密码", - "PlaceholderForConfirmNewPassword": "再次输入新密码", - "FailToConfirmNewPassword": "确认密码与新密码不一致", - "EqualOldAndNewPassword": "新密码与旧密码不能相同", - "PasswordFormatVerificationPrompt": "密码必须是字母和数字的组合,且长度不小于8", - "Account": "账号", - "Logout": "退出登录", - "SetPasswordBySMS": "短信找回", - "SetPasswordByEmail": "邮箱找回", - "Password": "密码", - "Reset Password": "重置密码", - "I confirm to change the password": "我确认修改密码", - "Enter \"{0}\" in the input box below to confirm the operation": "在下面的输入框中输入“{0}”以确认操作", - - "GlobalNavigation": "全局导航", - "RecentVisits": "最近访问", - "Favorites": "快捷访问", - "Search": "搜索", - - "PhoneNumber": "手机号码", - "Email": "邮箱", - "Position": "职位", - "Teams": "团队", - "Company": "公司", - "CountryOrRegion": "国家或地区", - "Address": "地址", - "Department": "部门", - "CreationTime": "创建时间", - "Auths": "授权与认知", - "Member": "成员", - "Male": "男", - "Female": "女", - "Nickname": "昵称", - "NumberOfPeople": "人数", - "Change": "更改", - "Save": "保存", - "Cancel": "取消", - "ChangePhoneNumber": "更改手机号码", - "Captcha": "验证码", - "GetCaptcha": "获取验证码", - "Add": "新建", - "Ok": "确定", - "Send": "发送", - "ChangeEmail": "更改邮箱", - "EmailAuth": "邮箱认证", - "EmailAddress": "邮箱地址", - "TipOfEmailAddressVerification": "将发送一条验证邮件至该邮箱进行验证", - "IncorrectFormat": "格式不正确", - "IdentityCardAuth": "实名认证", - "RealName": "真实姓名", - "IdentityCardNumber": "身份证号码", - "TipsForLogout": "您确定退出当前登录账号?", - - "Counter": "计数", - "Fetch data": "拉取数据", - "Father": "父级", - "ChildOne": "子级菜单1", - - "Relative": "相对", - "FifteenMinutes": "15分钟", - "ThirtyMinutes": "30分钟", - "OneHour": "1小时", - "TwoHour": "2小时", - "TwelveHour": "12小时", - "OneDay": "1天", - "OneWeek": "1周", - "OneMonth": "1月", - "Ago": "前", - "Please select a time": "请选择时间", - - //"$DateTimeFormat": "yyyy年MM月dd日 HH:mm:ss", - "$MonthDayFormat": "MM月dd日", - "DisplayName.Notice.Title": "站内消息通知", - "Description.Notice.MoreTips": "查看更多消息", - "Permission.WebsiteMessageManagement": "消息中心", - "DisplayName.AllWebsiteMessage": "全部消息", - "DisplayName.WebsiteMessageAction.MarkAllRead": "全部标记已读", - "DisplayName.WebsiteMessageAction.ShowAll": "显示全部", - "DisplayName.WebsiteMessageAction.ShowUnread": "显示未读", - "DisplayName.WebsiteMessageFilterType": "搜索类型", - "DisplayName.WebsiteMessageFilterType.Title": "消息标题", - "DisplayName.WebsiteMessageFilterType.Content": "消息内容", - "OperationConfirmation": "操作确认", - "DeletionConfirmationMessage": "确定删除数据?", - "DeletedSuccessfullyMessage": "删除成功.", - "OperationSuccessfulMessage": "操作成功." -} diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Masa.Alert.Web.Admin.WebAssembly.csproj b/src/Web/Masa.Alert.Web.Admin.WebAssembly/Masa.Alert.Web.Admin.WebAssembly.csproj deleted file mode 100644 index 28d4b463..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Masa.Alert.Web.Admin.WebAssembly.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - enable - enable - - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs b/src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs deleted file mode 100644 index 05e56589..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Masa.Alert.Web.Admin; -using Masa.Alert.Web.Admin.WebAssembly; -using Microsoft.AspNetCore.Components.Authorization; -using Microsoft.AspNetCore.Components.Web; -using Microsoft.AspNetCore.Components.WebAssembly.Hosting; - -var builder = WebAssemblyHostBuilder.CreateDefault(args); - -builder.Services.AddAuthorizationCore(); -builder.Services.AddScoped(); - -await builder.Services.AddGlobalForWasmAsync(builder.HostEnvironment.BaseAddress); - -builder.RootComponents.Add(typeof(App), "#app"); -builder.RootComponents.Add("head::after"); -builder.Services.AddMasaBlazor(builder => -{ - builder.UseTheme(option => - { - option.Primary = "#4318FF"; - option.Accent = "#4318FF"; - }); -}); - -await builder.Build().RunAsync(); diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json deleted file mode 100644 index a0e3c6d4..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:9877", - "sslPort": 44650 - } - }, - "profiles": { - "Masa.Alert.Web.Admin": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "https://localhost:7362;http://localhost:5362", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css deleted file mode 100644 index 18df7679..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css +++ /dev/null @@ -1,33 +0,0 @@ -#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; -} - -.modal-overlay { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - background-color: #F0F3FA; - z-index: 2000; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - --sk-color: #4318FF; -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css deleted file mode 100644 index 248e1c3e..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--sk-size:40px;--sk-color:#333}.sk-center{margin:auto}.sk-plane{width:var(--sk-size);height:var(--sk-size);background-color:var(--sk-color);animation:sk-plane 1.2s infinite ease-in-out}@keyframes sk-plane{0%{transform:perspective(120px) rotateX(0) rotateY(0)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-chase{width:var(--sk-size);height:var(--sk-size);position:relative;animation:sk-chase 2.5s infinite linear both}.sk-chase-dot{width:100%;height:100%;position:absolute;left:0;top:0;animation:sk-chase-dot 2.0s infinite ease-in-out both}.sk-chase-dot:before{content:'';display:block;width:25%;height:25%;background-color:var(--sk-color);border-radius:100%;animation:sk-chase-dot-before 2.0s infinite ease-in-out both}.sk-chase-dot:nth-child(1){animation-delay:-1.1s}.sk-chase-dot:nth-child(2){animation-delay:-1.0s}.sk-chase-dot:nth-child(3){animation-delay:-0.9s}.sk-chase-dot:nth-child(4){animation-delay:-0.8s}.sk-chase-dot:nth-child(5){animation-delay:-0.7s}.sk-chase-dot:nth-child(6){animation-delay:-0.6s}.sk-chase-dot:nth-child(1):before{animation-delay:-1.1s}.sk-chase-dot:nth-child(2):before{animation-delay:-1.0s}.sk-chase-dot:nth-child(3):before{animation-delay:-0.9s}.sk-chase-dot:nth-child(4):before{animation-delay:-0.8s}.sk-chase-dot:nth-child(5):before{animation-delay:-0.7s}.sk-chase-dot:nth-child(6):before{animation-delay:-0.6s}@keyframes sk-chase{100%{transform:rotate(360deg)}}@keyframes sk-chase-dot{80%,100%{transform:rotate(360deg)}}@keyframes sk-chase-dot-before{50%{transform:scale(0.4)}100%,0%{transform:scale(1.0)}}.sk-bounce{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-bounce-dot{width:100%;height:100%;border-radius:50%;background-color:var(--sk-color);opacity:.6;position:absolute;top:0;left:0;animation:sk-bounce 2s infinite cubic-bezier(0.455,0.03,0.515,0.955)}.sk-bounce-dot:nth-child(2){animation-delay:-1.0s}@keyframes sk-bounce{0%,100%{transform:scale(0)}45%,55%{transform:scale(1)}}.sk-wave{width:var(--sk-size);height:var(--sk-size);display:flex;justify-content:space-between}.sk-wave-rect{background-color:var(--sk-color);height:100%;width:15%;animation:sk-wave 1.2s infinite ease-in-out}.sk-wave-rect:nth-child(1){animation-delay:-1.2s}.sk-wave-rect:nth-child(2){animation-delay:-1.1s}.sk-wave-rect:nth-child(3){animation-delay:-1.0s}.sk-wave-rect:nth-child(4){animation-delay:-0.9s}.sk-wave-rect:nth-child(5){animation-delay:-0.8s}@keyframes sk-wave{0%,40%,100%{transform:scaleY(0.4)}20%{transform:scaleY(1)}}.sk-pulse{width:var(--sk-size);height:var(--sk-size);background-color:var(--sk-color);border-radius:100%;animation:sk-pulse 1.2s infinite cubic-bezier(0.455,0.03,0.515,0.955)}@keyframes sk-pulse{0%{transform:scale(0)}100%{transform:scale(1);opacity:0}}.sk-flow{width:calc(var(--sk-size) * 1.3);height:calc(var(--sk-size) * 1.3);display:flex;justify-content:space-between}.sk-flow-dot{width:25%;height:25%;background-color:var(--sk-color);border-radius:50%;animation:sk-flow 1.4s cubic-bezier(0.455,0.03,0.515,0.955) 0s infinite both}.sk-flow-dot:nth-child(1){animation-delay:-0.30s}.sk-flow-dot:nth-child(2){animation-delay:-0.15s}@keyframes sk-flow{0%,80%,100%{transform:scale(0.3)}40%{transform:scale(1)}}.sk-swing{width:var(--sk-size);height:var(--sk-size);position:relative;animation:sk-swing 1.8s infinite linear}.sk-swing-dot{width:45%;height:45%;position:absolute;top:0;left:0;right:0;margin:auto;background-color:var(--sk-color);border-radius:100%;animation:sk-swing-dot 2s infinite ease-in-out}.sk-swing-dot:nth-child(2){top:auto;bottom:0;animation-delay:-1s}@keyframes sk-swing{100%{transform:rotate(360deg)}}@keyframes sk-swing-dot{0%,100%{transform:scale(0.2)}50%{transform:scale(1)}}.sk-circle{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-circle-dot{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle-dot:before{content:'';display:block;width:15%;height:15%;background-color:var(--sk-color);border-radius:100%;animation:sk-circle 1.2s infinite ease-in-out both}.sk-circle-dot:nth-child(1){transform:rotate(30deg)}.sk-circle-dot:nth-child(2){transform:rotate(60deg)}.sk-circle-dot:nth-child(3){transform:rotate(90deg)}.sk-circle-dot:nth-child(4){transform:rotate(120deg)}.sk-circle-dot:nth-child(5){transform:rotate(150deg)}.sk-circle-dot:nth-child(6){transform:rotate(180deg)}.sk-circle-dot:nth-child(7){transform:rotate(210deg)}.sk-circle-dot:nth-child(8){transform:rotate(240deg)}.sk-circle-dot:nth-child(9){transform:rotate(270deg)}.sk-circle-dot:nth-child(10){transform:rotate(300deg)}.sk-circle-dot:nth-child(11){transform:rotate(330deg)}.sk-circle-dot:nth-child(1):before{animation-delay:-1.1s}.sk-circle-dot:nth-child(2):before{animation-delay:-1s}.sk-circle-dot:nth-child(3):before{animation-delay:-0.9s}.sk-circle-dot:nth-child(4):before{animation-delay:-0.8s}.sk-circle-dot:nth-child(5):before{animation-delay:-0.7s}.sk-circle-dot:nth-child(6):before{animation-delay:-0.6s}.sk-circle-dot:nth-child(7):before{animation-delay:-0.5s}.sk-circle-dot:nth-child(8):before{animation-delay:-0.4s}.sk-circle-dot:nth-child(9):before{animation-delay:-0.3s}.sk-circle-dot:nth-child(10):before{animation-delay:-0.2s}.sk-circle-dot:nth-child(11):before{animation-delay:-0.1s}@keyframes sk-circle{0%,80%,100%{transform:scale(0)}40%{transform:scale(1)}}.sk-circle-fade{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-circle-fade-dot{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle-fade-dot:before{content:'';display:block;width:15%;height:15%;background-color:var(--sk-color);border-radius:100%;animation:sk-circle-fade 1.2s infinite ease-in-out both}.sk-circle-fade-dot:nth-child(1){transform:rotate(30deg)}.sk-circle-fade-dot:nth-child(2){transform:rotate(60deg)}.sk-circle-fade-dot:nth-child(3){transform:rotate(90deg)}.sk-circle-fade-dot:nth-child(4){transform:rotate(120deg)}.sk-circle-fade-dot:nth-child(5){transform:rotate(150deg)}.sk-circle-fade-dot:nth-child(6){transform:rotate(180deg)}.sk-circle-fade-dot:nth-child(7){transform:rotate(210deg)}.sk-circle-fade-dot:nth-child(8){transform:rotate(240deg)}.sk-circle-fade-dot:nth-child(9){transform:rotate(270deg)}.sk-circle-fade-dot:nth-child(10){transform:rotate(300deg)}.sk-circle-fade-dot:nth-child(11){transform:rotate(330deg)}.sk-circle-fade-dot:nth-child(1):before{animation-delay:-1.1s}.sk-circle-fade-dot:nth-child(2):before{animation-delay:-1.0s}.sk-circle-fade-dot:nth-child(3):before{animation-delay:-0.9s}.sk-circle-fade-dot:nth-child(4):before{animation-delay:-0.8s}.sk-circle-fade-dot:nth-child(5):before{animation-delay:-0.7s}.sk-circle-fade-dot:nth-child(6):before{animation-delay:-0.6s}.sk-circle-fade-dot:nth-child(7):before{animation-delay:-0.5s}.sk-circle-fade-dot:nth-child(8):before{animation-delay:-0.4s}.sk-circle-fade-dot:nth-child(9):before{animation-delay:-0.3s}.sk-circle-fade-dot:nth-child(10):before{animation-delay:-0.2s}.sk-circle-fade-dot:nth-child(11):before{animation-delay:-0.1s}@keyframes sk-circle-fade{0%,39%,100%{opacity:0;transform:scale(0.6)}40%{opacity:1;transform:scale(1)}}.sk-grid{width:var(--sk-size);height:var(--sk-size)}.sk-grid-cube{width:33.33%;height:33.33%;background-color:var(--sk-color);float:left;animation:sk-grid 1.3s infinite ease-in-out}.sk-grid-cube:nth-child(1){animation-delay:.2s}.sk-grid-cube:nth-child(2){animation-delay:.3s}.sk-grid-cube:nth-child(3){animation-delay:.4s}.sk-grid-cube:nth-child(4){animation-delay:.1s}.sk-grid-cube:nth-child(5){animation-delay:.2s}.sk-grid-cube:nth-child(6){animation-delay:.3s}.sk-grid-cube:nth-child(7){animation-delay:0s}.sk-grid-cube:nth-child(8){animation-delay:.1s}.sk-grid-cube:nth-child(9){animation-delay:.2s}@keyframes sk-grid{0%,70%,100%{transform:scale3D(1,1,1)}35%{transform:scale3D(0,0,1)}}.sk-fold{width:var(--sk-size);height:var(--sk-size);position:relative;transform:rotateZ(45deg)}.sk-fold-cube{float:left;width:50%;height:50%;position:relative;transform:scale(1.1)}.sk-fold-cube:before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--sk-color);animation:sk-fold 2.4s infinite linear both;transform-origin:100% 100%}.sk-fold-cube:nth-child(2){transform:scale(1.1) rotateZ(90deg)}.sk-fold-cube:nth-child(4){transform:scale(1.1) rotateZ(180deg)}.sk-fold-cube:nth-child(3){transform:scale(1.1) rotateZ(270deg)}.sk-fold-cube:nth-child(2):before{animation-delay:.3s}.sk-fold-cube:nth-child(4):before{animation-delay:.6s}.sk-fold-cube:nth-child(3):before{animation-delay:.9s}@keyframes sk-fold{0%,10%{transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{transform:perspective(140px) rotateX(0);opacity:1}90%,100%{transform:perspective(140px) rotateY(180deg);opacity:0}}.sk-wander{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-wander-cube{background-color:var(--sk-color);width:20%;height:20%;position:absolute;top:0;left:0;--sk-wander-distance:calc(var(--sk-size) * 0.75);animation:sk-wander 2.0s ease-in-out -2.0s infinite both}.sk-wander-cube:nth-child(2){animation-delay:-0.5s}.sk-wander-cube:nth-child(3){animation-delay:-1.0s}@keyframes sk-wander{0%{transform:rotate(0)}25%{transform:translateX(var(--sk-wander-distance)) rotate(-90deg) scale(0.6)}50%{transform:translateX(var(--sk-wander-distance)) translateY(var(--sk-wander-distance)) rotate(-179deg)}50.1%{transform:translateX(var(--sk-wander-distance)) translateY(var(--sk-wander-distance)) rotate(-180deg)}75%{transform:translateX(0) translateY(var(--sk-wander-distance)) rotate(-270deg) scale(0.6)}100%{transform:rotate(-360deg)}} diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js deleted file mode 100644 index faf2e423..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js +++ /dev/null @@ -1,2605 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - brotli/decode.min.js at master · google/brotli - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- -
- - - google  /   - brotli  /   - -
- - - - Type # for issues and pull requests, > for commands, and ? for help - - - Type # for issues, pull requests, and projects, > for commands, and ? for help - - - Type # for issues, pull requests, and projects, / for files, and > for commands - - -
- -
-
- We’ve encountered an error and some results aren't available at this time. Type a new search or try again later. -
-
- - No results matched your search - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - Search for issues and pull requests - - # - - - - Search for issues, pull requests, discussions, and projects - - # - - - - Search for organizations, repositories, and users - - @ - - - - Search for projects - - ! - - - - Search for files - - / - - - - Activate command mode - - > - - - - Search your issues, pull requests, and discussions - - # author:@me - - - - Search your issues, pull requests, and discussions - - # author:@me - - - - Filter to pull requests - - # is:pr - - - - Filter to issues - - # is:issue - - - - Filter to discussions - - # is:discussion - - - - Filter to projects - - # is:project - - - - Filter to open issues, pull requests, and discussions - - # is:open - - - - - - - - - - - - - - - - -
-
-
- -
- - - - - - - - - - -
- - - - -
-
-
- - - - - - - - - - - - - - - - -
- -
- -
-

- - - / - - brotli - - - Public -

- -
- -
    - -
  • - -
    - - - - - - - Watch - - - 347 - - - -
    -
    -

    Messages

    - -
    - -
    -
    - - - - - - - - -
    - - -
    - - - - - Get push messages on iOS or Android. - -
    -
    -
    -
    - - -
    -
    -
    - - - -
  • - -
  • -
    -
    - Fork - 1k - - -
    - -

    Fork brotli

    -
    - -
    - - - - - -

    If this dialog fails to load, you can visit the fork page directly.

    -
    -
    - -
    -
    -
    - -
  • - -
  • - -
    -
    - -
    -
    - -
    -
    - - - - - -
    - -
    -
    - - - - - - - -
    - -
    -
    -
    -
    -
    -
  • - -
  • - - -
  • -
- -
- -
-
- - - - -
- - - -
-
- - Open in github.dev - Open in a new github.dev tab - - - - - - - -
- - - - - Permalink - - -
- -
-
- - - master - - - - -
-
-
- Switch branches/tags - -
- - - -
- -
- -
- - -
- -
- - - - - - - - - - - - - - - - -
- - -
-
-
-
- -
- -
- - - - Go to file - - -
- - - - -
-
-
- - - - -
- -
-
-
 
-
- -
-
 
- Cannot retrieve contributors at this time -
-
- - - - - - - - - - - -
- -
- - -
- - 1 lines (1 sloc) - - 146 KB -
- -
- - - - -
- - - - - - - - - - - - - - - -
- -
-
- -
-
- -
- -
-
- - - -
- - -
- - - - - - - - - -
export let BrotliDecode=(()=>{function f(f){this.data=f,this.offset=0}let w=Int32Array.from([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]),b=Int32Array.from([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),j=Int32Array.from([0,3,2,1,0,0,0,0,0,0,3,3,3,3,3,3]),l=Int32Array.from([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),m=Int32Array.from([131072,131076,131075,196610,131072,131076,131075,262145,131072,131076,131075,196610,131072,131076,131075,262149]),p=Int32Array.from([1,5,9,13,17,25,33,41,49,65,81,97,113,145,177,209,241,305,369,497,753,1265,2289,4337,8433,16625]),q=Int32Array.from([2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,10,11,12,13,24]),o=Int16Array.from([0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,12,14,24]),n=Int16Array.from([0,0,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,24]),g=new Int16Array(2816);function k(f){let w=-1,b=16;for(;b>0;)f>>>b!=0&&(w+=b,f>>>=b),b>>=1;return w+f}function s(f,w,b){return 16+w+2*(b<<f)}function v(f,w,b){if(f<b+(2<<w))throw"maxDistance is too small";let j=4+(f-b>>w),l=k(j)-1;return((l-1<<1|j>>l&1)-1<<w)+(1<<w)+b+16}function t(f,w){if(0!=f.j)throw"State MUST be uninitialized";f.l=new Int32Array(3091),f.l[0]=7,f.m=3;let b=v(2147483644,3,120);f.p=new Int8Array(b),f.q=new Int32Array(b),f.input=w,function(f){f.o=new Int8Array(4160),f.g=0,f.k=new Int16Array(2080),f.s=32,f.v=2048,f.t=0,E(f)}(f),f.j=1}function e(f){if(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),0!=_(f,1)){let w=_(f,3);return 0==w?1:_(f,w)+(1<<w)}return 0}function d(f,w,b){let j=f[w],l=b.g>>>b.s;j+=255&l;let m=f[j]>>16,p=65535&f[j];return m<=8?(b.s+=m,p):(j+=p,j+=(l&(1<<m)-1)>>>8,b.s+=8+(f[j]>>16),65535&f[j])}function H(f,w,b){b.s>=16&&(b.g=b.k[b.v++]<<16|b.g>>>16,b.s-=16);let j=d(f,w,b),l=q[j];return b.s>=16&&(b.g=b.k[b.v++]<<16|b.g>>>16,b.s-=16),p[j]+(l<=16?_(b,l):X(b,l))}function a(f,w){let b=f[w];for(;w>0;w--)f[w]=f[w-1];f[0]=b}function u(f,w,j,l,p){let q=new Int32Array(f),o=new Int32Array(18),n=32,g=0;for(let f=w;f<18&&n>0;f++){let w=b[f];p.s>=16&&(p.g=p.k[p.v++]<<16|p.g>>>16,p.s-=16);let j=p.g>>>p.s&15;p.s+=m[j]>>16;let l=65535&m[j];o[w]=l,0!=l&&(n-=32>>l,g++)}if(0!=n&&1!=g)throw"Corrupted Huffman code histogram";return function(f,w,b,j){let l=0,m=8,p=0,q=0,o=32768,n=new Int32Array(33);for(c(n,n.length-1,5,f,18);l<w&&o>0;){j.v>2030&&C(j),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let f=j.g>>>j.s&31;j.s+=n[f]>>16;let g=65535&n[f];if(g<16)p=0,b[l++]=g,0!=g&&(m=g,o-=32768>>g);else{let f=g-14,n=0;16==g&&(n=m),q!=n&&(p=0,q=n);let k=p;p>0&&(p-=2,p<<=f),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16),p+=_(j,f)+3;let s=p-k;if(l+s>w)throw"symbol + repeatDelta > numSymbols";for(let f=0;f<s;f++)b[l++]=q;0!=q&&(o-=s<<15-q)}}if(0!=o)throw"Unused space";b.fill(0,l,w)}(o,f,q,p),c(j,l,8,q,f)}function z(f,w,b,j,l){l.v>2030&&C(l),l.s>=16&&(l.g=l.k[l.v++]<<16|l.g>>>16,l.s-=16);let m=_(l,2);return 1==m?function(f,w,b,j,l){let m=new Int32Array(w),p=new Int32Array(4),q=1+k(f-1),o=_(l,2)+1;for(let f=0;f<o;f++){l.s>=16&&(l.g=l.k[l.v++]<<16|l.g>>>16,l.s-=16);let b=_(l,q);if(b>=w)throw"Can't readHuffmanCode";p[f]=b}!function(f,w){for(let b=0;b<w-1;++b)for(let j=b+1;j<w;++j)if(f[b]==f[j])throw"Duplicate simple Huffman code symbol"}(p,o);let n=o;switch(4==o&&(n+=_(l,1)),n){case 1:m[p[0]]=1;break;case 2:m[p[0]]=1,m[p[1]]=1;break;case 3:m[p[0]]=1,m[p[1]]=2,m[p[2]]=2;break;case 4:m[p[0]]=2,m[p[1]]=2,m[p[2]]=2,m[p[3]]=2;break;case 5:m[p[0]]=1,m[p[1]]=2,m[p[2]]=3,m[p[3]]=3}return c(b,j,8,m,w)}(f,w,b,j,l):u(w,m,b,j,l)}function h(f,b,j){j.v>2030&&C(j);let l=e(j)+1;if(1==l)return b.fill(0,0,f),l;j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let m=0;0!=_(j,1)&&(m=_(j,4)+1);let p=l+m,q=w[p+31>>5],o=new Int32Array(q+1),n=o.length-1;z(p,p,o,n,j);for(let w=0;w<f;){j.v>2030&&C(j),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let l=d(o,n,j);if(0==l)b[w]=0,w++;else if(l<=m){j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let m=(1<<l)+_(j,l);for(;0!=m;){if(w>=f)throw"Corrupted context map";b[w]=0,w++,m--}}else b[w]=l-m,w++}return j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16),1==_(j,1)&&function(f,w){let b=new Int32Array(256);for(let f=0;f<256;f++)b[f]=f;for(let j=0;j<w;j++){let w=255&f[j];f[j]=b[w],0!=w&&a(b,w)}}(b,f),l}function i(f,w,b){let j=f.H,l=4+2*w;f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let m=d(f.l,2*w,f),p=H(f.l,2*w+1,f);return 1==m?m=j[l+1]+1:0==m?m=j[l]:m-=2,m>=b&&(m-=b),j[l]=j[l+1],j[l+1]=m,p}function r(f){f.u=i(f,0,f.h);let w=f.H[5];f.i=w<<6,f.I=255&f.R[f.i];let b=f.K[w];f.T=b<<9,f.W=f.T+256}function I(f){f.B=i(f,1,f.Y),f.S=f.H[7]}function R(f){f.A=i(f,2,f.V),f.D=f.H[9]<<2}function K(f){if(0!=f.F)return f.P=10,void(f.j=12);f.U=new Int32Array(0),f.C=new Int32Array(0),f.J=new Int32Array(0),f.v>2030&&C(f),function(f){if(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.F=_(f,1),f._=0,f.X=0,f.M=0,0!=f.F&&0!=_(f,1))return;let w=_(f,2)+4;if(7==w){if(f.M=1,0!=_(f,1))throw"Corrupted reserved bit";let w=_(f,2);if(0==w)return;for(let b=0;b<w;b++){f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let j=_(f,8);if(0==j&&b+1==w&&w>1)throw"Exuberant nibble";f._|=j<<8*b}}else for(let b=0;b<w;b++){f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let j=_(f,4);if(0==j&&b+1==w&&w>4)throw"Exuberant nibble";f._|=j<<4*b}f._++,0==f.F&&(f.X=_(f,1))}(f),0==f._&&0==f.M||(0!=f.X||0!=f.M?(G(f),f.j=0!=f.M?5:6):f.j=3,0==f.M&&(f.G+=f._,f.G>1<<30&&(f.G=1<<30),f.O<f.Z&&function(f){let w=f.Z;if(w>f.G){let b=f.G;for(;w>>1>b;)w>>=1;0==f.F&&w<16384&&f.Z>=16384&&(w=16384)}if(w<=f.O)return;let b=new Int8Array(w+37);0!=f.L.length&&b.set(f.L.subarray(0,0+f.O),0),f.L=b,f.O=w}(f)))}function T(f,w,b){let j=f.l[2*w];if(b<=1)return f.l[2*w+1]=j,f.l[2*w+2]=j,1<<28;let l=b+2;j+=z(l,l,f.l,2*w,f),f.l[2*w+1]=j;return j+=z(26,26,f.l,2*w+1,f),f.l[2*w+2]=j,H(f.l,2*w+1,f)}function y(f){f.h=e(f)+1,f.u=T(f,0,f.h),f.Y=e(f)+1,f.B=T(f,1,f.Y),f.V=e(f)+1,f.A=T(f,2,f.V),f.v>2030&&C(f),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.N=_(f,2),f.$=_(f,4)<<f.N,f.K=new Int8Array(f.h);for(let w=0;w<f.h;){let b=ff(w+96,f.h);for(;w<b;++w)f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.K[w]=_(f,2);f.v>2030&&C(f)}f.R=new Int8Array(f.h<<6);let w=h(f.h<<6,f.R,f);f.ff=1;for(let w=0;w<f.h<<6;w++)if(f.R[w]!=w>>6){f.ff=0;break}f.wf=new Int8Array(f.V<<2);let b=h(f.V<<2,f.wf,f);f.U=Y(256,256,w,f),f.C=Y(704,704,f.Y,f);let j=s(f.N,f.$,24),l=j;1==f.bf&&(j=s(f.N,f.$,62),l=v(2147483644,f.N,f.$)),f.J=Y(j,l,b,f),function(f,w){let b=f.p,j=f.q,l=f.N,m=f.$,p=1<<l,q=1,o=0,n=16;for(let f=0;f<m;++f)b[n]=0,j[n]=f+1,++n;for(;n<w;){let f=m+((2+o<<q)-4<<l)+1;for(let w=0;w<p;++w)b[n]=q,j[n]=f+w,++n;q+=o,o^=1}}(f,l),f.i=0,f.D=0,f.T=512*f.K[0],f.W=f.T+256,f.I=0,f.S=0,f.H[4]=1,f.H[5]=0,f.H[6]=1,f.H[7]=0,f.H[8]=1,f.H[9]=0}function W(f){let w=f.L;if(f._<=0)return M(f),void(f.j=2);let b=ff(f.O-f.jf,f._);if(function(f,w,b,j){if(0!=(7&f.s))throw"Unaligned copyBytes";for(;32!=f.s&&0!=j;)w[b++]=f.g>>>f.s,f.s+=8,j--;if(0==j)return;let l=ff(x(f),j>>1);if(l>0){let m=f.v<<1,p=l<<1;w.set(f.o.subarray(m,m+p),b),b+=p,j-=p,f.v+=l}if(0==j)return;if(x(f)>0){for(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);0!=j;)w[b++]=f.g>>>f.s,f.s+=8,j--;return void J(f,0)}for(;j>0;){let l=wf(f.input,w,b,j);if(-1==l)throw"Unexpected end of input";b+=l,j-=l}}(f,w,f.jf,b),f._-=b,f.jf+=b,f.jf==f.O)return f.P=6,void(f.j=12);M(f),f.j=2}function B(f){let w=ff(f.lf-f.mf,f.pf-f.qf);return 0!=w&&(f.nf.set(f.L.subarray(f.qf,f.qf+w),f.gf+f.mf),f.mf+=w,f.qf+=w),f.mf<f.lf?1:0}function Y(f,b,j,l){let m=w[b+31>>5],p=new Int32Array(j+j*m),q=j;for(let w=0;w<j;++w)p[w]=q,q+=z(f,b,p,w,l);return p}function S(f){let w=f.O;return 0!=f.kf&&(w=ff(w,f.qf+f.lf-f.mf)),w}function A(f,w){if(f.sf>2147483644)throw"Invalid backward reference";let b=f.sf-f.maxDistance-1-f.vf;if(b<0)!function(f,w,b){-1==f.tf&&function(f){f.ef=new Int8Array(256);let w=8;for(;f.vf-1>>>w!=0;)w++;w-=8,f.tf=w;let b=0,j=0;for(;b<f.vf;){for(;f.df[j+1]<b;)j++;f.ef[b>>>w]=j,b+=1<<w}}(f);let j=f.ef[w>>>f.tf];for(;w>=f.df[j+1];)j++;if(f.vf>w+b)throw"Invalid backward reference";f.m=f.m+1&3,f.H[f.m]=f.sf,f._-=b,f.Hf=j,f.af=w-f.df[j],f.uf=b,f.zf=0}(f,-b-1,f.hf),f.j=14;else{let j=L,l=f.hf;if(l>31)throw"Invalid backward reference";let m=$[l];if(0==m)throw"Invalid backward reference";let p=N[l],q=b>>>m;p+=(b&(1<<m)-1)*l;let o=F;if(q>=o.if)throw"Invalid backward reference";let n=function(f,w,b,j,l,m,p){let q=w,o=m.rf,n=m.If,g=m.Rf,k=3*p,s=o[k],v=o[k+1],t=o[k+2],e=g[s],d=g[s+1],H=g[t],a=g[t+1],u=v-11,z=v-0;(u<1||u>9)&&(u=0);(z<1||z>9)&&(z=0);for(;e!=d;)f[q++]=n[e++];u>l&&(u=l);j+=u,l-=u;let h=l-=z;for(;h>0;)f[q++]=b[j++],h--;if(10==v||11==v){let w=q-l;for(10==v&&(l=1);l>0;){let b=255&f[w];b<192?(b>=97&&b<=122&&(f[w]^=32),w+=1,l-=1):b<224?(f[w+1]^=32,w+=2,l-=2):(f[w+2]^=5,w+=3,l-=3)}}else if(21==v||22==v){let w=q-l,b=m.Kf[p],j=16777216-(32768&b)+(32767&b);for(;l>0;){let b=1,m=255&f[w];if(m<128)j+=m,f[w]=127&j;else if(m<192);else if(m<224)if(l>=2){let l=f[w+1];j+=63&l|(31&m)<<6,f[w]=192|j>>6&31,f[w+1]=192&l|63&j,b=2}else b=l;else if(m<240)if(l>=3){let l=f[w+1],p=f[w+2];j+=63&p|(63&l)<<6|(15&m)<<12,f[w]=224|j>>12&15,f[w+1]=192&l|j>>6&63,f[w+2]=192&p|63&j,b=3}else b=l;else if(m<248)if(l>=4){let l=f[w+1],p=f[w+2],q=f[w+3];j+=63&q|(63&p)<<6|(63&l)<<12|(7&m)<<18,f[w]=240|j>>18&7,f[w+1]=192&l|j>>12&63,f[w+2]=192&p|j>>6&63,f[w+3]=192&q|63&j,b=4}else b=l;w+=b,l-=b,21==v&&(l=0)}}for(;H!=a;)f[q++]=n[H++];return q-w}(f.L,f.jf,j,p,l,o,q);if(f.jf+=n,f._-=n,f.jf>=w)return f.P=4,void(f.j=12);f.j=4}}function V(f,w){let b=f.jf,j=b;for(;f.uf!=f.zf;){let j=w-b,n=f.df[f.Hf+1]-f.df[f.Hf]-f.af,g=f.uf-f.zf;if(g>n&&(g=n),g>j&&(g=j),l=f.L,m=b,p=f.Tf[f.Hf],q=f.af,o=f.af+g,l.set(p.slice(q,o),m),b+=g,f.af+=g,f.zf+=g,g==n&&(f.Hf++,f.af=0),b>=w)break}var l,m,p,q,o;return b-j}function D(f){if(0==f.j)throw"Can't decompress until initialized";if(11==f.j)throw"Can't decompress after close";if(1==f.j){let w=function(f){let w=f.bf;if(f.bf=0,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),0==_(f,1))return 16;let b=_(f,3);return 0!=b?17+b:(b=_(f,3),0!=b?1==b?0==w?-1:(f.bf=1,1==_(f,1)?-1:(b=_(f,6),b<10||b>30?-1:b)):8+b:17)}(f);if(-1==w)throw"Invalid 'windowBits' code";f.Z=1<<w,f.yf=f.Z-16,f.j=2}let w=S(f),b=f.O-1,m=f.L;for(;10!=f.j;)switch(f.j){case 2:if(f._<0)throw"Invalid metablock length";K(f),w=S(f),b=f.O-1,m=f.L;continue;case 3:y(f),f.j=4;case 4:if(f._<=0){f.j=2;continue}f.v>2030&&C(f),0==f.B&&I(f),f.B--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let p=d(f.C,f.S,f)<<2,q=g[p],o=g[p+1],n=g[p+2];f.Wf=g[p+3],f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let k=255&q;f.Bf=o+(k<=16?_(f,k):X(f,k)),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let s=q>>8;f.hf=n+(s<=16?_(f,s):X(f,s)),f.Yf=0,f.j=7;case 7:if(0!=f.ff){for(;f.Yf<f.Bf;)if(f.v>2030&&C(f),0==f.u&&r(f),f.u--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),m[f.jf]=d(f.U,f.I,f),f.jf++,f.Yf++,f.jf>=w){f.P=7,f.j=12;break}}else{let j=255&m[f.jf-1&b],l=255&m[f.jf-2&b];for(;f.Yf<f.Bf;){f.v>2030&&C(f),0==f.u&&r(f);let b=O[f.T+j]|O[f.W+l],p=255&f.R[f.i+b];if(f.u--,l=j,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),j=d(f.U,p,f),m[f.jf]=j,f.jf++,f.Yf++,f.jf>=w){f.P=7,f.j=12;break}}}if(7!=f.j)continue;if(f._-=f.Bf,f._<=0){f.j=4;continue}let v=f.Wf;if(v<0)f.sf=f.H[f.m];else{f.v>2030&&C(f),0==f.A&&R(f),f.A--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let w=255&f.wf[f.D+v];if(v=d(f.J,w,f),v<16){let w=f.m+j[v]&3;if(f.sf=f.H[w]+l[v],f.sf<0)throw"Negative distance"}else{let w,b=f.p[v];f.s+b<=32?w=_(f,b):(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),w=b<=16?_(f,b):X(f,b)),f.sf=f.q[v]+(w<<f.N)}}if(f.maxDistance!=f.yf&&f.jf<f.yf?f.maxDistance=f.jf:f.maxDistance=f.yf,f.sf>f.maxDistance){f.j=9;continue}if(v>0&&(f.m=f.m+1&3,f.H[f.m]=f.sf),f.hf>f._)throw"Invalid backward reference";f.Yf=0,f.j=8;case 8:let t=f.jf-f.sf&b,e=f.jf,H=f.hf-f.Yf,a=t+H,u=e+H;if(a<b&&u<b){if(H<12||a>e&&u>t)for(let f=0;f<H;f+=4)m[e++]=m[t++],m[e++]=m[t++],m[e++]=m[t++],m[e++]=m[t++];else m.copyWithin(e,t,a);f.Yf+=H,f._-=H,f.jf+=H}else for(;f.Yf<f.hf;)if(m[f.jf]=m[f.jf-f.sf&b],f._--,f.jf++,f.Yf++,f.jf>=w){f.P=8,f.j=12;break}8==f.j&&(f.j=4);continue;case 9:A(f,w);continue;case 14:if(f.jf+=V(f,w),f.jf>=w)return f.P=14,void(f.j=12);f.j=4;continue;case 5:for(;f._>0;)f.v>2030&&C(f),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),_(f,8),f._--;f.j=2;continue;case 6:W(f);continue;case 12:f.pf=ff(f.jf,f.O),f.j=13;case 13:if(0==B(f))return;f.jf>=f.yf&&(f.maxDistance=f.yf),f.jf>=f.O&&(f.jf>f.O&&m.copyWithin(0,f.O,f.jf),f.jf&=b,f.qf=0),f.j=f.P;continue;default:throw"Unexpected state "+f.j}if(10==f.j){if(f._<0)throw"Invalid metablock length";G(f),J(f,1)}}!function(f){let w=new Int16Array(24),b=new Int16Array(24);b[0]=2;for(let f=0;f<23;++f)w[f+1]=w[f]+(1<<o[f]),b[f+1]=b[f]+(1<<n[f]);for(let j=0;j<704;++j){let l=j>>>6,m=-4;l>=2&&(l-=2,m=0);let p=(170064>>>2*l&3)<<3|j>>>3&7,q=(156228>>>2*l&3)<<3|7&j,g=b[q],k=m+(g>4?3:g-2),s=4*j;f[s+0]=o[p]|n[q]<<8,f[s+1]=w[p],f[s+2]=b[q],f[s+3]=k}}(g);let F=new function(f,w,b){this.if=0,this.rf=new Int32Array(0),this.If=new Int8Array(0),this.Rf=new Int32Array(0),this.Kf=new Int16Array(0),this.if=f,this.rf=new Int32Array(3*f),this.Kf=new Int16Array(f),this.If=new Int8Array(w),this.Rf=new Int32Array(b+1)}(121,167,50);function Q(f,w){let b=1<<w-1;for(;0!=(f&b);)b>>=1;return(f&b-1)+b}function P(f,w,b,j,l){do{f[w+(j-=b)]=l}while(j>0)}function U(f,w,b){let j=1<<w-b;for(;w<15&&(j-=f[w],!(j<=0));)w++,j<<=1;return w-b}function c(f,w,b,j,l){let m,p,q=f[w],o=new Int32Array(l),n=new Int32Array(16),g=new Int32Array(16);for(p=0;p<l;p++)n[j[p]]++;g[1]=0;for(let f=1;f<15;f++)g[f+1]=g[f]+n[f];for(p=0;p<l;p++)0!=j[p]&&(o[g[j[p]]++]=p);let k=b,s=1<<k,v=s;if(1==g[15]){for(m=0;m<v;m++)f[q+m]=o[0];return v}m=0,p=0;for(let w=1,j=2;w<=b;w++,j<<=1)for(;n[w]>0;n[w]--)P(f,q+m,j,s,w<<16|o[p++]),m=Q(m,w);let t=v-1,e=-1,d=q;for(let w=b+1,j=2;w<=15;w++,j<<=1)for(;n[w]>0;n[w]--)(m&t)!=e&&(d+=s,k=U(n,w,b),s=1<<k,v+=s,e=m&t,f[q+e]=k+b<<16|d-q-e),P(f,d+(m>>b),j,s,w-b<<16|o[p++]),m=Q(m,w);return v}function C(f){if(0!=f.t){if(x(f)>=-2)return;throw"No more input"}let w=f.v<<1,b=4096-w;for(f.o.copyWithin(0,w,4096),f.v=0;b<4096;){let w=4096-b,j=wf(f.input,f.o,b,w);if(j<=0){f.t=1,f.Sf=b,b+=1;break}b+=j}!function(f,w){let b=f.o,j=w>>1,l=f.k;for(let f=0;f<j;++f)l[f]=255&b[2*f]|(255&b[2*f+1])<<8}(f,b)}function J(f,w){if(0==f.t)return;let b=(f.v<<1)+(f.s+7>>3)-4;if(b>f.Sf)throw"Read after end";if(0!=w&&b!=f.Sf)throw"Unused bytes after end"}function _(f,w){let b=f.g>>>f.s&(1<<w)-1;return f.s+=w,b}function X(f,w){let b=_(f,16);return f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16,b|_(f,w-16)<<16}function E(f){f.v>2030&&C(f),J(f,0),f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16,f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16}function M(f){32==f.s&&E(f)}function G(f){let w=32-f.s&7;if(0!=w){if(0!=_(f,w))throw"Corrupted padding bits"}}function x(f){let w=2048;return 0!=f.t&&(w=f.Sf+1>>1),w-f.v}!function(f,w,b,j,l){let m=j.length,p=1,q=0;for(let b=0;b<m;++b){let l=j.charCodeAt(b);35==l?w[p++]=q:f[q++]=l}for(let f=0;f<363;++f)b[f]=l.charCodeAt(f)-32}(F.If,F.Rf,F.rf,'# #s #, #e #.# the #.com/#\xc2\xa0# of # and # in # to #"#">#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #'," !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K");let O=new Int32Array(2048);function Z(){this.L=new Int8Array(0),this.K=new Int8Array(0),this.R=new Int8Array(0),this.wf=new Int8Array(0),this.p=new Int8Array(0),this.nf=new Int8Array(0),this.o=new Int8Array(0),this.k=new Int16Array(0),this.Af=new Int32Array(0),this.H=new Int32Array(0),this.l=new Int32Array(0),this.U=new Int32Array(0),this.C=new Int32Array(0),this.J=new Int32Array(0),this.q=new Int32Array(0),this.j=0,this.P=0,this.g=0,this.s=0,this.v=0,this.Sf=0,this.t=0,this._=0,this.F=0,this.X=0,this.M=0,this.u=0,this.h=0,this.B=0,this.Y=0,this.A=0,this.V=0,this.jf=0,this.maxDistance=0,this.m=0,this.ff=0,this.I=0,this.S=0,this.Yf=0,this.Bf=0,this.i=0,this.D=0,this.T=0,this.W=0,this.Wf=0,this.$=0,this.N=0,this.sf=0,this.hf=0,this.yf=0,this.Z=0,this.O=0,this.G=0,this.gf=0,this.lf=0,this.mf=0,this.qf=0,this.pf=0,this.kf=0,this.bf=0,this.Vf=0,this.vf=0,this.Hf=0,this.af=0,this.uf=0,this.zf=0,this.Tf=new Array(0),this.df=new Int32Array(0),this.tf=0,this.ef=new Int8Array(0),this.input=null,this.L=new Int8Array(0),this.H=new Int32Array(10),this.H[0]=16,this.H[1]=15,this.H[2]=11,this.H[3]=4}!function(f,w,b){for(let w=0;w<256;++w)f[w]=63&w,f[512+w]=w>>2,f[1792+w]=2+(w>>6);for(let b=0;b<128;++b)f[1024+b]=4*(w.charCodeAt(b)-32);for(let w=0;w<64;++w)f[1152+w]=1&w,f[1216+w]=2+(1&w);let j=1280;for(let w=0;w<19;++w){let l=3&w,m=b.charCodeAt(w)-32;for(let w=0;w<m;++w)f[j++]=l}for(let w=0;w<16;++w)f[1792+w]=1,f[2032+w]=6;f[1792]=0,f[2047]=7;for(let w=0;w<256;++w)f[1536+w]=f[1792+w]<<3}(O," !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ","A/* ': & : $ \x81 @");let L=null,N=new Int32Array(32),$=new Int32Array(32);{let f=new Int8Array(122784),w=new Int32Array(25);!function(f,w,b,j,l,m){let p=function(f){let w=f.length,b=new Int8Array(w);for(let j=0;j<w;++j)b[j]=f.charCodeAt(j);return b}(w+b);if(p.length!=f.length)throw"Corrupted brotli dictionary";let q=0,o=j.length;for(let f=0;f<o;f+=2){let w=j.charCodeAt(f)-36,b=j.charCodeAt(f+1)-36;for(let f=0;f<w;++f)p[q]^=3,q++;for(let f=0;f<b;++f)p[q]^=236,q++}for(let f=0;f<m.length;++f)l[f]=m.charCodeAt(f)-65;f.set(p)}(f,'wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf\'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+"sj`hfujo\'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\t),\x0e\t#233kboo-\t\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\x0e\t\x0e\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0elupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0eojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7f"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\vwbmhzbqgaltoavpk965YIbub03s{\t\x7f~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd\'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0e\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7f.\t"331*mgltX2^8X^8\tOld#pbow\x0e\t\n\nabmdwqjnabwk*x\x0e\t33s{\t~*8hl9\0effpbg=\x0ep9,,#X^8wloosovd+*x\tx\x0e\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0e\t~\x0e1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\<Q<\\<R<P=l<\\=l=o=n<\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\<{<\\<x<\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?"..fm\\VP% 0:8133s{\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\t?wqz#x\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\x7f\x7fX^8wls!=\t?"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0e\tabmgprvfvf>#x~8;3s{8`hjmdx\x0e\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7f\x7f#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7fpvjwfpoj`fkbqqz213!#ptffwwq=\x0e\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0e\t?"pwffo#zlv#k1=\x0e\telqn#ifpvp233&#nfmv-\x0e\t\n\x0e\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7f`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0e\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7f\x7f#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7f\x7f#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\vBl\bQ\x7f\vUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\vBM\v|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7fm\x04kF\t[]\bPm\bTv\nsI\vpg\t[I\bQp\x04mx\v_W\n^M\npe\vQ}\vGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\vGL\vxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\vwT\ti_\bTg\x04QQ\n|p\vXN\bQS\vxD\x04QC\bWZ\tpD\vVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\vQ}\vWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\vEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\vxs\nXW\twR\vek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\v_W\vWs\vsI\x05m\x7f\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\v@@\bTl\bPv\t}t\x04Sw\x04M`\vnU\tkW\ved\nqo\vxY\tA|\bTz\vy`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7fm\tav\tBN\vb\\\tpD\bTf\nY[\tJn\bQy\t[^\vWc\vyu\x04Dl\x04CJ\vWj\vHR\t`V\vuW\tQy\np@\vGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7fR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\vQB\vWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7f\tea\tdj\v]W\nb~\x04M`\twL\bTV\bVH\nt\x7f\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\vK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\vHR\bPv\vLx\vEZ\bT\x7f\bTv\tiD\x05oD\x05MU\vwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\vxY\x04h}\nzk\bWZ\t\x7fm\ve`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\vDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\vwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\vxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\vRb\twQ\n]Q\x04QJ\bWg\vWa\bQj\ntC\bVH\nYm\vxs\bVK\nel\bWI\vxY\x04Cq\ntR\vHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\vxs\v_W\td{\vQ}\tcg\tTz\tA|\tCj\vLm\x05N}\x05m\x7f\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\vQ}\bTf\x05ka\x04Jm\v@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\vb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\vbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\vKC\tdj\tI_\bVV\ny\\\vLm\x05xl\txB\tkV\vb\\\vJW\vVS\tVx\vxD\td{\x04MD\bTa\t|`\vPz\x04R}\vWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\vWh\vWk\nxS\vAz\vwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7f\vpg\td\\\voA\x05{D\ti_\x05xB\bT\x7f\t`V\x05qr\tTT\x04g]\x04CA\vuR\tVJ\tT`\npw\vRb\tI_\nCx\x04Ro\vsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\v^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\v|j\nqo\x05u|\tQ]\vek\x05\x7fZ\x04M`\x04St\npe\tdj\bVG\veE\t\x7fm\vWc\x04|I\n[W\tfL\bT\x7f\tBZ\x04Su\vKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\vBl\bWg\x04XD\x05kc\vx[\bVV\tQ]\t\x7fa\tPy\vxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\vx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\vK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7f\x05Nt\vDg\tVc\bTl\x04d@\npo\t\x7fM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\vF{\tcO\tfD\nlm\vfZ\nlm\veU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7f\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\vxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\vDg\vx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\v_W\nLk\x05Nt\tyj\tfM\x04R\x7f\tiI\bTl\vwX\tsV\vMl\nyu\tAJ\bVj\x04KO\tWV\vA}\vW\x7f\nrp\tiD\v|o\x05lv\vsI\x04BM\td~\tCU\bVb\x04eV\npC\vwT\tj`\tc}\vxs\vps\vvh\tWV\vGg\vAe\vVK\v]W\trg\vWc\x05F`\tBr\vb\\\tdZ\bQp\nqI\x04kF\nLk\vAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\v@@\bTe\ti_\n_D\twL\nAH\viK\vek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\vVK\npl\x04S}\vWP\t|d\x04MD\vHV\bT\x7f\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\v^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7fm\x04uQ\vhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\vxD\t\x7fm\bTp\x04IS\nc|\tkV\x05i~\tV{\vhZ\t|b\bWt\n@R\voA\vnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\vQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\vpg\vpg\vWc\tiT\tbs\twL\tU_\tc\\\t|h\vKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\ved\bTW\bSB\nxU\tcn\bTb\ne\x7f\ta\\\tSG\bU|\npV\nN\\\x04Kn\vnU\tAt\tpD\v^R\vIr\x04b[\tR{\tdE\vxD\vWK\vWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7fa\bQp\x05Ob\nLP\bTl\x04Y[\vK}\tAJ\bQ\x7f\x04n^\vsA\bSM\nqM\bWZ\n^W\vz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\vxs\x04mx\vws\tcC\ntC\tyc\x05M`\vW\x7f\nrh\bQp\vxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\vpg\tcn\tfL\vvh\x04Cq\bTl\vnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\vKW\tfD\nea\x04oQ\tj_\tBv\x04nM\vID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\vxD\x04|I\x05xl\nfy\x04Ce\vwB\nLk\vd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\veE\tjp\nq}\tiD\x05qN\v^R\t\x7fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\vHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\v]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\vxs\x04BN\x05ti\x04lm\tTd\t]y\vHV\tSo\v|j\x04XX\tA|\vZ^\vGu\bTW\x05M`\x04kF\vhZ\vVK\tdG\vBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7f\tPl\bWO\vLm\tdL\x05uH\x04Cm\tdT\x04fn\vwB\x05ka\vnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\vAx\tHE\bTg\bSq\x05vp\vb\\\bWO\nOl\nsI\nfy\vID\t\\c\n{Z\n^~\npe\nAO\tTT\vxv\x04k_\bWO\v|j\vwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\vJc\ved\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\vxs\n`e\viK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\vWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7f\tHE\tp\\\tfF\tfw\bVV\bW@\tak\vVK\x05ls\tVJ\bVV\veE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7f\tPl\t]y\vwT\x05{p\x04MD\vb\\\tQ]\x04Kj\tJn\nAH\vRb\tBU\tHK\t\\c\nfI\x05m\x7f\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\vGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\vuW\tiI\bWI\nqI\v|j\x04BV\bVg\bWZ\x04kF\vx]\bTA\tab\tfr\ti@\tJd\tJd\vps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\vw}\vqO\ti[\bQ\x7f\bTz\vVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\vWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\vAx\nMd\tBr\x05ui\vxY\bSM\vWc\v|j\vxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\veU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7f\vhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\vGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\vb\\\tpV\ncc\x04S\\\tct\t`z\bPL\vWs\nA`\neg\bSq\x05uE\x04CR\vDg\t`W\vz{\vWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\vRb\bTQ\npl\x05Gt\vuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\vDg\ved\tq{\x04VG\bQ\x7f\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\vB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\vwT\bSM\x05MY\x05qN\tdj\x05~s\vQ}\x05MY\vMB\tBv\twR\bRg\vQ}\tql\vKC\nrm\x05xu\x04CC\vwB\vvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\v{i\nC~\tBL\veE\x05uH\bVj\x04Ey\x04Gz\vzR\v{i\tcf\n{Z\n]n\x04XA\vGu\vnU\thS\vGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7f\tc\\\vmO\vWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\vwT\npV\ndt\vyI\tVx\tQ\x7f\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\vwB\t}t\t[I\tCP\x04kX\vFm\vhZ\x05m\x7f\ti[\np@\vQ}\vW\x7f\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\vRb\tio\tPy\x04Y[\nxU\tct\v@@\tww\bPv\x04BM\x04FF\ntb\x05v|\vKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7f\v_W\tTJ\nqI\t|a\tA{\vuP\x04MD\tPl\nxR\tfL\vws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\vW\x7f\nqs\x05lv\bSM\x04Zi\vVK\x05ia\vQB\tQ\x7f\n{Z\bPt\vKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\vDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\veU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\vWc\tqv\n`m\tU^\x05oD\nd|\vGg\tdE\vwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\vxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\vps\ntC\vpP\vqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\vxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\v@J\t|d\x05uh\bWZ\veU\vnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\vNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\vAx\np@\nzk\vRb\x05Os\vWS\x04e^\vD_\tBv\vWd\bVb\vxs\veE\bRw\n]n\n|p\vg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\vps\npe\x05u|\vGr\bVe\tCU\x04]M\x04XU\vxD\bTa\tIQ\vWq\tCU\tam\tdj\bSo\x04Sw\vnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\vnU\nzU\t|}\tiD\nz\\\bSM\vxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\vFm\vLX\x05vc\vql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\vRb\tyj\tsb\vWs\bTl\tkV\ved\ne\x7f\x05lL\vxN\t\x7fm\nJn\tjY\vxD\bVb\bSq\vyu\twL\vXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\v|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\vEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\vbE\tBZ\vRH\bP{\tjp\n\\}\ta_\tcC\t|a\vD]\tBZ\ti[\tfD\vxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\vLx\vM@\bWZ\x04Kn\vpg\nTi\nIv\n|r\v@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\vxD\n]s\x04gc\vps\tBr\bTW\vBM\x05tZ\nBY\x04DW\tjf\vSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\vgl\nig\bUs\x04BT\vbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\vID\v|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\<V<Y=e<Y=o<Z<Y<v<\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\<[<R<Q<\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\<P<M<D<|<P<\\=c<K=n<R<^<\\=m<^<\\<P<Y<P=o<N<\\<V<X<^<\\<Q<\\<P=a=n<T=a=n=o<~<\\<P=n<Y=i<S=l<R=n=o=n<Q<\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\=m<Q<T<P=m<\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\<r<Q<\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\fHy\fIk\fHU\fId\fHy\fIl\fHT\fIk\fHy\fHR\fHy\fIg\fHx\fH\\\fHF\fH\\\fHD\fIk\fHc\fHy\fHy\fHS\fHA\fIl\fHk\fHT\fHy\fH\\\fHH\fIg\fHU\fIg\fHj\fHF\fHU\fIl\fHC\fHU\fHC\fHR\fHH\fHy\fHI\fHRibdqbm\fHj\fHp\fHp\fIg\fHi\fH@\fHJ\fIg\fH{\fHd\fHp\fHR\fH{\fHc\fHU\fHB\fHk\fHD\fHY\fHU\fHC\fIk\fHI\fIk\fHI\fIl\fHt\fH\\\fHp\fH@\fHJ\fIl\fHy\fHd\fHp\fIl\fHY\fIk\fHD\fHd\fHD\fHc\fHU\fH\\\fHe\fHT\fHB\fIk\fHy\fHB\fHY\fIg\fH^\fIk\fHT\fH@\fHB\fHd\fHJ\fIk\fH\x7f\fH\\\fHj\fHB\fH@\fHT\fHA\fH\\\fH@\fHD\fHv\fH^\fHB\fHD\fHj\fH{\fHT\fIl\fH^\fIl4U5h5e4I5h5e5k4\\4K4N4B4]4U4C4C4K5h5e5k4\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\x0e\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0e\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0e\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0e\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0e\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0e\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0e\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7f\x7f#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0e\t?"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0e\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7f\x7fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0e\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0e\t\x0e\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0e\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl"..#fmgojfp#jm$^*8\x0e\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0e\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0e\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0e\t\x0e\t\x0e\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0e\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0e\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0e\t\x0e\t?"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo\'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0e\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?"..#fmg?,psbm=??aq#,=\x0e\t\\slsvsp\x7fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0e\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8"..#wjwof!=?,irvfqz-?,elqn=\t+\vBl\bQ\x7f*+\vUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\<X<R=m<\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\<X<Q<Y<U<X<R<P<\\<P<T=l<\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\<P<T=n<T<S<\\=n<R<P=o<S=l<\\<^<W<T=j<\\<R<X<Q<\\<_<R<X=g<[<Q<\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\<[<\\<Q<\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\x03\x03\x03\x03\x03\x03\x03\x03\x02\x03\x02\x03\x02\x03\x02\x03\x01\x03\x01\x03\x01\x03\x01\x03\x07\x03\x07\x03\x07\x03\x07\x03\x03\x02\x01\0\x07\x06\x05\x04\x04\x05\x06\x07\0\x01\x02\x03\v\n\t\b\x0f\x0e\r\f\f\r\x0e\x0f\b\t\n\v\x13\x12\x11\x10\x17\x16\x15\x14\x14\x15\x16\x17\x10\x11\x12\x13\x1b\x1a\x19\x18\x1f\x1e\x1d\x1c\x1c\x1d\x1e\x1f\x18\x19\x1a\x1b\x13\x13\x13\x13\x03\x03\x03\x03\x03\x03\x03\x03\x13\x13\x13\x13\x02\x03\x03\x03\x01\x03\x03\x03\x01\x03\x03\x03\x02\x03\x03\x03\x02\x03\x03\x03\0\x03\x03\x03\x13\x13\x03\x02\x03\x03\x03\x02\x03\x03\x13\x13\x03\x02\x03\x03\x03\v\x03\v\x03\v\x03\v\x03\x03\x03\x02\x03\x01\x03\0\x03\x07\x03\x06\x03\x05\x03\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0e\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0e\t?"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0e\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0e\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0e\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\vBl\bQ\x7f\tA{\vUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\vB{\npV\v@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\vQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\ved\vHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\vLm\tKx\t}t\bPv\ny\\\naB\tV\x7f\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\vxs\x04Zf\nqI\x04Zf\vBM\v|j\t}t\bSM\nmC\vQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0e\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0e\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0e\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0e\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0e\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0e\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0e,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0e?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0e\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw','fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\<S<R=m<W<Y<^=m<Y<_<R=m<\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\<U=n<\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\<^<\\=n<\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\=m=n<T=k<\\=m=n=`=l<\\<]<R=n<Q<R<^=g=i<S=l<\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\<[<\\<X=n<\\<V<R<Y=n<R<_<X<\\<S<R=k=n<T<s<R=m<W<Y=n<\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\<V<T=i=m=l<\\<[=o<M<\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\<V<Q<T<_<T=m<W<R<^<\\<Q<\\=d<Y<U<Q<\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\=m<\\<P=g=i=l=g<Q<V<\\<q<R<^=g<U=k<\\=m<R<^<P<Y=m=n<\\=h<T<W=`<P<P<\\=l=n<\\=m=n=l<\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7fwkvna\x7fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0e\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0e\t?kfbg=\x0e\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0e\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0e\t?,kfbg=\x0e\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0e\t\n?,gju=\x0e\t\x0e\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0e\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0e\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0e\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0e\t?kfbg=\x0e\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0e\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7f_p(\',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\nAO\x05Gx\bTA\nzk\vBl\bQ\x7f\bTA\nzk\vUm\bQ\x7f\bTA\nzk\npe\x05u|\ti@\tcT\bVV\n\\}\nxS\tVp\x05tS\x05k`\t[X\t[X\vHR\bPv\bTW\bUe\n\x7fa\bQp\v_W\vWs\nxS\vAz\n_y\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\<Y=m<Y<U=k<\\=m<^=m<Y<_<X<\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\<^<R<S=l<R=m<X<\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\=m=n=l<\\<Q=g<Q<T=k<Y<_<R=l<\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\<V<R<S<R=n<R<P=o=l<\\<]<R=n=o<\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\<V<\\<Z<X=g<U<^<W<\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\<]<R=n<\\=m<V<\\<[<\\<W<S<Y=l<^=g<U<X<Y<W<\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\=l<\\<P<V<\\=i<Q<\\=k<\\<W<R<L<\\<]<R=n<\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\=k<\\<W<\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\=m<P<R<X<Y<W<T=n<\\<V<R<_<R<R<Q<W<\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\<[<Q=g=i<T=m<V<\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\<Q<Q<R<U<[<Q<\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\<[<\\=e<T=n=g<w=o=k=d<T<Y\fHD\fHU\fIl\fHn\fHy\fH\\\fHD\fIk\fHi\fHF\fHD\fIk\fHy\fHS\fHC\fHR\fHy\fH\\\fIk\fHn\fHi\fHD\fIa\fHC\fHy\fIa\fHC\fHR\fH{\fHR\fHk\fHM\fH@\fHR\fH\\\fIk\fHy\fHS\fHT\fIl\fHJ\fHS\fHC\fHR\fHF\fHU\fH^\fIk\fHT\fHS\fHn\fHU\fHA\fHR\fH\\\fHH\fHi\fHF\fHD\fIl\fHY\fHR\fH^\fIk\fHT\fIk\fHY\fHR\fHy\fH\\\fHH\fIk\fHB\fIk\fH\\\fIk\fHU\fIg\fHD\fIk\fHT\fHy\fHH\fIk\fH@\fHU\fIm\fHH\fHT\fHR\fHk\fHs\fHU\fIg\fH{\fHR\fHp\fHR\fHD\fIk\fHB\fHS\fHD\fHs\fHy\fH\\\fHH\fHR\fHy\fH\\\fHD\fHR\fHe\fHD\fHy\fIk\fHC\fHU\fHR\fHm\fHT\fH@\fHT\fIk\fHA\fHR\fH[\fHR\fHj\fHF\fHy\fIk\fH^\fHS\fHC\fIk\fHZ\fIm\fH\\\fIn\fHk\fHT\fHy\fIk\fHt\fHn\fHs\fIk\fHB\fIk\fH\\\fIl\fHT\fHy\fHH\fHR\fHB\fIk\fH\\\fHR\fH^\fIk\fHy\fH\\\fHi\fHK\fHS\fHy\fHi\fHF\fHD\fHR\fHT\fHB\fHR\fHp\fHB\fIm\fHq\fIk\fHy\fHR\fH\\\fHO\fHU\fIg\fHH\fHR\fHy\fHM\fHP\fIl\fHC\fHU\fHR\fHn\fHU\fIg\fHs\fH^\fHZ\fH@\fIa\fHJ\fH^\fHS\fHC\fHR\fHp\fIl\fHY\fHD\fHp\fHR\fHH\fHR\fHy\fId\fHT\fIk\fHj\fHF\fHy\fHR\fHY\fHR\fH^\fIl\fHJ\fIk\fHD\fIk\fHF\fIn\fH\\\fIl\fHF\fHR\fHD\fIl\fHe\fHT\fHy\fIk\fHU\fIg\fH{\fIl\fH@\fId\fHL\fHy\fHj\fHF\fHy\fIl\fHY\fH\\\fIa\fH[\fH{\fHR\fHn\fHY\fHj\fHF\fHy\fIg\fHp\fHS\fH^\fHR\fHp\fHR\fHD\fHR\fHT\fHU\fHB\fHH\fHU\fHB\fIk\fHn\fHe\fHD\fHy\fIl\fHC\fHR\fHU\fIn\fHJ\fH\\\fIa\fHp\fHT\fIn\fHv\fIl\fHF\fHT\fHn\fHJ\fHT\fHY\fHR\fH^\fHU\fIg\fHD\fHR\fHU\fIg\fHH\fIl\fHp\fId\fHT\fIk\fHY\fHR\fHF\fHT\fHp\fHD\fHH\fHR\fHD\fIk\fHH\fHR\fHp\fHR\fH\\\fIl\fHt\fHR\fHC\fH^\fHp\fHS\fH^\fIk\fHD\fIl\fHv\fIk\fHp\fHR\fHn\fHv\fHF\fHH\fIa\fH\\\fH{\fIn\fH{\fH^\fHp\fHR\fHH\fIk\fH@\fHR\fHU\fH\\\fHj\fHF\fHD\fIk\fHY\fHR\fHU\fHD\fHk\fHT\fHy\fHR\fHT\fIm\fH@\fHU\fH\\\fHU\fHD\fIk\fHk\fHT\fHT\fIk\fHT\fHU\fHS\fHH\fH@\fHM\fHP\fIk\fHt\fHs\fHD\fHR\fHH\fH^\fHR\fHZ\fHF\fHR\fHn\fHv\fHZ\fIa\fH\\\fIl\fH@\fHM\fHP\fIl\fHU\fIg\fHH\fIk\fHT\fHR\fHd\fHs\fHZ\fHR\fHC\fHJ\fHT\fHy\fHH\fIl\fHp\fHR\fHH\fIl\fHY\fHR\fH^\fHR\fHU\fHp\fHR\fH\\\fHF\fHs\fHD\fHR\fH\\\fHz\fHD\fIk\fHT\fHM\fHP\fHy\fHB\fHS\fH^\fHR\fHe\fHT\fHy\fIl\fHy\fIk\fHY\fH^\fH^\fH{\fHH\fHR\fHz\fHR\fHD\fHR\fHi\fH\\\fIa\fHI\fHp\fHU\fHR\fHn\fHJ\fIk\fHz\fHR\fHF\fHU\fH^\fIl\fHD\fHS\fHC\fHB\fH@\fHS\fHD\fHR\fH@\fId\fHn\fHy\fHy\fHU\fIl\fHn\fHy\fHU\fHD\fHR\fHJ\fIk\fHH\fHR\fHU\fHB\fH^\fIk\fHy\fHR\fHG\fIl\fHp\fH@\fHy\fHS\fHH\fIm\fH\\\fHH\fHB\fHR\fHn\fH{\fHY\fHU\fIl\fHn\fH\\\fIg\fHp\fHP\fHB\fHS\fH^\fIl\fHj\fH\\\fIg\fHF\fHT\fIk\fHD\fHR\fHC\fHR\fHJ\fHY\fH^\fIk\fHD\fIk\fHz\fHR\fHH\fHR\fHy\fH\\\fIl\fH@\fHe\fHD\fHy\fHR\fHp\fHY\fHR\fH@\fHF\fIn\fH\\\fHR\fH@\fHM\fHP\fHR\fHT\fI`\fHJ\fHR\fHZ\fIk\fHC\fH\\\fHy\fHS\fHC\fIk\fHy\fHU\fHR\fHn\fHi\fHy\fHT\fH\\\fH@\fHD\fHR\fHc\fHY\fHU\fHR\fHn\fHT\fIa\fHI\fH^\fHB\fHS\fH^\fIk\fH^\fIk\fHz\fHy\fHY\fHS\fH[\fHC\fHy\fIa\fH\\\fHn\fHT\fHB\fIn\fHU\fHI\fHR\fHD\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0e\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7f%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw"Xfmgje^..=\x0e\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?"Xfmgje^..=\x0e\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0e\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0e#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0e\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0e\t?,p`qjsw=\x0e\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0e\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0e\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0e\t\x0e\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\=c=m<Y<_<R<X<Q=c=m<V<\\=k<\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\x7f<W<\\<^<Q<\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\=l<Y=d<Y<Q<T=c<M<V<\\=k<\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\<[<\\=n=`=n<R<^<\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\<P<\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7f#?b#kqfe>!?"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0e\t?,p`qjsw=\x0e\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0e\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0e\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\vBl\bQ\x7f*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0e\t?,p`qjsw=\x0e\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7fwkvna\x7fofew\x7fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0e\t?-ip!=?,p`qjsw=\x0e\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*"y"W"W"["Q"U"V"@=i=l<^<\\=n=m<V<T<V<R<P<S<\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\<^<T=n=`=k<Y<W<R<^<Y<V<\\=l<\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\<Q<T=j=g<V<\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\<T<]<R<W<Y<Y<V<R<P<S<\\<Q<T=c<^<Q<T<P<\\<Q<T<Y=m=l<Y<X=m=n<^<\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7fqjdkw\x7fwkvna\x7f-ip!=?,p`qjsw=\x0e\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0e\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0e\t?,gju=\x0e\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0e\t?,gju=\x0e\t\x0e\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0e\t?,kwno=\x0e"y"W"W"["Q"U"V"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7fwkvna\x7fqjdkw\x7f1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0e\t?,kwno=\x0e\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?"GL@WZSF#kwno=\x0e\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7f#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0e\t?,gju=\x0e\t\x0e\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\=l=m<V<T<]=f<W<_<\\=l=m<V<T<H<Y<X<Y=l<\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\<P<P=g<r=n<S=l<\\<^<T=n=`<]<Y=m<S<W<\\=n<Q<R<P<\\=n<Y=l<T<\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\<P<P<\\<S<R<W<Q<R=m=n=`=b<Q<\\=i<R<X<T=n=m=c<T<[<]=l<\\<Q<Q<R<Y<Q<\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\<Q<X=l\fHJ\fIa\fHY\fHR\fH\\\fHR\fHB\fId\fHD\fIm\fHi\fH^\fHF\fIa\fH\\\fHJ\fHR\fHD\fHA\fHR\fH\\\fHH\fIl\fHC\fHi\fHD\fIm\fHJ\fIk\fHZ\fHU\fHS\fHD\fIa\fHJ\fIl\fHk\fHn\fHM\fHS\fHC\fHR\fHJ\fHS\fH^\fIa\fH^\fIl\fHi\fHK\fHS\fHy\fHR\fH\\\fHY\fIl\fHM\fHS\fHC\fIg\fHv\fHS\fHs\fIa\fHL\fIk\fHT\fHB\fHR\fHv\fHR\fH\\\fHp\fHn\fHy\fIa\fHZ\fHD\fHJ\fIm\fHD\fHS\fHC\fHR\fHF\fIa\fH\\\fHC\fIg\fH{\fHi\fHD\fIm\fHT\fHR\fH\\\fH}\fHD\fH^\fHR\fHk\fHD\fHF\fHR\fH\\\fIa\fHs\fIl\fHZ\fH\\\fIa\fHH\fIg\fHn\fH^\fIg\fHy\fHT\fHA\fHR\fHG\fHP\fIa\fH^\fId\fHZ\fHZ\fH\\\fIa\fHH\fIk\fHn\fHF\fIa\fH\\\fHJ\fIk\fHZ\fHF\fIa\fH^\fIk\fHC\fH\\\fHy\fIk\fHn\fHJ\fIa\fH\\\fHT\fIa\fHI\fHS\fHH\fHS\fHe\fHH\fIa\fHF\fHR\fHJ\fHe\fHD\fIa\fHU\fIk\fHn\fHv\fHS\fHs\fIa\fHL\fHR\fHC\fHR\fHH\fIa\fH\\\fHR\fHp\fIa\fHC\fHR\fHJ\fHR\fHF\fIm\fH\\\fHR\fHD\fIk\fHp\fIg\fHM\fHP\fIk\fHn\fHi\fHD\fIm\fHY\fHR\fHJ\fHZ\fIa\fH\\\fIk\fHO\fIl\fHZ\fHS\fHy\fIa\fH[\fHR\fHT\fH\\\fHy\fHR\fH\\\fIl\fHT\fHn\fH{\fIa\fH\\\fHU\fHF\fH\\\fHS\fHO\fHR\fHB\fH@\fIa\fH\\\fHR\fHn\fHM\fH@\fHv\fIa\fHv\fIg\fHn\fHe\fHF\fH^\fH@\fIa\fHK\fHB\fHn\fHH\fIa\fH\\\fIl\fHT\fHn\fHF\fH\\\fIa\fHy\fHe\fHB\fIa\fHB\fIl\fHJ\fHB\fHR\fHK\fIa\fHC\fHB\fHT\fHU\fHR\fHC\fHH\fHR\fHZ\fH@\fIa\fHJ\fIg\fHn\fHB\fIl\fHM\fHS\fHC\fHR\fHj\fHd\fHF\fIl\fHc\fH^\fHB\fIg\fH@\fHR\fHk\fH^\fHT\fHn\fHz\fIa\fHC\fHR\fHj\fHF\fH\\\fIk\fHZ\fHD\fHi\fHD\fIm\fH@\fHn\fHK\fH@\fHR\fHp\fHP\fHR\fH\\\fHD\fHY\fIl\fHD\fHH\fHB\fHF\fIa\fH\\\fHB\fIm\fHz\fHF\fIa\fH\\\fHZ\fIa\fHD\fHF\fH\\\fHS\fHY\fHR\fH\\\fHD\fIm\fHy\fHT\fHR\fHD\fHT\fHB\fH\\\fIa\fHI\fHD\fHj\fHC\fIg\fHp\fHS\fHH\fHT\fIg\fHB\fHY\fHR\fH\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0e\t?,algz=\x0e\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\=l=m<V<T\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0e\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0e\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0e\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0e\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0e\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\={<Q=m=`<V<\\=o<V=l<\\={<Q=m=`<V<\\<L<R=m=m<T<U=m<V<R<U<P<\\=n<Y=l<T<\\<W<R<^<T<Q=h<R=l<P<\\=j<T<T=o<S=l<\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\=j<T=c<t<Q=h<R=l<P<\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0e\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?"GL@WZSF#kwno=\t?"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\vUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\<Q<T<[<\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\<[<R<^<\\<Q<T=c=l<Y<_<T=m=n=l<\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\=n<Y<W=`<Q<\\?"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\<]<Y<[<R<S<\\=m<Q<R=m=n<T\fHF\fIm\fHT\fIa\fHH\fHS\fHy\fHR\fHy\fHR\fHn\fH{\fIa\fH\\\fIk\fHT\fHe\fHD\fIa\fHU\fIg\fHn\fHD\fIk\fHY\fHS\fHK\fHR\fHD\fHT\fHA\fHR\fHG\fHS\fHy\fIa\fHT\fHS\fHn\fH{\fHT\fIm\fH\\\fHy\fIa\fH[\fHS\fHH\fHy\fIe\fHF\fIl\fH\\\fHR\fHk\fHs\fHY\fHS\fHp\fIa\fHr\fHR\fHF\fHD\fHy\fHR\fH\\\fIa\fH\\\fHY\fHR\fHd\fHT\fHy\fIa\fH\\\fHS\fHC\fHH\fHR',"\u06f7%\u018c'T%\x85'W%\xd7%O%g%\xa6&\u0193%\u01e5&>&*&'&^&\x88\u0178\u0c3e&\u01ad&\u0192&)&^&%&'&\x82&P&1&\xb1&3&]&m&u&E&t&C&\xcf&V&V&/&>&6&\u0f76\u177co&p&@&E&M&P&x&@&F&e&\xcc&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025e*\u03ea\u21f3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0d2e&\u0503&\u0316*&*8&%&%&&&%,)&\x9a&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8e&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053c\x84(,(<&,&\u03da&\u18c7&-&,(%&(&%&(\u013b0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xc6-\u0360\u1ef3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072c\u2a25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1e78\xcc-&7&1&F&7&t&W&7&I&.&.&^&=\u0f9c\u19d3&8(>&/&/&\u077b')'\u1065')'%@/&0&%\u043e\u09c0*&*@&C\u053d\u05d4\u0274\u05eb4\u0dd7\u071a\u04d16\u0d84&/\u0178\u0303Z&*%\u0246\u03ff&\u0134&1\xa8\u04b4\u0174",w,"AAAAKKLLKKKKKJJIHHIHHGGFF"),function(f,w){if(w.length>31)throw"sizeBits length must be at most 31";for(let f=0;f<4;++f)if(0!=w[f])throw"first 4 must be 0";let b=N,j=$;j.set(w.subarray(0,0+w.length),0);let l=0,m=f.length;for(let f=0;f<w.length;++f){b[f]=l;let w=j[f];if(0!=w){if(w>=31)throw"newSizeBits values must be less than 31";if(l+=f<<w,l<=0||l>m)throw"newSizeBits is inconsistent: overflow"}}for(let f=w.length;f<32;++f)b[f]=l;if(l!=m)throw"newSizeBits is inconsistent: underflow";L=f}(f,w)}function ff(f,w){return f<=w?f:w}function wf(f,w,b,j){if(null==f)return-1;let l=ff(f.offset+j,f.data.length),m=l-f.offset;return w.set(f.data.subarray(f.offset,l),b),f.offset+=m,m}return function(w,b){let j=new Z;if(t(j,new f(w)),b){let f=b.customDictionary;f&&function(f,w){if(1!=f.j)throw"State MUST be freshly initialized";if(0==f.Vf&&(f.Tf=new Array(16),f.df=new Int32Array(16),f.tf=-1),15==f.Vf)throw"Too many dictionary chunks";f.Tf[f.Vf]=w,f.Vf++,f.vf+=w.length,f.df[f.Vf]=f.vf}(j,f)}let l=0,m=[];for(;;){let f=new Int8Array(16384);if(m.push(f),j.nf=f,j.gf=0,j.lf=16384,j.mf=0,D(j),l+=j.mf,j.mf<16384)break}!function(f){if(0==f.j)throw"State MUST be initialized";11!=f.j&&(f.j=11,null!=f.input&&(f.input,f.input=null))}(j);let p=new Int8Array(l),q=0;for(let f=0;f<m.length;++f){let w=m[f],b=ff(l,q+16384)-q;b<16384?p.set(w.subarray(0,b),q):p.set(w,q),q+=b}return p}})();
-
- - - -
- -
- - - - -
- - -
- - -
-
- - - - -
- - - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/favicon.ico b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/favicon.ico deleted file mode 100644 index 63e859b4..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/favicon.ico and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/en-US.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/en-US.json deleted file mode 100644 index 55f08fc8..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/en-US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$Text": "English", - "Dashboard": "Dashboard", - "eCommerce": "eCommerce", - "Analytics": "Analytics", - "Apps": "Apps", - "Shop": "Shop", - "Details": "Details", - "Order": "Order", - "Todo": "Todo", - "Invoice": "Invoice", - "List": "List", - "Preview": "Preview", - "Edit": "Edit", - "Add": "Add", - "User": "User", - "View": "View", - "Pages": "Pages", - "Auth": "Auth", - "Login v1": "Login v1", - "Login v2": "Login v2", - "Not Authorized": "Not Authorized", - "Register v1": "Register v1", - "Register v2": "Register v2", - "Forgot Password v1": "Forgot Password v1", - "Forgot Password v2": "Forgot Password v2", - "Reset Password v1": "Reset Password v1", - "Reset Password v2": "Reset Password v2", - "Others": "Others", - "Account Settings": "Account Settings", - "Favorite": "Favorite" -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/languageConfig.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/languageConfig.json deleted file mode 100644 index bbb1d45d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/languageConfig.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "zh-CN", - "en-US" -] - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/zh-CN.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/zh-CN.json deleted file mode 100644 index 893ec8dd..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$DefaultLanguage": "true", - "$Text": "中文简体", - "Dashboard": "仪表盘", - "eCommerce": "电子商务", - "Analytics": "分析", - "Apps": "应用", - "Shop": "购物", - "Details": "商品详情", - "Order": "订单", - "Todo": "工作事项", - "Invoice": "发票 ", - "List": "列表", - "Preview": "预览 ", - "Edit": "编辑", - "Add": "新建", - "User": "用户", - "View": "展示", - "Pages": "页面", - "Auth": "认证 ", - "Login v1": "登录版本1", - "Login v2": "登录版本2", - "Not Authorized": "没有授权", - "Register v1": "注册版本1", - "Register v2": "注册版本2", - "Forgot Password v1": "忘记密码版本1", - "Forgot Password v2": "忘记密码版本2", - "Reset Password v1": "重置密码版本1", - "Reset Password v2": "重置密码版本2", - "Others": "其他", - "Account Settings": "账户设置", - "Favorite": "收藏" -} diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/index.html b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/index.html deleted file mode 100644 index 87ed1002..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/index.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - Masa.Alert.Web.Admin - - - - - - - - - - - - - -
- - -
- -
- An unhandled error has occurred. - Reload - 🗙 -
- - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json deleted file mode 100644 index 1829e716..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json +++ /dev/null @@ -1,203 +0,0 @@ -[ - { - "Id": 1, - "Title": "Dashboard", - "Icon": "mdi-trending-up", - "Children": [ - { - "Id": 2, - "Title": "eCommerce", - "Icon": "mdi-circle", - "Href": "dashboard/ecommerce" - }, - { - "Id": 3, - "Hide": true, - "Title": "Analytics", - "Icon": "mdi-circle", - "Href": "dashboard/analytics" - } - ] - }, - { - "Id": 4, - "Title": "eCommerce", - "Icon": "mdi-cart-outline", - "Children": [ - { - "Id": 5, - "Title": "Shop", - "Icon": "mdi-circle", - "Href": "app/ecommerce/shop" - }, - { - "Id": 6, - "Title": "Details", - "Icon": "mdi-circle", - "Href": "app/ecommerce/details" - }, - { - "Id": 7, - "Title": "Order", - "Icon": "mdi-circle", - "Href": "app/ecommerce/order" - } - ] - }, - { - "Id": 8, - "Title": "Todo", - "Icon": "mdi-calendar-check-outline", - "Href": "app/todo" - }, - { - "Id": 9, - "Title": "Invoice", - "Icon": "mdi-content-paste", - "Hide": true, - "Children": [ - { - "Id": 10, - "Title": "List", - "Icon": "mdi-circle", - "Href": "app/invoice/list" - }, - { - "Id": 11, - "Title": "Preview", - "Icon": "mdi-circle", - "Href": "app/invoice/preview" - }, - { - "Id": 12, - "Title": "Edit", - "Icon": "mdi-circle", - "Href": "app/invoice/edit" - }, - { - "Id": 13, - "Title": "Add", - "Icon": "mdi-circle", - "Href": "app/invoice/add" - } - ] - }, - { - "Id": 14, - "Title": "User", - "Icon": "mdi-account-outline", - "Children": [ - { - "Id": 15, - "Title": "List", - "Icon": "mdi-circle", - "Href": "app/user/list" - }, - { - "Id": 16, - "Title": "View", - "Icon": "mdi-circle", - "Href": "app/user/view" - }, - { - "Id": 17, - "Title": "Edit", - "Icon": "mdi-circle", - "Href": "app/user/edit" - } - ] - }, - { - "Id": 18, - "Title": "Auth", - "Icon": "mdi-file-outline", - "Children": [ - { - "Id": 19, - "Title": "Login v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/login-v1" - }, - { - "Id": 20, - "Title": "Login v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/login-v2" - }, - { - "Id": 21, - "Hide": true, - "Title": "Register v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/register-v1" - }, - { - "Id": 22, - "Hide": true, - "Title": "Register v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/register-v2" - }, - { - "Id": 23, - "Hide": true, - "Title": "Forgot Password v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/forgot-password-v1" - }, - { - "Id": 24, - "Hide": true, - "Title": "Forgot Password v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/forgot-password-v2" - }, - { - "Id": 25, - "Hide": true, - "Title": "Reset Password v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/reset-password-v1" - }, - { - "Id": 26, - "Hide": true, - "Title": "Reset Password v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/reset-password-v2" - } - ] - }, - { - "Id": 27, - "Title": "Others", - "Icon": "mdi-dots-horizontal", - "Children": [ - { - "Id": 28, - "Hide": true, - "Title": "Account Settings", - "Icon": "mdi-circle", - "Href": "pages/others/account-settings" - }, - { - "Id": 29, - "Title": "500", - "Icon": "mdi-circle", - "Href": "pages/others/500" - }, - { - "Id": 30, - "Title": "401", - "Icon": "mdi-circle", - "Href": "pages/others/401" - }, - { - "Id": 31, - "Title": "404", - "Icon": "mdi-circle", - "Href": "pages/others/404" - } - ] - } -] diff --git a/src/Web/Masa.Alert.Web.Admin/App.razor b/src/Web/Masa.Alert.Web.Admin/App.razor deleted file mode 100644 index adfa6b59..00000000 --- a/src/Web/Masa.Alert.Web.Admin/App.razor +++ /dev/null @@ -1,29 +0,0 @@ -@inject TokenProvider TokenProvider - - - - - - - - - - - - - - - -@code { - [Parameter] - public TokenProvider InitialState { get; set; } = null!; - - protected override Task OnInitializedAsync() - { - TokenProvider.AccessToken = InitialState.AccessToken; - TokenProvider.RefreshToken = InitialState.RefreshToken; - TokenProvider.IdToken = InitialState.IdToken; - return base.OnInitializedAsync(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor b/src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor deleted file mode 100644 index cfee7ab0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor +++ /dev/null @@ -1,50 +0,0 @@ -@using Masa.Blazor.Extensions -@inject IJSRuntime jsRuntime -
- @HeaderContent -
- @AutoHeightContent -
- @FooterContent -
- - -@code { - [Parameter] - public RenderFragment? HeaderContent { get; set; } - - [Parameter] - public RenderFragment? AutoHeightContent { get; set; } - - [Parameter] - public RenderFragment? FooterContent { get; set; } - - [Parameter] - public string AutoClass { get; set; } = ""; - - [Parameter] - public string Class { get; set; } = ""; - - [Parameter] - public bool Overflow { get; set; } - - private ElementReference divRef; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - await base.OnAfterRenderAsync(firstRender); - - if (firstRender) - { - await ScrollToTop(); - } - } - - private async Task ScrollToTop() - { - if (Overflow) - { - await jsRuntime.ScrollTo(divRef, 0); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor deleted file mode 100644 index 33c387d2..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor +++ /dev/null @@ -1,9 +0,0 @@ -@ChildContent - -@code { - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Class { get; set; } = ""; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs b/src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs deleted file mode 100644 index 14cbe1b6..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class DefaultSheetDialog : SSheetDialog -{ - protected override void OnParametersSet() - { - base.OnParametersSet(); - ContentClass ??= ""; - if (ContentClass.Contains("sheetDialogPadding") is false) - ContentClass += " sheetDialogPadding"; - } - - protected override void BuildRenderTree(RenderTreeBuilder builder) - { - if (Value) - { - builder.OpenElement(0, "div"); - builder.SetKey(Value); - base.BuildRenderTree(builder); - builder.CloseElement(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs b/src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs deleted file mode 100644 index 00d50507..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class DefaultSimpleSelect : SSimpleSelect -{ - [EditorRequired] - [Parameter] - public List> Items { get; set; } = new(); - - public override async Task SetParametersAsync(ParameterView parameters) - { - await base.SetParametersAsync(parameters); - ValueTexts = Items.Select(x => (x.Value, x.Text)).ToList(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor deleted file mode 100644 index e9b75657..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor +++ /dev/null @@ -1,11 +0,0 @@ -
- @ChildContent -
- -@code{ - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Class { get; set; } = "mt-9 mb-6"; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor deleted file mode 100644 index 1cee8df4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor +++ /dev/null @@ -1,11 +0,0 @@ -
- @ChildContent -
- -@code{ - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Class { get; set; } = "mt-9 mb-6"; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor deleted file mode 100644 index 8051f3b1..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor +++ /dev/null @@ -1,9 +0,0 @@ -mdi-help-circle-outline - -@code { - [Parameter] - public string Tooltip { get; set; } - - [Parameter] - public string Class { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor b/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor deleted file mode 100644 index 875ec70b..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor +++ /dev/null @@ -1,7 +0,0 @@ -@inherits AdminCompontentBase - - - - @(Value ? T("Enabled") : T("Disabled")) - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs b/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs deleted file mode 100644 index 69aed621..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public partial class EnableSwitch -{ - [Parameter] - public bool Value { get; set; } - - [Parameter] - public EventCallback ValueChanged { get; set; } -} - diff --git a/src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor b/src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor deleted file mode 100644 index 3d60d505..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor +++ /dev/null @@ -1,32 +0,0 @@ -@if (Value is DateTime dateTime) -{ - -} -else if (Value is DateTimeOffset dateTimeOffset) -{ - -} -else -{ - if(Width != null) - { -
- @Value -
- } - else - { -
@Value
- } -} - -@code { - [Parameter] - public object? Value { get; set; } - - [Parameter] - public StringNumber? Width { get; set; } - - [Inject] - public JsInitVariables JsInitVariables { get; set; } = default!; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor b/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor deleted file mode 100644 index 3fc79c5d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor +++ /dev/null @@ -1,28 +0,0 @@ -@inherits AdminCompontentBase -

-
-@code {
-    [Parameter]
-    public string Value { get; set; } = default!;
-
-    [Parameter]
-    public bool Overflow { get; set; }
-
-    protected override async Task OnAfterRenderAsync(bool firstRender)
-    {
-        if (firstRender)
-        {
-            await JsonFormat();
-        }
-    }
-
-    protected override async Task OnParametersSetAsync()
-    {
-        await JsonFormat();
-    }
-
-    private async Task JsonFormat()
-    {
-        await Js.InvokeVoidAsync("util.jsonFormat", Ref, Value);
-    }
-}
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css b/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css
deleted file mode 100644
index 987426f9..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.json-pre {
-    padding: 5px;
-    color: #A3AED0 !important;
-}
-
-    .json-pre ::deep .string {
-        color: green;
-    }
-
-    .json-pre ::deep .number {
-        color: darkorange;
-    }
-
-    .json-pre ::deep .boolean {
-        color: blue;
-    }
-
-    .json-pre ::deep .null {
-        color: #A3AED0;
-    }
-
-    .json-pre ::deep .key {
-        color: #F178B6;
-    }
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor b/src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor
deleted file mode 100644
index 1f2e7cc3..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor
+++ /dev/null
@@ -1,12 +0,0 @@
-@inherits AdminCompontentBase
-
-    
-        @Value?.ToString(T("$DateFormat"))
-        @Value?.ToString(T("$TimeFormat"))
-    
-
-
-@code {
-    [Parameter]
-    public DateTimeOffset? Value { get; set; }
-}
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor b/src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor
deleted file mode 100644
index ffc6c344..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor
+++ /dev/null
@@ -1,22 +0,0 @@
-
-    
-        
-            mdi-help-circle-outline
-        
-    
-    
-        @((MarkupString)Tooltip)
-    
-
-
-@code {
-    [Parameter]
-    public string Tooltip { get; set; }
-
-    [Parameter]
-    public string Class { get; set; }
-}
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor
deleted file mode 100644
index ff2dbfd3..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor
+++ /dev/null
@@ -1,200 +0,0 @@
-@inherits AdminCompontentBase
-
- @AlarmHistory.AlarmRule.ProjectIdentity - - - - -
-
- @AlarmHistory.AlarmRule.AppIdentity - - @AlarmHistory.AlarmRule.DisplayName @(!string.IsNullOrEmpty(AlarmHistory.AlarmRule.ChartYAxisUnit) ? $"({AlarmHistory.AlarmRule.ChartYAxisUnit})" : "") - -
-
- - -
- -@code { - [Parameter] - public StringNumber Width { get; set; } = 761; - - [Parameter] - public StringNumber Height { get; set; } = 219; - - [EditorRequired] - [Parameter] - public AlarmHistoryViewModel AlarmHistory { get; set; } = new(); - - [Parameter] - public EventCallback OnClick { get; set; } - - protected override string? PageName { get; set; } = "AlarmChartBlock"; - - private AlarmHistoryViewModel _alarmHistory = new(); - - private DateTimeOffset? _startTime = null; - - private DateTimeOffset? _endTime = null; - - private object _option = new(); - - private MECharts? _chart = null; - - private List _alarmRuleRecords = new(); - - AlarmRuleRecordService AlarmRuleRecordService => AlertCaller.AlarmRuleRecordService; - - protected override async Task OnParametersSetAsync() - { - if (_alarmHistory != AlarmHistory) - { - _alarmHistory = AlarmHistory; - _startTime = null; - _endTime = null; - await LoadData(); - } - } - - Task OnDateTimeUpdateAsync((DateTimeOffset?, DateTimeOffset?) args) - { - (_startTime, _endTime) = args; - return LoadData(); - } - - private async Task LoadData() - { - var queryParam = new GetAlarmRuleRecordInputDto(500) - { - AlarmHistoryId = AlarmHistory.Id, - StartTime = _startTime?.UtcDateTime, - EndTime = _endTime?.UtcDateTime, - IsTrigger = true - }; - - var dtos = (await AlarmRuleRecordService.GetListAsync(queryParam)); - - var paginatedList = dtos?.Adapt>() ?? new(); - var records = paginatedList.Result; - - var legendData = new List(); - - foreach (var item in records) - { - foreach (var key in item.AggregateResult.Keys) - { - if (!legendData.Contains(key)) - { - legendData.Add(key); - } - } - } - - var seriesData = legendData.Select((key, i) => - { - var data = records.Select(x => - { - var val = x.AggregateResult.FirstOrDefault(x => x.Key == key).Value; - return new List { x.ExcuteTime.ToUnixTimeMilliseconds(), val, x.Id }; - }); - - return new - { - Name = key, - Type = "line", - Stack = "Total", - Data = data, - LineStyle = ChartHelper.GetLineStyle(i), - AreaStyle = ChartHelper.GetAreaStyle(i), - Smooth = true - }; - }); - - RenderCharts(legendData, seriesData); - - _alarmRuleRecords = records ?? new(); - } - - private void RenderCharts(List legendData, object seriesData) - { - _option = new - { - Tooltip = new - { - Trigger = "axis", - }, - Legend = new - { - Bottom = "0%", - Icon = "roundRect", - Data = legendData - }, - Grid = new - { - Left = 0, - Right = 10, - Top = 40, - Bottom = 30, - ContainLabel = true - }, - Color = ChartHelper.Colors, - XAxis = new - { - Type = "time", - BoundaryGap = false, - AxisLine = new - { - LineStyle = new - { - Color = "#FF5252" - } - }, - AxisLabel = new - { - Color = "#A3AED0", - Formatter = new - { - Year = "{yyyy}", - Month = "{MMM}", - Day = "{d}", - Hour = "{HH}:{mm}", - Minute = "{HH}:{mm}", - Second = "{HH}:{mm}:{ss}" - } - }, - AxisTick = new - { - Show = false - }, - SplitNumber = 4, - MinInterval = 20 * 1000,//Minimum accuracy of x-axis in one minute - }, - YAxis = new - { - Type = "value", - SplitLine = new - { - Show = true, - LineStyle = new - { - Type = "dashed" - } - } - }, - Series = seriesData - }; - } - - private async Task HandleOnClick(EChartsEventArgs args) - { - var recordId = Guid.Parse(args.Value[2].ToString()); - var record = _alarmRuleRecords.FirstOrDefault(x => x.Id == recordId); - - if (record != null && OnClick.HasDelegate) - { - await OnClick.InvokeAsync(record); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor deleted file mode 100644 index b4e0a2f3..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor +++ /dev/null @@ -1,31 +0,0 @@ -@switch (Value) -{ - case AlarmHistoryHandleStatuses.Pending: - - mdi-timer-outline - - break; - case AlarmHistoryHandleStatuses.InProcess: - - mdi-chart-donut - - break; - case AlarmHistoryHandleStatuses.ProcessingCompleted: - - mdi-check - - break; - case AlarmHistoryHandleStatuses.Notified: - - mdi-message-text - - break; -} - -@code { - [Parameter] - public AlarmHistoryHandleStatuses Value { get; set; } - - [Parameter] - public StringNumber? Size { get; set; } = 16; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor deleted file mode 100644 index 27cdad28..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor +++ /dev/null @@ -1,24 +0,0 @@ -@inherits AdminCompontentBase -@T(Value.ToString()) -@code { - [Parameter] - public AlarmHistoryHandleStatuses Value { get; set; } - - protected override void OnParametersSet() - { - switch (Value) - { - case AlarmHistoryHandleStatuses.Pending: - Class = "warning--text warning-lighten"; - break; - case AlarmHistoryHandleStatuses.InProcess: - Class = "yellow-clicked--text yellow-lighten"; - break; - case AlarmHistoryHandleStatuses.ProcessingCompleted: - Class = "green--text green-lighten"; - break; - default: - break; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor deleted file mode 100644 index 28e81f4a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor +++ /dev/null @@ -1,241 +0,0 @@ -@inherits AdminCompontentBase -
- - -
-

@T("ChartPreviewTips")

-

@T("YAxisUnits"):@ChartYAxisUnit

-
-
-
- - -
- -@code { - [Parameter] - public StringNumber Width { get; set; } = 761; - - [Parameter] - public StringNumber Height { get; set; } = 223; - - [EditorRequired] - [Parameter] - public AlarmRuleUpsertViewModel AlarmRule { get; set; } = new(); - - [Parameter] - public string ChartYAxisUnit { get; set; } = string.Empty; - - protected override string? PageName { get; set; } = "AlarmChartBlock"; - - private DateTimeOffset? _startTime; - - private DateTimeOffset? _endTime; - - private object _option = new(); - - protected override void OnParametersSet() - { - _startTime = null; - _endTime = null; - - FillData(); - } - - private void RenderCharts(List legendData, object seriesData) - { - _option = new - { - Tooltip = new - { - Trigger = "axis", - }, - Legend = new - { - Bottom = "0%", - Icon = "roundRect", - Data = legendData - }, - Grid = new - { - Left = 0, - Right = 10, - Top = 40, - Bottom = 30, - ContainLabel = true - }, - Color = ChartHelper.Colors, - XAxis = new - { - Type = "time", - BoundaryGap = false, - AxisLine = new - { - LineStyle = new - { - Color = "#E4E8F3" - } - }, - AxisLabel = new - { - Color = "#A3AED0" - }, - AxisTick = new - { - Show = false - } - }, - YAxis = new - { - Type = "value", - SplitLine = new - { - Show = true, - LineStyle = new - { - Type = "dashed" - } - } - }, - Series = seriesData - }; - } - - private void FillData() - { - var timeList = new List(); - var chartData = new List(); - - if (AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - timeList = GetTimeListByFixedInterval(); - } - - if (AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - timeList = GetTimeListByCron(); - } - Random a = new Random(); - - if (AlarmRule.Type == AlarmRuleTypes.Log) - { - foreach (var item in AlarmRule.LogMonitorItems) - { - var data = timeList.Select(x => new List { x, a.Next(100) }).ToList()!; - chartData.Add(new AlarmPreviewChartDataItemModel - { - Name = item.Alias, - Data = data - }); - } - } - - if (AlarmRule.Type == AlarmRuleTypes.Metric) - { - foreach (var item in AlarmRule.MetricMonitorItems) - { - var data = timeList.Select(x => new List { x, a.Next(100) }).ToList()!; - chartData.Add(new AlarmPreviewChartDataItemModel - { - Name = item.Alias, - Data = data - }); - } - } - - var legendData = chartData.Select(x => x.Name).ToList(); - - var seriesData = chartData.Select((x, i) => new - { - Name = x.Name, - Type = "line", - Stack = "Total", - Data = x.Data, - LineStyle = ChartHelper.GetLineStyle(i), - AreaStyle = ChartHelper.GetAreaStyle(i), - Smooth = true - }); - RenderCharts(legendData, seriesData); - } - - private List GetTimeListByFixedInterval(int count = 10) - { - var timeList = new List(); - var time = _startTime ?? DateTimeOffset.UtcNow; - - var i = 0; - while (CheckIsAddTime(time, i)) - { - timeList.Add(time.ToUnixTimeMilliseconds()); - - var intervalTime = AlarmRule.CheckFrequency.FixedInterval.GetIntervalTime(); - - if (intervalTime.HasValue) - { - time = time.Add(intervalTime.Value); - } - - i++; - } - return timeList; - } - - private List GetTimeListByCron(int count = 10) - { - var timeList = new List(); - - if (!CronExpression.IsValidExpression(AlarmRule.CheckFrequency.CronExpression)) - { - return timeList; - } - - var cronExpression = new CronExpression(AlarmRule.CheckFrequency.CronExpression); - - var timezone = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(p => p.BaseUtcOffset == JsInitVariables.TimezoneOffset); - - if (timezone != null) - cronExpression.TimeZone = timezone; - var time = _startTime ?? DateTimeOffset.UtcNow; - var i = 0; - while (CheckIsAddTime(time, i)) - { - timeList.Add(time.ToUnixTimeMilliseconds()); - - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(time); - if (nextExcuteTime.HasValue) - { - time = nextExcuteTime.Value; - } - - i++; - } - - return timeList; - } - - private void TimeRangeChange((DateTimeOffset?, DateTimeOffset?) args) - { - (_startTime, _endTime) = args; - FillData(); - } - - private bool CheckIsAddTime(DateTimeOffset time, int i) - { - if (i > 300) - { - return false; - } - - if (_endTime.HasValue && time <= _endTime) - { - return true; - } - - if (!_endTime.HasValue && i < 10) - { - return true; - } - - return false; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor deleted file mode 100644 index 69d91c48..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor +++ /dev/null @@ -1,64 +0,0 @@ -@inherits AdminCompontentBase - - - @if (AlarmRule.Type == AlarmRuleTypes.Log) - { - - @T("LogSamplingPreview") - - - - } - - -@code { - [Parameter] - public StringNumber Width { get; set; } = 770; - - [EditorRequired] - [Parameter] - public AlarmRuleUpsertViewModel AlarmRule { get; set; } = new(); - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - private AlarmRuleUpsertViewModel _alarmRule = new(); - - protected override string? PageName { get; set; } = "AlarmChartBlock"; - - private bool _visible = false; - - private LogDto _log = new(); - private string _logStr = string.Empty; - - public async Task OpenModalAsync() - { - _alarmRule = AlarmRule; - await GetLatestAsync(); - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - public async Task GetLatestAsync() - { - var request = new LogLatestRequest - { - Start = DateTime.Now.AddDays(-20), - End = DateTime.Now, - IsDesc = true - }; - - try - { - var log = await TscClient.LogService.GetLatestAsync(request); - _logStr = JsonSerializer.Serialize(log); - } - catch (Exception) - { - _logStr = "{}"; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor deleted file mode 100644 index aa66892d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor +++ /dev/null @@ -1,34 +0,0 @@ -@inherits AdminCompontentBase -
-
- @T(Value.ToString()) -
- -@code { - [Parameter] - public AlertSeverity Value { get; set; } - - protected override void OnParametersSet() - { - switch (Value) - { - case AlertSeverity.Serious: - Class = "warning-clicked"; - break; - case AlertSeverity.High: - Class = "warning"; - break; - case AlertSeverity.Secondary: - Class = "remind"; - break; - case AlertSeverity.Low: - Class = "yellow"; - break; - case AlertSeverity.Report: - Class = "yellow-clicked"; - break; - default: - break; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs deleted file mode 100644 index 8e46c0e6..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components.Modules.Alarm; - -public class ChartHelper -{ - public static List Colors = new List { "#4318FF", "#FF5252", "#FFB547", "#05CD99", "#00B42A", "#FF7D00", "#37A7FF" }; - - public static object? GetLineStyle(int i) - { - return new - { - Color = i < Colors.Count ? Colors[i] : null, - Width = 3 - }; - } - - public static object? GetAreaStyle(int i) - { - return new - { - Color = new - { - ColorStops = GetColorStops(i), - Global = false, - Type = "linear", - X = 0, - X2 = 0, - Y = 0, - Y2 = 1 - } - }; - } - - public static object? GetColorStops(int i) - { - var index = i % Colors.Count; - return index switch - { - 0 => new[] { new { Offset = 0, Color = "#ECE8FF" }, new { Offset = 1, Color = "rgba(236, 232, 255, 0)" } }, - 1 => new[] { new { Offset = 0, Color = "#FDCDC5" }, new { Offset = 1, Color = "rgba(255, 236, 232, 0)" } }, - 2 => new[] { new { Offset = 0, Color = "#FFB547" }, new { Offset = 1, Color = "#FFF8ED" } }, - 3 => new[] { new { Offset = 0, Color = "#05CD99" }, new { Offset = 1, Color = "#E6FAF5" } }, - 4 => new[] { new { Offset = 0, Color = "#00B42A" }, new { Offset = 1, Color = "#7A8499" } }, - 5 => new[] { new { Offset = 0, Color = "#FF7D00" }, new { Offset = 1, Color = "#FFF7E8" } }, - 6 => new[] { new { Offset = 0, Color = "#37A7FF" }, new { Offset = 1, Color = "#EBF6FF" } }, - _ => null - }; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs deleted file mode 100644 index d5b27d24..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components.Modules.Alarm.Model; - -public class AlarmPreviewChartDataItemModel -{ - public string Name { get; set; } = string.Empty; - - public List> Data { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor deleted file mode 100644 index d1abe782..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor +++ /dev/null @@ -1,147 +0,0 @@ -@inherits AdminCompontentBase - - -
- - - @if (!string.IsNullOrEmpty(PrependText)) - { - @PrependText - } - - -
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - -@code { - [Parameter] - public NotificationConfigViewModel Value { get; set; } = new(); - - [Parameter] - public string PrependText { get; set; } = string.Empty; - - [Parameter] - public string ItemClass { get; set; } = string.Empty; - - [Parameter] - public string ItemBackgroundColor { get; set; } = string.Empty; - - private List _items = new(); - - [Inject] - public IMcClient McClient { get; set; } = default!; - - private List _channelItems = new(); - private List _templateItems = new(); - private Guid TemplateId = default; - private bool _visible = false; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - private async Task LoadData() - { - await HandleChannelTypeChangeAsync(); - await HandleChannelChangeAsync(); - } - - private async Task HandleChannelTypeChangeAsync() - { - var input = new GetChannelModel() - { - Page = 1, - PageSize = 99, - Type = (ChannelTypes)Value.ChannelType - }; - - _channelItems = Value.ChannelType > 0 ? (await McClient.ChannelService.GetListAsync(input)).Result : new(); - } - - private async Task HandleChannelChangeAsync() - { - var channelId = _channelItems.FirstOrDefault(x => x.Code == Value.ChannelCode)?.Id; - - if (channelId == null) return; - - var input = new GetMessageTemplateModel - { - Page = 1, - PageSize = 99, - AuditStatus = MessageTemplateAuditStatuses.Approved, - ChannelId = channelId.Value - }; - - _templateItems = (await McClient.MessageTemplateService.GetListAsync(input)).Result; - } - - private void HandleTemplateSelectedAsync(MessageTemplateModel item) - { - Value.TemplateCode = item.Code; - Value.TemplateName = item.DisplayName; - } - - private async Task HandleTemplateClick() - { - await LoadData(); - - _visible = true; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor deleted file mode 100644 index 9d8d6ce2..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor +++ /dev/null @@ -1,36 +0,0 @@ -@inherits AdminCompontentBase - - - - - @if (!string.IsNullOrEmpty(data.Item.Avatar)) - { - - - - } - - @data.Item.DisplayName - - - - - @RenderFragments.UserSelectItem(data.Item.Avatar, data.Item.DisplayName, data.Item.PhoneNumber, data.Item.Account, data.Item.Email) - - diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs deleted file mode 100644 index 599c2c80..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components.Modules.Subjects; - -public partial class UserAutoComplete : AdminCompontentBase -{ - [Inject] - public IAuthClient AuthClient { get; set; } = default!; - - [Parameter] - public List Value { get; set; } = new(); - - [Parameter] - public EventCallback> ValueChanged { get; set; } - - [Parameter] - public string Label { get; set; } = ""; - - [Parameter] - public bool Readonly { get; set; } - - [Parameter] - public int Page { get; set; } = 1; - - [Parameter] - public int PageSize { get; set; } = 10; - - bool _loading; - - protected List Users { get; set; } = new(); - - public string Search { get; set; } = ""; - - protected override async Task OnParametersSetAsync() - { - if (!Users.Any()) - { - await InitUsers(); - } - - base.OnParametersSet(); - } - - private async Task InitUsers() - { - var list = await AuthClient.UserService.GetListByIdsAsync(Value.ToArray()); - Users = list.Select(x => new UserSelectModel(x.Id, x.Name ?? string.Empty, x.DisplayName, x.Account, x.PhoneNumber ?? string.Empty, x.Email ?? string.Empty, x.Avatar)).ToList(); - StateHasChanged(); - } - - private async Task Remove(UserSelectModel staff) - { - if (Readonly is false) - { - var value = new List(); - value.AddRange(Value); - value.Remove(staff.Id); - await ValueChanged.InvokeAsync(value); - } - } - - private bool FilterItem(UserSelectModel item, string queryText, string itemText) - { - return item.DisplayName.Contains(queryText); - } - - private async Task QuerySelection(string search) - { - search = search.TrimStart(' ').TrimEnd(' '); - Search = search; - await Task.Delay(300); - if (search != Search) - { - return; - } - - _loading = true; - var response = await AuthClient.UserService.SearchAsync(search); - var users = response; - var seletedItems = Users.Where(x => Value.Contains(x.Id)).ToList(); - Users = seletedItems.UnionBy(users, user => user.Id).ToList(); - _loading = false; - } - - public string TextView(UserSelectModel user) - { - if (!string.IsNullOrEmpty(user.DisplayName)) return user.DisplayName; - if (!string.IsNullOrEmpty(user.Name)) return user.Name; - if (!string.IsNullOrEmpty(user.PhoneNumber)) return user.PhoneNumber; - return ""; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor deleted file mode 100644 index b582d6ce..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor +++ /dev/null @@ -1,70 +0,0 @@ -@inherits AdminCompontentBase - - - - - -@code { - [Parameter] - public Guid Value { get; set; } - - [Parameter] - public EventCallback ValueChanged { get; set; } - - [Parameter] - public string Label { get; set; } = ""; - - [Parameter] - public bool Readonly { get; set; } - - [Parameter] - public int PageSize { get; set; } = 10; - - [Parameter] - public bool Solo { get; set; } = true; - - bool _loading; - - protected List WebHooks { get; set; } = new(); - - public string Search { get; set; } = ""; - - WebHookService WebHookService => AlertCaller.WebHookService; - - private async Task QuerySelection(string search) - { - search = search.TrimStart(' ').TrimEnd(' '); - Search = search; - await Task.Delay(300); - if (search != Search) - { - return; - } - - _loading = true; - - var dtos = await WebHookService.GetListAsync(new GetWebHookInputDto(PageSize) - { - Filter = search - }); - WebHooks = dtos.Result; - - _loading = false; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs b/src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs deleted file mode 100644 index ec638ed7..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class OutlinedSearchTextField : MTextField -{ - [Inject] - public I18n? I18n { get; set; } - - public override async Task SetParametersAsync(ParameterView parameters) - { - Flat = true; - Dense = true; - Solo = true; - HideDetails = "auto"; - BackgroundColor = "#F0F3FA"; - Placeholder = I18n!.T("Search"); - PrependInnerContent = builder => - { - builder.OpenComponent(0); - builder.AddAttribute(1, "Size", (StringNumber)16); - builder.AddAttribute(2, "Class", "mr-2 emphasis2--text"); - builder.AddAttribute(3, "ChildContent", (RenderFragment)delegate (RenderTreeBuilder builder2) { - builder2.AddContent(4, IconConstants.Search); - }); - builder.CloseComponent(); - }; - - await base.SetParametersAsync(parameters); - } - - protected override void OnParametersSet() - { - base.OnParametersSet(); - Class ??= ""; - if (Class.Contains("rounded-2 search") is false) - Class += " rounded-2 search"; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs b/src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs deleted file mode 100644 index 301c084f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class SearchTextField : STextField -{ - [Parameter] - public bool FillBackground { get; set; } = true; - - public override async Task SetParametersAsync(ParameterView parameters) - { - Flat = true; - Solo = true; - Small = true; - BackgroundColor = FillBackground ? "fill-background" : ""; - Style = "max-width:340px;"; - Placeholder = I18n!.T("Search"); - PrependInnerContent = builder => - { - builder.OpenComponent(0); - builder.AddAttribute(1, "Size", (StringNumber)16); - builder.AddAttribute(2, "Class", "mr-2 emphasis2--text"); - builder.AddAttribute(3, "ChildContent", (RenderFragment)delegate (RenderTreeBuilder builder2) { - builder2.AddContent(4, IconConstants.Search); - }); - builder.CloseComponent(); - }; - - await base.SetParametersAsync(parameters); - } - - protected override void OnParametersSet() - { - base.OnParametersSet(); - Class ??= ""; - if (Class.Contains("rounded-2 search") is false) - Class += " rounded-2 search"; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs b/src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs deleted file mode 100644 index e157a457..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class SelectItem -{ - public TValue Value { get; set; } - - public string Text { get; set; } - - public SelectItem(TValue value, string text) - { - Value = value; - Text = text; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs b/src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs deleted file mode 100644 index 6c7ba77f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Global -{ - public class GlobalConfig - { - #region Field - - private bool _Loading; - - #endregion - - #region Property - - public bool Loading - { - get => _Loading; - set - { - if (_Loading != value) - { - _Loading = value; - OnLoadingChanged?.Invoke(_Loading, LoadingText); - } - } - } - - public string LoadingText = string.Empty; - - public bool ThrottleFlag { get; set; } - - #endregion - - - #region event - - public delegate void GlobalConfigChanged(); - public delegate void LoadingChanged(bool loading, string loadingText); - - public event LoadingChanged? OnLoadingChanged; - - #endregion - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs b/src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs deleted file mode 100644 index 7bbb93e4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Microsoft.Extensions.DependencyInjection -{ - public static class ServiceCollectionExtensions - { - public static IServiceCollection AddGlobalForServer(this IServiceCollection services) - { - services.AddScoped(); - return services; - } - - public static IServiceCollection AddGlobalForWasmAsync(this IServiceCollection services, string baseUri) - { - services.AddScoped(); - return services; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj b/src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj deleted file mode 100644 index 9c4307fc..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj +++ /dev/null @@ -1,44 +0,0 @@ - - - - enable - enable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor deleted file mode 100644 index c80abbfd..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor +++ /dev/null @@ -1,131 +0,0 @@ -@inherits AdminCompontentBase -@page "/alarmHistory" -@page "/alarmHistory/{AlarmRuleId}" -@T("AlarmHistory") - - - - - - @foreach (var item in Enum.GetValues()) - { - - @T(item.ToString()) - - } - - - - - - - - - - - - - @if (_queryParam.SearchType == AlarmHistorySearchTypes.Alarming) - { - - - - - } - @if (_queryParam.SearchType == AlarmHistorySearchTypes.Processed) - { - - - - } - - - - - - - - @header.Text - - - @switch (context.Header.Value) - { - case nameof(AlarmHistoryListViewModel.AlertSeverity): - - break; - case nameof(AlarmHistoryListViewModel.HandleStatus): - - break; - case nameof(AlarmHistoryQueryModel.RecoveryTime): - - - @context.Item.Handle.HandlerName @context.Item.RecoveryTime?.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$TimeFormat")) - @context.Item.RecoveryTime?.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$DateFormat")) - - - break; - case "Action": - @if (context.Item.HandleStatus == AlarmHistoryHandleStatuses.Pending && _queryParam.SearchType!= AlarmHistorySearchTypes.NoNotice) - { - - mdi-account-check - - } - else - { - - mdi-eye - - } - break; - default: - - break; - } - - - - - - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs deleted file mode 100644 index 9ad0bf97..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory; - -public partial class AlarmHistoryManagement : AdminCompontentBase -{ - [Parameter] - public string AlarmRuleId { get; set; } = string.Empty; - - private GetAlarmHistoryInputDto _queryParam = new(10); - private PaginatedListDto _entities = new(); - private AlarmHistoryDetailModal? _detailModal; - private HandleAlarmModal? _handleAlarmModal; - private List _timeTypeItems = Enum.GetValues().Where(x => x != AlarmHistorySearchTimeTypes.ProcessingCompletedTime).ToList(); - private List _handleStatusItems = Enum.GetValues().ToList(); - - AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - private SDataTable _dataTableRef; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - protected override async void OnParametersSet() - { - _queryParam.AlarmRuleId = string.IsNullOrEmpty(AlarmRuleId) ? null : Guid.Parse(AlarmRuleId); - - if (_queryParam.AlarmRuleId.HasValue) - { - var alarmRule = await AlarmRuleService.GetAsync(_queryParam.AlarmRuleId.Value); - _queryParam.Filter = alarmRule?.DisplayName ?? string.Empty; - } - else - { - _queryParam.Filter = string.Empty; - } - } - - public List> GetHeaders() - { - List> _headers = new(); - - if (_queryParam.SearchType == AlarmHistorySearchTypes.Alarming) - { - _headers = new() - { - new() { Text = T(nameof(AlarmHistoryListViewModel.AlertSeverity)), Value = nameof(AlarmHistoryListViewModel.AlertSeverity),Sortable=false, Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.DisplayName)), Value = nameof(AlarmHistoryListViewModel.DisplayName),Sortable=false, Width = "9rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.FirstAlarmTime)), Value = nameof(AlarmHistoryListViewModel.FirstAlarmTime), Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.AlarmCount)), Value = nameof(AlarmHistoryListViewModel.AlarmCount), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.LastAlarmTime)), Value = nameof(AlarmHistoryListViewModel.LastAlarmTime), Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.HandleStatus)), Value = nameof(AlarmHistoryListViewModel.HandleStatus), Sortable = false, Width = "11rem"}, - new() { Text = T("Action"), Value = "Action",Sortable=false,Width=105}, - }; - } - else if (_queryParam.SearchType == AlarmHistorySearchTypes.Processed) - { - _headers = new() - { - new() { Text = T(nameof(AlarmHistoryListViewModel.AlertSeverity)), Value = nameof(AlarmHistoryListViewModel.AlertSeverity),Sortable=false, Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.DisplayName)), Value = nameof(AlarmHistoryListViewModel.DisplayName),Sortable=false, Width = "8rem"}, - new() { Text = T("HandleCompletionTime"), Value = nameof(AlarmHistoryQueryModel.RecoveryTime), Width = "10rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.FirstAlarmTime)), Value = nameof(AlarmHistoryListViewModel.FirstAlarmTime), Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.AlarmCount)), Value = nameof(AlarmHistoryListViewModel.AlarmCount), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.LastAlarmTime)), Value = nameof(AlarmHistoryListViewModel.LastAlarmTime), Width = "7rem"}, - new() { Text = T("Action"), Value = "Action",Sortable=false,Width=105}, - }; - } - else - { - _headers = new() - { - new() { Text = T(nameof(AlarmHistoryListViewModel.AlertSeverity)), Value = nameof(AlarmHistoryListViewModel.AlertSeverity),Sortable=false, Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.DisplayName)), Value = nameof(AlarmHistoryListViewModel.DisplayName),Sortable=false, Width = "10rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.FirstAlarmTime)), Value = nameof(AlarmHistoryListViewModel.FirstAlarmTime), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.AlarmCount)), Value = nameof(AlarmHistoryListViewModel.AlarmCount), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.LastAlarmTime)), Value = nameof(AlarmHistoryListViewModel.LastAlarmTime), Width = "6.5625rem"}, - new() { Text = T("Action"), Value = "Action",Sortable=false,Width=105}, - }; - } - return _headers; - } - - private async Task LoadData() - { - Loading = true; - - var queryParam = _queryParam.Adapt() ?? new(); - queryParam.StartTime = queryParam.StartTime?.Add(JsInitVariables.TimezoneOffset); - queryParam.EndTime = queryParam.EndTime?.Add(JsInitVariables.TimezoneOffset); - - var dtos = (await AlarmHistoryService.GetListAsync(queryParam)); - _entities = dtos?.Adapt>() ?? new(); - Loading = false; - StateHasChanged(); - } - - private Task DateRangChangedAsync((DateTimeOffset?, DateTimeOffset?) args) - { - (_queryParam.StartTime, _queryParam.EndTime) = (args.Item1?.UtcDateTime, args.Item2?.UtcDateTime); - return RefreshAsync(); - } - - private async Task RefreshAsync() - { - _queryParam.Page = 1; - await LoadData(); - } - - private async Task HandleClearAsync() - { - _queryParam = new(10); - await LoadData(); - } - - private async Task HandlePageChanged(int page) - { - _queryParam.Page = page; - await LoadData(); - } - - private async Task HandlePageSizeChanged(int pageSize) - { - _queryParam.PageSize = pageSize; - await LoadData(); - } - - private async Task HandleOk() - { - await LoadData(); - } - - private async Task HandleSearchTypeChange() - { - _queryParam = new() { Filter = _queryParam.Filter, SearchType = _queryParam.SearchType, AlarmRuleId = _queryParam.AlarmRuleId, Page = 1 }; - switch (_queryParam.SearchType) - { - case AlarmHistorySearchTypes.Alarming: - _timeTypeItems = Enum.GetValues().Where(x => x != AlarmHistorySearchTimeTypes.ProcessingCompletedTime).ToList(); - _handleStatusItems = new List { AlarmHistoryHandleStatuses.Pending, AlarmHistoryHandleStatuses.InProcess }; - _queryParam.TimeType = default; - - _queryParam.Sorting = $"{nameof(AlarmHistoryQueryModel.AlertSeverity)} asc,{nameof(AlarmHistoryQueryModel.Id)} desc"; - break; - case AlarmHistorySearchTypes.Processed: - _timeTypeItems = Enum.GetValues().ToList(); - _handleStatusItems = Enum.GetValues().ToList(); - _queryParam.TimeType = AlarmHistorySearchTimeTypes.ProcessingCompletedTime; - - _queryParam.Sorting = $"{nameof(AlarmHistoryQueryModel.RecoveryTime)} desc"; - break; - case AlarmHistorySearchTypes.NoNotice: - _timeTypeItems = Enum.GetValues().Where(x => x != AlarmHistorySearchTimeTypes.ProcessingCompletedTime).ToList(); - _handleStatusItems = Enum.GetValues().ToList(); - _queryParam.TimeType = default; - - _queryParam.Sorting = $"{nameof(AlarmHistoryQueryModel.LastAlarmTime)} desc"; - break; - default: - break; - } - - await RefreshAsync(); - } - - private async Task HandleOnOptionsUpdate(DataOptions options) - { - var sortBy = options.SortBy; - var sorting = new StringBuilder(); - - for (int i = 0; i < sortBy.Count; i++) - { - if (i > 0) - { - sorting.AppendLine(","); - } - var sortDesc = options.SortDesc[i] ? "desc" : "asc"; - sorting.AppendLine($"{sortBy[i]} {sortDesc}"); - } - - _queryParam.Sorting = sorting.ToString(); - - await RefreshAsync(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor deleted file mode 100644 index 8ee01442..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor +++ /dev/null @@ -1,125 +0,0 @@ -@inherits AdminCompontentBase - -@T("CheckFrequency") -
- - @if (AlarmHistory.AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - @AlarmHistory.AlarmRule.CheckFrequency.FixedInterval.IntervalTime @T(AlarmHistory.AlarmRule.CheckFrequency.FixedInterval.IntervalTimeType.ToString()) - } - @if (AlarmHistory.AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - @AlarmHistory.AlarmRule.CheckFrequency.CronExpression - } - - @T(AlarmHistory.AlarmRule.CheckFrequency.Type.ToString()) -
-@T("VariableInfo") -@if (AlarmHistory.AlarmRule.Type == AlarmRuleTypes.Log) -{ - @foreach (var item in AlarmHistory.AlarmRule.LogMonitorItems) - { -
-
- @item.Alias -
-
- @item.Field - @T("Count") - @(item.IsOffset ? string.Format(T("OffsetPeriod"), item.OffsetPeriod) : string.Empty) -
-
- } -} -@if (AlarmHistory.AlarmRule.Type == AlarmRuleTypes.Metric) -{ - @foreach (var item in AlarmHistory.AlarmRule.MetricMonitorItems) - { -
- @if (item.IsExpression) - { -
- @item.Expression -
-
- @item.Alias - @(item.IsOffset ? string.Format(T("OffsetPeriod"), item.OffsetPeriod) : string.Empty) -
- } - else - { -
- @item.Alias -
-
- @item.Aggregation.Name - @item.Aggregation.Tag @T(item.Aggregation.ComparisonOperator.ToString()) @item.Aggregation.Value - @T(item.Aggregation.AggregationType.ToString()) - @(item.IsOffset ? string.Format(T("OffsetPeriod"), item.OffsetPeriod) : string.Empty) -
- } -
- } -} -@T("AlarmInfo") -
-
- @T("AlarmTime") -
-
- @AlarmHistory.LastAlarmTime.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$DateTimeFormat")) -
-
-@T("TriggerRules") -@foreach (var item in AlarmHistory.RuleResultItems) -{ -
-
- -
-
-
- - - @T("AlarmNotification") - - - - - @T("RecoveryNotification") - - -
-
-
-
-
- @if (!string.IsNullOrEmpty(item.AlarmRuleItem.Expression)) - { - - } -
-
@T("TriggerRules")
-
-} -@if (HandleStatusShow) -{ -
- @T("HandleDetails") - - @if (!AlarmHistory.HandleStatusCommits.Any(x => x.Status == AlarmHistoryHandleStatuses.ProcessingCompleted)) - { - - @IconConstants.Update - @T("ChangeAlarmHandle") - - } -
- - - - - - - -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs deleted file mode 100644 index 4385937e..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; - -public partial class AlarmHistoryDetail : AdminCompontentBase -{ - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - [Parameter] - public AlarmHistoryViewModel AlarmHistory { get; set; } = new(); - - [Parameter] - public bool HandleStatusShow { get; set; } - - private bool _handleAlarmVisible; - - private HandleAlarm? _handleDetail; - - private AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - private void HandleOnClick(AlarmRuleRecordListViewModel record) - { - AlarmHistory.RuleResultItems = record.RuleResultItems; - AlarmHistory.LastAlarmTime = record.CreationTime.ToLocalTime(); - } - - private void HandleChange() - { - _handleAlarmVisible = true; - } - - private async Task HandleDetailSaveAsync() - { - Check.NotNull(_handleDetail, "form not found"); - - var handleResult = await _handleDetail.Submit(); - - if (!handleResult) - return; - - _handleAlarmVisible = false; - - await GetFormDataAsync(); - } - - private async Task GetFormDataAsync() - { - var alarmHistory = await AlarmHistoryService.GetAsync(AlarmHistory.Id); - AlarmHistory = alarmHistory.Adapt(); - } - - private void HandleAlarmVisibleChanged(bool val) - { - if (!val) - _handleAlarmVisible = false; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor deleted file mode 100644 index 6e203cdd..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor +++ /dev/null @@ -1,21 +0,0 @@ -@inherits AdminCompontentBase - - - - - @T("AlarmDetails") - - - - - - - @if (_entityId != default) - { - - mdi-delete - - } - - diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs deleted file mode 100644 index fb42fe34..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; - -public partial class AlarmHistoryDetailModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private bool _visible; - private Guid _entityId; - private AlarmHistoryViewModel _model = new(); - - AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - public async Task OpenModalAsync(AlarmHistoryListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmHistoryService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - } - - private void HandleCancel() - { - _visible = false; - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmHistory")}"), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmHistoryService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor deleted file mode 100644 index 7145ab38..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor +++ /dev/null @@ -1,97 +0,0 @@ -@inherits AdminCompontentBase - - - - - - - @T("Processed") - - -
-
- - @if (Value.IsHandleNotice) - { - - } -
-
- - - @T("ThirdPartyProcessing") - - -
-
- - -
-
- - @if (Value.IsHandleNotice) - { - - } -
-
-
-
-
- -@code { - [Parameter] - public AlarmHandleViewModel Value { get; set; } = default!; - - [Parameter] - public Guid AlarmRuleId { get; set; } - - private MForm? _form { get; set; } - - private AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - public async Task Submit() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return false; - } - - Loading = true; - - if (!Value.IsThirdParty) - { - Value.WebHookId = default; - } - - var inputDto = Value.Adapt(); - - try - { - await AlarmHistoryService.HandleAsync(AlarmRuleId, inputDto); - } - catch (Exception ex) - { - Loading = false; - await PopupService.EnqueueSnackbarAsync(ex.Message, AlertTypes.Error); - return false; - } - - Loading = false; - - ResetForm(); - - await SuccessMessageAsync(T("OperationSuccessfulMessage")); - - return true; - } - - private void ResetForm() - { - Value = new(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor deleted file mode 100644 index 08ce20fe..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor +++ /dev/null @@ -1,30 +0,0 @@ -@inherits AdminCompontentBase - - - - - - -
- -
-
-
-
- - - - - - - -
-
- - @if (_tab == T("HandleAlarm")) - { - @T("HandleAlarm") - } - -
diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs deleted file mode 100644 index 77794c0a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; - -public partial class HandleAlarmModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private bool _visible; - private Guid _entityId; - private AlarmHistoryViewModel _model = new(); - private AlarmHandleViewModel _handle = new(); - private string _tab = ""; - private HandleAlarm? _handleDetail; - - AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - _tab = T("AlarmDetails"); - } - await base.OnAfterRenderAsync(firstRender); - } - - public async Task OpenModalAsync(AlarmHistoryListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmHistoryService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - _handle = _model.Handle; - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _tab = T("AlarmDetails"); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async void HandleAlarm() - { - Check.NotNull(_handleDetail, "form not found"); - - var handleResult = await _handleDetail.Submit(); - - if (!handleResult) - return; - - _visible = false; - - ResetForm(); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmHistory")}"), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmHistoryService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor deleted file mode 100644 index ac9ee619..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor +++ /dev/null @@ -1,48 +0,0 @@ -@inherits AdminCompontentBase -
- - @foreach (var item in _statusCommits) - { - - -
@T(item.Status.ToString())
-
- - - - -
-
@item.Remarks
-
@item.CreationTime.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$DateTimeFormat"))
-
-
-
- } -
-
- -@code { - [Parameter] - public List StatusCommits { get; set; } = new(); - - private List _statusCommits => StatusCommits.OrderByDescending(x => x.CreationTime).ToList(); - - private string _class = string.Empty; - - private string GetStatusColor(AlarmHistoryHandleStatuses Status) - { - switch (Status) - { - case AlarmHistoryHandleStatuses.Notified: - return "info--text"; - case AlarmHistoryHandleStatuses.ProcessingCompleted: - return "success--text"; - case AlarmHistoryHandleStatuses.InProcess: - return "primary--text"; - case AlarmHistoryHandleStatuses.Pending: - return "remind--text"; - default: - return ""; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css deleted file mode 100644 index b90cd5e5..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css +++ /dev/null @@ -1,19 +0,0 @@ -.status-time-line { - margin-left: -430px; -} - - .status-time-line ::deep .m-timeline-item__dot { - box-shadow: none; - } - - .status-time-line ::deep .m-timeline-item__dot { - background: transparent !important; - } - - .status-time-line ::deep .m-timeline-item__inner-dot { - background-color: transparent !important; - } - - .status-time-line ::deep .m-icon { - background: #ffff !important; - } diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor deleted file mode 100644 index a8d7022c..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor +++ /dev/null @@ -1,126 +0,0 @@ -@inherits AdminCompontentBase -@page "/alarmRules" - -@T("AlarmRule") - - - - - - @foreach (var item in Enum.GetValues()) - { - - @T(item.ToString()) - - } - - - - - - - - - @if (_queryParam.Type == AlarmRuleTypes.Log) - { - - - - - - - - - } - @if (_queryParam.Type == AlarmRuleTypes.Metric) - { - - - - - - - - } - - - - - @if (!_showEmptyPlaceholder) - { - - @foreach (var _entitie in _entities.Result) - { - - - - } - - } - else - { - - } - - -
- @if (!_showEmptyPlaceholder) - { - - } -
-
-
- - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs deleted file mode 100644 index 7173e4e4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmRules; - -public partial class AlarmRuleManagement : AdminCompontentBase -{ - [Inject] - public IAuthClient AuthClient { get; set; } = default!; - - [Inject] - public IPmClient PmClient { get; set; } = default!; - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - private GetAlarmRuleInputDto _queryParam = new(20); - private PaginatedListDto _entities = new(); - private LogAlarmRuleUpsertModal? _logUpsertModal; - private MetricAlarmRuleUpsertModal? _metricUpsertModal; - private List _projects = new(); - private List> _projectItems = new(); - private List> _appsItems = new(); - private List> _metricItems = new(); - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - private bool _showEmptyPlaceholder = false; - - private readonly AsyncTaskQueue _asyncTaskQueue; - - public AlarmRuleManagement() - { - _asyncTaskQueue = new AsyncTaskQueue - { - AutoCancelPreviousTask = true, - UseSingleThread = true - }; - } - - protected async override Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await InitData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - - protected override void OnInitialized() - { - base.OnInitialized(); - MasaGlobalConfig.CurrentTeamId = MasaUser.CurrentTeamId; - MasaGlobalConfig.OnCurrentTeamChanged += OnTeamChanged; - } - - private void OnTeamChanged(Guid teamId) - { - MasaGlobalConfig.CurrentTeamId = teamId; - _ = InvokeAsync(async () => - { - await LoadProjectAppsAsync(); - await LoadData(); - StateHasChanged(); - }); - } - public async Task InitData() - { - await LoadData(); - await LoadProjectAppsAsync(); - _metricItems = (await TscClient.MetricService.GetNamesAsync(null)).Select(x => new SelectItem(x, x)).ToList(); - } - - private async Task LoadProjectAppsAsync() - { - _projects = await PmClient.ProjectService.GetListByTeamIdsAsync(new List { MasaGlobalConfig.CurrentTeamId }, MultiEnvironmentUserContext.Environment!); - _projectItems = _projects.Select(x => new SelectItem(x.Identity, x.Name)).ToList(); - if (!string.IsNullOrEmpty(_queryParam.ProjectIdentity) && !_projects.Exists(project => project.Identity == _queryParam.ProjectIdentity)) - _queryParam.ProjectIdentity = default!; - if (!string.IsNullOrEmpty(_queryParam.AppIdentity) && (string.IsNullOrEmpty(_queryParam.ProjectIdentity) || !_projectItems.Exists(app => app.Value == _queryParam.AppIdentity))) - _queryParam.AppIdentity = default!; - } - - private async Task LoadData() - { - Loading = true; - _showEmptyPlaceholder = false; - var result = await _asyncTaskQueue.ExecuteAsync(async () => - { - var queryParam = _queryParam.Adapt() ?? new(); - queryParam.TeamId = MasaGlobalConfig.CurrentTeamId; - queryParam.StartTime = queryParam.StartTime?.Add(JsInitVariables.TimezoneOffset); - queryParam.EndTime = queryParam.EndTime?.Add(JsInitVariables.TimezoneOffset); - var dtos = (await AlarmRuleService.GetListAsync(queryParam)); - return dtos; - }); - if (result.IsValid) - { - var paginatedListDto = result.result?.Adapt>() ?? new(); - paginatedListDto = await FillNotifier(paginatedListDto); - _entities = paginatedListDto; - Loading = false; - _showEmptyPlaceholder = !_entities.Result.Any(); - StateHasChanged(); - } - } - - private async Task> FillNotifier(PaginatedListDto alarmRules) - { - var userIds = new List(); - - foreach (var rule in alarmRules.Result) - { - foreach (var item in rule.Items) - { - userIds.AddRange(item.NotificationConfig.Receivers); - } - } - - var users = await AuthClient.UserService.GetListByIdsAsync(userIds.Distinct().ToArray()); - - foreach (var rule in alarmRules.Result) - { - foreach (var item in rule.Items) - { - var notifiers = users.Where(x => item.NotificationConfig.Receivers.Contains(x.Id)); - rule.Notifiers.AddRange(notifiers); - } - } - - return alarmRules; - } - - private async Task HandleOk() - { - await LoadData(); - } - - private Task DateRangChangedAsync((DateTimeOffset?, DateTimeOffset?) args) - { - (_queryParam.StartTime, _queryParam.EndTime) = (args.Item1?.UtcDateTime, args.Item2?.UtcDateTime); - return RefreshAsync(); - } - - private async Task RefreshAsync() - { - _queryParam.Page = 1; - await LoadData(); - } - - private async Task HandlePageChanged(int page) - { - _queryParam.Page = page; - await LoadData(); - } - - private async Task HandlePageSizeChanged(int pageSize) - { - _queryParam.PageSize = pageSize; - await LoadData(); - } - - private async Task HandleClearAsync() - { - _queryParam = new(20); - await LoadData(); - } - - private async Task HandleAdd() - { - if (_queryParam.Type == AlarmRuleTypes.Log) - { - await _logUpsertModal?.OpenModalAsync()!; - } - - if (_queryParam.Type == AlarmRuleTypes.Metric) - { - await _metricUpsertModal?.OpenModalAsync()!; - } - } - - private async Task HandleEdit(AlarmRuleListViewModel item) - { - if (item.Type == AlarmRuleTypes.Log) - { - await _logUpsertModal?.OpenModalAsync(item)!; - } - - if (item.Type == AlarmRuleTypes.Metric) - { - await _metricUpsertModal?.OpenModalAsync(item)!; - } - } - - private async Task HandleProjectChange() - { - await RefreshAsync(); - - var projectId = _projects.Find(x => x.Identity == _queryParam.ProjectIdentity)?.Id; - - if (projectId == null) - { - return; - } - - _appsItems = (await PmClient.AppService.GetListByProjectIdsAsync(new List { projectId.Value })).Select(x => new SelectItem(x.Identity, x.Name)).ToList(); - } - - private async Task HandleTypeChange() - { - _queryParam = new(20) - { - Type = _queryParam.Type - }; - - await RefreshAsync(); - } - - protected override ValueTask DisposeAsyncCore() - { - MasaGlobalConfig.OnCurrentTeamChanged -= OnTeamChanged; - return base.DisposeAsyncCore(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor deleted file mode 100644 index 4a620692..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor +++ /dev/null @@ -1,144 +0,0 @@ -@inherits AdminCompontentBase - - - - - @AlarmRule.DisplayName - - - - - - mdi-dots-vertical - - - - - - - - @T("Edit") - - - - - - - @T("AlarmHistory") - - - - @if (AlarmRule.IsEnabled) - { - - - - @T("Disable") - - - - } - @if (!AlarmRule.IsEnabled) - { - - - - @T("Enabled") - - - - } - - - - - - - - -
- @if (AlarmRule.Type == AlarmRuleTypes.Log) - { - - @AlarmRule.ProjectIdentity - - - @AlarmRule.AppIdentity - - } - @if (AlarmRule.Type == AlarmRuleTypes.Metric) - { - foreach (var item in _metricMonitorItems) - { - - @item.Aggregation.Name - - } - } -
-
- - @if (AlarmRule.Notifiers.Any()) - { - mdi-bell -
- @foreach (var item in AlarmRule.Notifiers) - { - - - - - - - - @item.DisplayName - - - } -
- - } - - @AlarmRule.ModificationTime.Humanize(culture:I18n.Culture) - - - - @AlarmRule.ModifierName -
-
- -@code { - [Parameter] - public int Height { get; set; } = 168; - - [EditorRequired] - [Parameter] - public AlarmRuleListViewModel AlarmRule { get; set; } = null!; - - [Parameter] - public EventCallback OnEdit { get; set; } - - private List _metricMonitorItems => AlarmRule.MetricMonitorItems.Where(x => !string.IsNullOrEmpty(x.Aggregation.Name)).Take(5).ToList(); - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - private async Task HandleEdit() - { - if (OnEdit.HasDelegate) - { - await OnEdit.InvokeAsync(); - } - } - - private async Task HandleDisable() - { - await AlarmRuleService.SetIsEnabledAsync(AlarmRule.Id, false); - AlarmRule.IsEnabled = false; - } - - private async Task HandleEnabled() - { - await AlarmRuleService.SetIsEnabledAsync(AlarmRule.Id, true); - AlarmRule.IsEnabled = true; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor deleted file mode 100644 index 5837f59f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor +++ /dev/null @@ -1,120 +0,0 @@ -@inherits AdminCompontentBase - -@T("BaseInfo") - -@T("TriggerRules") -@foreach (var item in Model.Items) -{ - -
- - - - - - - - - - - -
- - - @T("IsNotification") - - - - @if (item.IsNotification) - { - - } -
-
- - - @T("IsRecoveryNotification") - - - - @if (item.IsRecoveryNotification) - { - - } -
- -
- - mdi-plus - - @if (Model.Items.Count > 1) - { - - mdi-delete - - } -
-
-
-
-} -@T("AdvancedConfiguration") - - - - - - - - - - - - - - - - - - @if (Model.SilenceCycle.Type == SilenceCycleTypes.Time) - { - - - - - - - } - @if (Model.SilenceCycle.Type == SilenceCycleTypes.Cycle) - { - - - - @T("Period") - - - - } - - -@code { - [Parameter] - public AlarmRuleUpsertViewModel Model { get; set; } = new(); - - [Parameter] - public EventCallback ModelChanged { get; set; } - private List _items = new(); - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - private void HandleItemsAdd(AlarmRuleItemViewModel item) - { - var index = Model.Items.IndexOf(item) + 1; - Model.Items.Insert(index, new AlarmRuleItemViewModel()); - } - - private void HandleItemsRemove(AlarmRuleItemViewModel item) - { - Model.Items.Remove(item); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor deleted file mode 100644 index 41449b7c..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor +++ /dev/null @@ -1,211 +0,0 @@ -@inherits AdminCompontentBase - - - - - - - @T("RelationRes") - - - - @T("MonitoringSetting") - - - - @T("AlarmSetting") - - - - - - - @T("SelectItem") - - @T("SelectApp") - - - - - - - - - @T("ChartSetting") - - - - @T("VariableConfiguration") - - - - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - - - - - - - } - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - - - - } - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron && !string.IsNullOrEmpty(_model.CheckFrequency.CronExpression)) - { -
-

- - @T("NextRunTimeTip")

- @((MarkupString)_nextRunTimeStr) -
- } - - @foreach (var item in _model.LogMonitorItems) - { - - - - - @T("Count") - - - - - - - @T("as") - - - - - - - @T("Offset") - - - - @if (item.IsOffset) - { - - - @T("Period") - - - } - - -
-
- - mdi-plus - - @if (_model.LogMonitorItems.Count > 1) - { - - mdi-delete - - } -
-
-
- } - @T("LogFilter") - - -
-
-
- - - - - - - -
-
-
-
- - @if (_model.Step == 1) - { - @if (_entityId != default) - { - - mdi-delete - - } - } - @if (_model.Step == 2) - { - - fa:fas fa-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - @if (_model.Step == 3) - { - - - - - - fa:fas fa-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - - - @if (_model.Step == 1) - { - @T("NextStep") - } - @if (_model.Step == 2 ) - { - @T("PreviousStep") - @T("NextStep") - } - @if (_model.Step == 3) - { - @T("PreviousStep") - @T(_entityId == default?"Submit":"Save") - } - -
- - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs deleted file mode 100644 index b97c8597..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using Masa.BuildingBlocks.StackSdks.Config; -using Masa.Contrib.StackSdks.Config; - -namespace Masa.Alert.Web.Admin.Pages.AlarmRules.Modules; - -public partial class LogAlarmRuleUpsertModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - [Inject] - public IPmClient PmClient { get; set; } = default!; - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - [Inject] - public IMasaStackConfig MasaStackConfig { get; set; } = default!; - - private MForm? _form; - private AlarmRuleUpsertViewModel _model = new(); - private bool _visible; - private Guid _entityId; - private bool _cronVisible; - private string _tempCron = string.Empty; - private string _nextRunTimeStr = string.Empty; - private AlarmPreviewChartModal? _previewChart; - private List _projectItems = new(); - private List _appItems = new(); - private List _fields = new(); - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - protected override void OnInitialized() - { - base.OnInitialized(); - MasaGlobalConfig.CurrentTeamId = MasaUser.CurrentTeamId; - MasaGlobalConfig.OnCurrentTeamChanged += OnTeamChanged; - } - - private void OnTeamChanged(Guid teamId) - { - MasaGlobalConfig.CurrentTeamId = teamId; - _ = InvokeAsync(async () => - { - await LoadProjectsAsync(); - StateHasChanged(); - }); - } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - await LoadProjectsAsync(); - _fields = (await TscClient.LogService.GetMappingAsync()).ToList(); - } - - private async Task LoadProjectsAsync() - { - _projectItems = await PmClient.ProjectService.GetListByTeamIdsAsync(new List { MasaGlobalConfig.CurrentTeamId }, MultiEnvironmentUserContext.Environment!) ?? new(); - if (!string.IsNullOrEmpty(_model.ProjectIdentity) && !_projectItems.Exists(project => project.Identity == _model.ProjectIdentity)) - { - _model.ProjectIdentity = default!; - _appItems = new(); - } - } - - public async Task OpenModalAsync(AlarmRuleListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new() { Source = MasaStackConfig.GetServiceId(MasaStackProject.Alert), Show = true }; - _model.Type = AlarmRuleTypes.Log; - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - FillData(); - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - - _form?.ResetValidation(); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmRuleService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - await HandleProjectChange(); - GetNextRunTime(); - } - - private void FillData() - { - if (!_model.LogMonitorItems.Any()) - { - _model.LogMonitorItems.Add(new LogMonitorItemViewModel()); - } - if (!_model.MetricMonitorItems.Any()) - { - _model.MetricMonitorItems.Add(new MetricMonitorItemViewModel()); - } - if (!_model.Items.Any()) - { - _model.Items.Add(new AlarmRuleItemViewModel()); - } - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async Task SetCronExpression() - { - if (CronExpression.IsValidExpression(_tempCron)) - { - _model.CheckFrequency.CronExpression = _tempCron; - GetNextRunTime(); - _cronVisible = false; - } - else - { - await PopupService.EnqueueSnackbarAsync(T("CronExpressionInvalid"), AlertTypes.Error); - } - } - - private void GetNextRunTime(int showCount = 5) - { - if (!CronExpression.IsValidExpression(_model.CheckFrequency.CronExpression)) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - return; - } - - var sb = new StringBuilder(); - - var startTime = DateTimeOffset.UtcNow; - - var cronExpression = new CronExpression(_model.CheckFrequency.CronExpression); - - var timezone = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(p => p.BaseUtcOffset == JsInitVariables.TimezoneOffset); - - if (timezone != null) - cronExpression.TimeZone = timezone; - - for (int i = 0; i < showCount; i++) - { - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(startTime); - - if (nextExcuteTime.HasValue) - { - startTime = nextExcuteTime.Value; - sb.AppendLine(string.Format("

{0}

", startTime.ToOffset(JsInitVariables.TimezoneOffset).ToString("yyyy-MM-dd HH:mm:ss"))); - } - } - - if (sb.Length == 0) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - } - else - { - _nextRunTimeStr = sb.ToString(); - } - - StateHasChanged(); - } - - private void OpenCronModal() - { - _cronVisible = true; - _tempCron = _model.CheckFrequency.CronExpression; - } - - private void HandleLogMonitorItemsAdd(LogMonitorItemViewModel item) - { - var index = _model.LogMonitorItems.IndexOf(item) + 1; - _model.LogMonitorItems.Insert(index, new LogMonitorItemViewModel()); - } - - private void HandleLogMonitorItemsRemove(LogMonitorItemViewModel item) - { - _model.LogMonitorItems.Remove(item); - } - - private async Task HandleOk() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - - Loading = true; - - var inputDto = _model.Adapt(); - - if (_entityId == default) - { - await AlarmRuleService.CreateAsync(inputDto); - } - else - { - await AlarmRuleService.UpdateAsync(_entityId, inputDto); - } - - Loading = false; - _visible = false; - - ResetForm(); - - await UpsertSuccessfulMessage(_entityId, T("AlarmRule")); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private void HandleNextStep() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - _model.Step++; - } - - private async Task HandleProjectChange() - { - var projectId = _projectItems.Find(x => x.Identity == _model.ProjectIdentity)?.Id; - if (projectId != null) - { - _appItems = await PmClient.AppService.GetListByProjectIdsAsync(new List { projectId.Value }) ?? new(); - if (!string.IsNullOrEmpty(_model.AppIdentity) && (string.IsNullOrEmpty(_model.ProjectIdentity) || !_appItems.Exists(app => app.Identity == _model.AppIdentity))) - _model.AppIdentity = default!; - } - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmRule")}\"{_model.DisplayName}\""), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmRuleService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - ResetForm(); - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - protected override ValueTask DisposeAsyncCore() - { - MasaGlobalConfig.OnCurrentTeamChanged -= OnTeamChanged; - return base.DisposeAsyncCore(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor deleted file mode 100644 index 934ff907..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor +++ /dev/null @@ -1,30 +0,0 @@ -
- -
- -@code { - [EditorRequired] - [Parameter] - public AlarmRuleUpsertViewModel AlarmRule { get; set; } = new(); - - public string _queryStr = "Query"; - - protected override void OnParametersSet() - { - var queryStr = string.IsNullOrEmpty(AlarmRule.WhereExpression) ? "{}" : AlarmRule.WhereExpression; - var aggsStr = "{"; - for (int i = 0; i < AlarmRule.LogMonitorItems.Count; i++) - { - if (i>0) - { - aggsStr += ","; - } - - var item = AlarmRule.LogMonitorItems[i]; - aggsStr += $"\"{item.Alias}\":{{\"value_count\":{{\"field\":\"{item.Field}\"}}}}"; - } - aggsStr += "}"; - - _queryStr = $"{{\"query\":{queryStr},\"aggs\":{aggsStr}}}"; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor deleted file mode 100644 index 072e4db9..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor +++ /dev/null @@ -1,216 +0,0 @@ -@inherits AdminCompontentBase - - - - - - - @T("MonitoringSetting") - - - - @T("AlarmSetting") - - - - - - - - @T("ChartSetting") - - - - @T("VariableConfiguration") - - - - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - - - - - - - } - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - - - - } - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron && !string.IsNullOrEmpty(_model.CheckFrequency.CronExpression)) - { -
-

- - @T("NextRunTimeTip") -

- @((MarkupString)_nextRunTimeStr) -
- } - - @foreach (var item in _model.MetricMonitorItems) - { - - - - @if (item.IsExpression) - { - - } - else - { - - - - - - - - - - - - - - - - - - - - - - } - - - - - @T("as") - - - - - - - @T("Offset") - - - @if (item.IsOffset) - { - - - - @T("Period") - - - - } - - - - - mdi-plus - - @if (_model.MetricMonitorItems.Count > 1) - { - - mdi-delete - - } - - - - } -
-
-
- - - - - - - -
-
-
-
- - @if (_model.Step == 1) - { - - mdi-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - @if (_model.Step == 2) - { - - - - - - mdi-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - - - @if (_model.Step == 1) - { - @T("NextStep") - } - @if (_model.Step == 2) - { - @T("PreviousStep") - @T(_entityId == default?"Submit":"Save") - } - -
- - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs deleted file mode 100644 index 4ecedebe..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmRules.Modules; - -public partial class MetricAlarmRuleUpsertModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - private MForm? _form; - private AlarmRuleUpsertViewModel _model = new(); - private bool _visible; - private Guid _entityId; - private bool _cronVisible; - private string _tempCron = string.Empty; - private string _nextRunTimeStr = string.Empty; - private List _items = new(); - private AlarmPreviewChartModal? _previewChart; - private List _names = new(); - private List _allNames = new(); - private string _search = ""; - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - private async Task LoadData() - { - _allNames = (await TscClient.MetricService.GetNamesAsync(null)).ToList(); - } - - public async Task OpenModalAsync(AlarmRuleListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - _model.Type = AlarmRuleTypes.Metric; - - if (_entityId != default) - { - await GetFormDataAsync(); - } - FillData(); - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - - _form?.ResetValidation(); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmRuleService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - - InitNames(_model.MetricMonitorItems.Select(x => x.Aggregation.Name).ToList()); - - foreach (var item in _model.MetricMonitorItems) - { - if (string.IsNullOrEmpty(item.Aggregation.Name)) continue; - await HandleMetricNameChange(item.Aggregation.Name, item); - - if (string.IsNullOrEmpty(item.Aggregation.Tag)) continue; - HandleMetricTagChange(item.Aggregation.Tag, item); - } - GetNextRunTime(); - } - - private void FillData() - { - if (!_model.LogMonitorItems.Any()) - { - _model.LogMonitorItems.Add(new LogMonitorItemViewModel()); - } - if (!_model.MetricMonitorItems.Any()) - { - _model.MetricMonitorItems.Add(new MetricMonitorItemViewModel()); - } - if (!_model.Items.Any()) - { - _model.Items.Add(new AlarmRuleItemViewModel()); - } - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async Task SetCronExpression() - { - if (CronExpression.IsValidExpression(_tempCron)) - { - _model.CheckFrequency.CronExpression = _tempCron; - GetNextRunTime(); - _cronVisible = false; - } - else - { - await PopupService.EnqueueSnackbarAsync(T("CronExpressionInvalid"), AlertTypes.Error); - } - } - - private void GetNextRunTime(int showCount = 5) - { - if (!CronExpression.IsValidExpression(_model.CheckFrequency.CronExpression)) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - return; - } - - var sb = new StringBuilder(); - - var startTime = DateTimeOffset.UtcNow; - - var cronExpression = new CronExpression(_model.CheckFrequency.CronExpression); - - var timezone = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(p => p.BaseUtcOffset == JsInitVariables.TimezoneOffset); - - if (timezone != null) - cronExpression.TimeZone = timezone; - - for (int i = 0; i < showCount; i++) - { - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(startTime); - - if (nextExcuteTime.HasValue) - { - startTime = nextExcuteTime.Value; - sb.AppendLine(string.Format("

{0}

", startTime.ToOffset(JsInitVariables.TimezoneOffset).ToString("yyyy-MM-dd HH:mm:ss"))); - } - } - - if (sb.Length == 0) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - } - else - { - _nextRunTimeStr = sb.ToString(); - } - } - - private void OpenCronModal() - { - _cronVisible = true; - _tempCron = _model.CheckFrequency.CronExpression; - } - - private void HandleMetricMonitorItemsAdd(MetricMonitorItemViewModel item) - { - var index = _model.MetricMonitorItems.IndexOf(item) + 1; - _model.MetricMonitorItems.Insert(index, new MetricMonitorItemViewModel()); - } - - private void HandleMetricMonitorItemsRemove(MetricMonitorItemViewModel item) - { - _model.MetricMonitorItems.Remove(item); - } - - private async Task HandleMetricNameChange(string newVal, MetricMonitorItemViewModel item) - { - var query = new LableValuesRequest - { - Match = newVal, - Start = DateTime.Now.AddDays(-1), - End = DateTime.Now, - }; - var labelValues = (await TscClient.MetricService.GetLabelValuesAsync(query)); - item.Aggregation.LabelValues = labelValues; - item.Aggregation.TagItems = labelValues.Select(x => x.Key).ToList(); - } - - private void HandleMetricTagChange(string newVal, MetricMonitorItemViewModel item) - { - item.Aggregation.ValueItems = item.Aggregation.LabelValues.FirstOrDefault(x => x.Key == newVal).Value; - } - - private async Task HandleOk() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - - Loading = true; - - var inputDto = _model.Adapt(); - - if (_entityId == default) - { - await AlarmRuleService.CreateAsync(inputDto); - } - else - { - await AlarmRuleService.UpdateAsync(_entityId, inputDto); - } - - Loading = false; - _visible = false; - - ResetForm(); - - await UpsertSuccessfulMessage(_entityId, T("AlarmRule")); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private void HandleNextStep() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - _model.Step++; - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmRule")}\"{_model.DisplayName}\""), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmRuleService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - ResetForm(); - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private async Task QueryNames(string search) - { - search = search.TrimStart(' ').TrimEnd(' '); - _search = search; - await Task.Delay(300); - if (search != _search) - { - return; - } - - Loading = true; - - _names = _allNames.Where(x => x.Contains(search)).ToList(); - StateHasChanged(); - Loading = false; - } - - private void InitNames(List names) - { - _names = _allNames.Where(x => names.Contains(x)).ToList(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor deleted file mode 100644 index c91a9f3f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor +++ /dev/null @@ -1,62 +0,0 @@ -@inherits AdminCompontentBase - - - - - @WebHook.DisplayName - - - - @IconConstants.Update - - - mdi-bug - - - - - -
- @WebHook.Url -
-
- - - @WebHook.ModifierName - - - - @WebHook.ModificationTime.Humanize(culture:I18n.Culture) - -
- -@code { - [Parameter] - public int Height { get; set; } = 147; - - [EditorRequired] - [Parameter] - public WebHookListViewModel WebHook { get; set; } = null!; - - [Parameter] - public EventCallback OnEdit { get; set; } - - [Parameter] - public EventCallback OnTest { get; set; } - - private async Task HandleEdit() - { - if (OnEdit.HasDelegate) - { - await OnEdit.InvokeAsync(); - } - } - - private async Task HandleTest() - { - if (OnTest.HasDelegate) - { - await OnTest.InvokeAsync(); - } - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor deleted file mode 100644 index 5709e8bf..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor +++ /dev/null @@ -1,20 +0,0 @@ -@inherits AdminCompontentBase - - - - - - @T("Test") - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs deleted file mode 100644 index a0e58d85..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.WebHooks.Modules; - -public partial class WebHookTestModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private WebHookTestViewModal _model = new(); - private bool _visible; - - WebHookService WebHookService => AlertCaller.WebHookService; - - protected override string? PageName { get; set; } = "WebHookBlock"; - - public async Task OpenModalAsync(Guid webHookId) - { - _model.WebHookId = webHookId; - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private async Task HandleOkAsync() - { - Loading = true; - await WebHookService.TestAsync(_model.WebHookId, new WebHookTestDto { Handler = _model.UserId }); - Loading = false; - await SuccessMessageAsync(T("OperationSuccessfulMessage")); - _visible = false; - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor deleted file mode 100644 index d7fdc765..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor +++ /dev/null @@ -1,47 +0,0 @@ -@inherits AdminCompontentBase - - - - - -
- @T("SecretKey") - - - @_model.SecretKey - - - - mdi-refresh - -
- - - - -
-
-
-
- - @if (_entityId != default) - { - - mdi-delete - - } - - - @if (_entityId != default) - { - @T("Test") - } - @T(_entityId == default?"Submit":"Save") - -
- - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs deleted file mode 100644 index 61e06de2..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.WebHooks.Modules; - -public partial class WebHookUpsertModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private MForm? _form; - private WebHookUpsertViewModel _model = new(); - private bool _visible; - private Guid _entityId; - private WebHookTestModal? _testModal; - - protected override string? PageName { get; set; } = "WebHookBlock"; - - WebHookService WebHookService => AlertCaller.WebHookService; - - public async Task OpenModalAsync(WebHookListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - - _form?.ResetValidation(); - } - - private async Task GetFormDataAsync() - { - var dto = await WebHookService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private void HandleRefresh() - { - _model.SecretKey = Guid.NewGuid().ToString(); - } - - private async Task HandleOk() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - - Loading = true; - - var inputDto = _model.Adapt(); - - if (_entityId == default) - { - await WebHookService.CreateAsync(inputDto); - } - else - { - await WebHookService.UpdateAsync(_entityId, inputDto); - } - - Loading = false; - _visible = false; - - ResetForm(); - - await UpsertSuccessfulMessage(_entityId, T("WebHook")); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("WebHook")}\"{_model.DisplayName}\""), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await WebHookService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - ResetForm(); - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor deleted file mode 100644 index 97a8f1ea..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor +++ /dev/null @@ -1,38 +0,0 @@ -@inherits AdminCompontentBase -@page "/webHook" -@T("WebHook") - - - - - @T("WebHook") - - - - - @if (!_showEmptyPlaceholder) - { - - @foreach (var _entitie in _entities.Result) - { - - - - } - - } - else - { - - } - - - @if (!_showEmptyPlaceholder) - { - - } - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs deleted file mode 100644 index ab8c976e..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.WebHooks; - -public partial class WebHookManagement : AdminCompontentBase -{ - private GetWebHookInputDto _queryParam = new(20); - private PaginatedListDto _entities = new(); - private WebHookUpsertModal? _upsertModal; - private WebHookTestModal? _testModal; - protected override string? PageName { get; set; } = "WebHookBlock"; - - WebHookService WebHookService => AlertCaller.WebHookService; - - private bool _showEmptyPlaceholder = false; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - private async Task LoadData() - { - Loading = true; - _showEmptyPlaceholder = false; - var dtos = (await WebHookService.GetListAsync(_queryParam)); - _entities = dtos?.Adapt>() ?? new(); - _showEmptyPlaceholder = !_entities.Result.Any(); - Loading = false; - StateHasChanged(); - } - - private async Task HandleOk() - { - await LoadData(); - } - - private async Task RefreshAsync() - { - _queryParam.Page = 1; - await LoadData(); - } - - private async Task HandlePageChanged(int page) - { - _queryParam.Page = page; - await LoadData(); - } - - private async Task HandlePageSizeChanged(int pageSize) - { - _queryParam.PageSize = pageSize; - await LoadData(); - } - - private async Task HandleClearAsync() - { - _queryParam = new(20); - await LoadData(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs b/src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs deleted file mode 100644 index 65c91ccf..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Registers; - -public class AlarmHistoryRegister : IRegister -{ - public void Register(TypeAdapterConfig config) - { - config.ForType().Map(dest => dest.DisplayName, src => src.AlarmRule.DisplayName); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs b/src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs deleted file mode 100644 index 3016eec0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using Masa.BuildingBlocks.Authentication.Identity; -using Masa.BuildingBlocks.StackSdks.Auth.Contracts; - -namespace Masa.Alert.Web.Admin; - -public abstract class AdminCompontentBase : Masa.Blazor.Core.MasaComponentBase -{ - private GlobalConfig? _globalConfig; - private AlertCaller? _alertCaller; - private NavigationManager? _navigationManager; - - [Inject] - public IPopupService PopupService { get; set; } = default!; - - [Inject] - public I18n I18n { get; set; } = default!; - - [Inject] - public GlobalConfig GlobalConfig - { - get - { - return _globalConfig ?? throw new Exception("please Inject GlobalConfig!"); - } - set - { - _globalConfig = value; - } - } - - [Inject] - public NavigationManager NavigationManager - { - get - { - return _navigationManager ?? throw new Exception("please Inject NavigationManager!"); - } - set - { - _navigationManager = value; - } - } - - [Inject] - public JsInitVariables JsInitVariables { get; set; } = default!; - - [CascadingParameter(Name = "Culture")] - private string Culture { get; set; } = null!; - - [Inject] - public AlertCaller AlertCaller - { - get - { - return _alertCaller ?? throw new Exception("please Inject AlertCaller!"); - } - set - { - _alertCaller = value; - } - } - - [Inject] - public MasaGlobalConfig MasaGlobalConfig { get; set; } = default!; - - [Inject] - public IMultiEnvironmentUserContext MultiEnvironmentUserContext { get; set; } = default!; - - [Inject] - public MasaUser MasaUser { get; set; } = null!; - - protected bool IsPage = false; - - protected override void OnInitialized() - { - base.OnInitialized(); - MasaGlobalConfig.CurrentTeamId = MasaUser.CurrentTeamId; - } - - public bool Loading - { - get => GlobalConfig.Loading; - set => GlobalConfig.Loading = value; - } - - public string LoadingText - { - get => GlobalConfig.LoadingText; - set => GlobalConfig.LoadingText = value; - } - - protected virtual string? PageName { get; set; } - - public string T(string key) - { - if (string.IsNullOrEmpty(key)) return key; - if (PageName is not null) return I18n.T(PageName, key, false) ?? I18n.T(key, false) ?? key; - else return I18n.T(key, true); - } - - public string T(string formatkey, params string[] args) - { - return string.Format(T(formatkey), args); - } - - public HubConnection? HubConnection { get; set; } - - public async Task UpsertSuccessfulMessage(Guid entityId, string displayName) - { - if (entityId == default) - { - await SuccessMessageAsync(T("CreateSuccessfulMessage", displayName)); - } - else - { - await SuccessMessageAsync(T("EditSuccessfulMessage", displayName)); - } - } - - public async Task ConfirmAsync(string messgae, Func callback, AlertTypes type = AlertTypes.Warning) - { - if (await PopupService.SimpleConfirmAsync(I18n.T("OperationConfirmation"), messgae, type)) await callback.Invoke(); - } - - public async Task SuccessMessageAsync(string message) - { - await PopupService.EnqueueSnackbarAsync(message, AlertTypes.Success); - } - - public async Task WarningAsync(string message) - { - await PopupService.EnqueueSnackbarAsync(message, AlertTypes.Warning); - } - - public async Task ErrorMessageAsync(string message) - { - await PopupService.EnqueueSnackbarAsync(message, AlertTypes.Error); - } - - protected async Task HandleErrorAsync(Exception exception) - { - await InvokeAsync(async () => - { - await ErrorMessageAsync(exception.Message); - Loading = false; - StateHasChanged(); - }); - } - - public List> GetEnumMap() where TEnum : struct, Enum - { - return Enum.GetValues().Select(e => new KeyValuePair(e.ToString(), e)).ToList(); - } - - public List> GetBooleanMap() - { - return new() - { - new(T("Enable"), true), - new(T("Disabled"), false) - }; - } - - public async Task Throttle(Func callback, int wait = 500, bool immediate = true) - { - if (immediate) - { - if (!GlobalConfig.ThrottleFlag) - { - GlobalConfig.ThrottleFlag = true; - await callback.Invoke(); - await Task.Delay(wait); - GlobalConfig.ThrottleFlag = false; - } - } - else if (!GlobalConfig.ThrottleFlag) - { - GlobalConfig.ThrottleFlag = true; - await Task.Delay(wait); - GlobalConfig.ThrottleFlag = false; - await callback.Invoke(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor b/src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor deleted file mode 100644 index 2ac5135d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor +++ /dev/null @@ -1,37 +0,0 @@ -@implements IDisposable -@inject GlobalConfig GlobalConfig; - - -
- -
@LoadingText
-
-
- -@code { - [Parameter] - public bool IsLoading { get; set; } - - [Parameter] - public string LoadingText { get; set; } = string.Empty; - - [Parameter] - public EventCallback LoadingChanged { get; set; } - - void Loading(bool loading,string loadingText) - { - IsLoading = loading; - LoadingText = loadingText; - base.StateHasChanged(); - } - - protected override void OnInitialized() - { - GlobalConfig.OnLoadingChanged += Loading; - } - - public void Dispose() - { - GlobalConfig.OnLoadingChanged -= Loading; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor b/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor deleted file mode 100644 index 55d4675f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor +++ /dev/null @@ -1,34 +0,0 @@ -@using Masa.BuildingBlocks.StackSdks.Config; -@using Masa.Contrib.StackSdks.Config; -@inherits LayoutComponentBase -@inject GlobalConfig GlobalConfig -@inject NavigationManager Navigation -@inject IMasaStackConfig MasaStackConfig - - - @Body - - - -@code { - [Inject] - public IPopupService PopupService { get; set; } = default!; - - private List WhiteUris = new List { "alarmHistory/*" }; - - private Task OnErrorAfterHandle(Exception exception) - { - GlobalConfig.Loading = false; - GlobalConfig.ThrottleFlag = false; - return Task.CompletedTask; - } - - private bool SignOut() - { - Navigation.NavigateTo("/Logout", true); - return true; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css b/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css deleted file mode 100644 index 5b076258..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css +++ /dev/null @@ -1,3 +0,0 @@ -.main-layout ::deep .app-bar .m-toolbar__content { - padding: 0 !important; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs deleted file mode 100644 index 4287884a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public class AlarmHandleStatusCommitViewModel -{ - public AlarmHistoryHandleStatuses Status { get; set; } - - public DateTimeOffset CreationTime { get; set; } - - public Guid UserId { get; set; } - - public string UserName { get; set; } = string.Empty; - - public string Remarks { get; set; } = string.Empty; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs deleted file mode 100644 index 7184f838..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public class AlarmHandleViewModel -{ - public AlarmHistoryHandleStatuses Status { get; set; } - - public Guid Handler { get; set; } - - public Guid WebHookId { get; set; } - - public bool IsHandleNotice { get; set; } - - public NotificationConfigViewModel NotificationConfig { get; set; } = new(); - - public string HandlerName { get; set; } = string.Empty; - - public bool IsThirdParty { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs deleted file mode 100644 index 13845e70..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public class AlarmHistoryListViewModel -{ - public Guid Id { get; set; } - - public AlertSeverity AlertSeverity { get; set; } - - public string DisplayName { get; set; } = default!; - - public string TriggerRules { get; set; } = default!; - - public DateTimeOffset FirstAlarmTime { get; set; } - - public int AlarmCount { get; set; } - - public DateTimeOffset LastAlarmTime { get; set; } - - public AlarmHistoryHandleStatuses HandleStatus { get; set; } - - public DateTimeOffset? RecoveryTime { get; set; } - - public AlarmHandleViewModel Handle { get; set; } = new(); - - public bool IsNotification { get; set; } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs deleted file mode 100644 index 69ab7628..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public record class AlarmHistoryViewModel -{ - public Guid Id { get; set; } - - public AlertSeverity AlertSeverity { get; set; } - - public string DisplayName { get; set; } = default!; - - public string TriggerRules { get; set; } = default!; - - public DateTimeOffset FirstAlarmTime { get; set; } - - public int AlarmCount { get; set; } - - public DateTimeOffset LastAlarmTime { get; set; } - - public AlarmRuleViewModel AlarmRule { get; set; } = new(); - - public List RuleResultItems { get; set; } = new(); - - public List HandleStatusCommits { get; set; } = new(); - - public AlarmHandleViewModel Handle { get; set; } = new(); - - public bool IsNotification { get; set; } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs deleted file mode 100644 index 8c2b118b..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory.Validator; - -public class AlarmHandleViewModelValidator : AbstractValidator -{ - public AlarmHandleViewModelValidator(I18n i18n) - { - RuleFor(x => x.NotificationConfig).SetValidator(new NotificationConfigViewModelValidator(i18n)).When(x => x.IsHandleNotice); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs deleted file mode 100644 index c6f608b0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory.Validator; - -public class NotificationConfigViewModelValidator : AbstractValidator -{ - public NotificationConfigViewModelValidator(I18n i18n) - { - RuleFor(x => x.TemplateName).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("MessageTemplate"))); - RuleFor(x => x.Receivers).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("Receiver", true))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs deleted file mode 100644 index 36f86d46..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleItemViewModel -{ - public Guid Id { get; set; } - - public Guid AlarmRuleId { get; set; } - - public string Expression { get; set; } = string.Empty; - - public AlertSeverity AlertSeverity { get; set; } - - public bool IsRecoveryNotification { get; set; } - - public bool IsNotification { get; set; } - - public NotificationConfigViewModel RecoveryNotificationConfig { get; set; } = new(); - - public NotificationConfigViewModel NotificationConfig { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs deleted file mode 100644 index 7368a8f0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleListViewModel -{ - public Guid Id { get; set; } - - public AlarmRuleTypes Type { get; set; } - - public string DisplayName { get; set; } = default!; - - public string ProjectIdentity { get; set; } = default!; - - public string AppIdentity { get; set; } = default!; - - public DateTime ModificationTime { get; set; } - - public string ModifierName { get; set; } = string.Empty; - - public bool IsEnabled { get; set; } - - public List Items { get; set; } = new(); - - public List MetricMonitorItems { get; set; } = new(); - - public List Notifiers = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs deleted file mode 100644 index 3cf45be0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleRecordListViewModel -{ - public Guid Id { get; set; } - - public Guid AlarmRuleId { get; set; } - - public ConcurrentDictionary AggregateResult { get; set; } = new(); - - public bool IsTrigger { get; set; } - - public int ConsecutiveCount { get; set; } - - public List RuleResultItems { get; set; } = new(); - - public DateTime CreationTime { get; set; } - - public DateTimeOffset ExcuteTime { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs deleted file mode 100644 index 46dc6945..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleUpsertViewModel -{ - public AlarmRuleTypes Type { get; set; } - - public string DisplayName { get; set; } = string.Empty; - - public string ProjectIdentity { get; set; } = string.Empty; - - public string AppIdentity { get; set; } = string.Empty; - - public int Step { get; set; } = 1; - - public string ChartYAxisUnit { get; set; } = string.Empty; - - public CheckFrequencyViewModel CheckFrequency { get; set; } = new(); - - public bool IsGetTotal { get; set; } - - public string TotalVariable { get; set; } = "total"; - - public string WhereExpression { get; set; } = string.Empty; - - public string QueryStr { get; set; } = "Query"; - - public int ContinuousTriggerThreshold { get; set; } - - public SilenceCycleViewModel SilenceCycle { get; set; } = new(); - - public bool IsEnabled { get; set; } - - public List LogMonitorItems { get; set; } = new(); - - public List MetricMonitorItems { get; set; } = new(); - - public List Items { get; set; } = new(); - - public string Source { get; set; } = default!; - - public bool Show { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs deleted file mode 100644 index c944c750..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleViewModel: AlarmRuleUpsertViewModel -{ -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs deleted file mode 100644 index 3fd0482c..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class CheckFrequencyViewModel -{ - public AlarmCheckFrequencyTypes Type { get; set; } - - public TimeIntervalViewModel FixedInterval { get; set; } = new(); - - public string CronExpression { get; set; } = string.Empty; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs deleted file mode 100644 index cc6568fa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class LogMonitorItemViewModel -{ - public string Field { get; set; } = string.Empty; - - public LogAggregationTypes AggregationType { get; set; } = LogAggregationTypes.Count; - - public string Alias { get; set; } = string.Empty; - - public bool IsOffset { get; set; } - - public int OffsetPeriod { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs deleted file mode 100644 index 576f6ada..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class MetricAggregationViewModel -{ - public string Name { get; set; } = string.Empty; - - public string Tag { get; set; } = string.Empty; - - public MetricComparisonOperators ComparisonOperator { get; set; } = MetricComparisonOperators.Equal; - - public string Value { get; set; } = string.Empty; - - public MetricAggregationTypes AggregationType { get; set; } = MetricAggregationTypes.Count; - - public List TagItems { get; set; } = new(); - - public List ValueItems { get; set; } = new(); - - public Dictionary> LabelValues = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs deleted file mode 100644 index b2ce32a6..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class MetricMonitorItemViewModel -{ - public bool IsExpression { get; set; } - - public string Expression { get; set; } = string.Empty; - - public MetricAggregationViewModel Aggregation { get; set; } = new(); - - public string Alias { get; set; } = string.Empty; - - public bool IsOffset { get; set; } - - public int OffsetPeriod { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs deleted file mode 100644 index fd0d8d44..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class NotificationConfigViewModel -{ - public string ChannelCode { get; set; } = default!; - - public string TemplateCode { get; set; } = default!; - - public string TemplateName { get; set; } = default!; - - public int ChannelType { get; set; } - - public List Receivers { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs deleted file mode 100644 index ae1d10b1..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class RuleResultItemViewModel -{ - public bool IsValid { get; set; } - - public AlarmRuleItemViewModel AlarmRuleItem { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs deleted file mode 100644 index 9f34bc32..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class SilenceCycleViewModel -{ - public SilenceCycleTypes Type { get; set; } - - public TimeIntervalViewModel TimeInterval { get; set; } = new(); - - public int SilenceCycleValue { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs deleted file mode 100644 index ed2615b8..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class TimeIntervalViewModel -{ - public int IntervalTime { get; set; } = 15; - - public TimeTypes IntervalTimeType { get; set; } = TimeTypes.Minute; - - public TimeSpan? GetIntervalTime() - { - switch (IntervalTimeType) - { - case TimeTypes.Minute: - return TimeSpan.FromMinutes(IntervalTime); - case TimeTypes.Hour: - return TimeSpan.FromHours(IntervalTime); - case TimeTypes.Day: - return TimeSpan.FromDays(IntervalTime); - default: - return null; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs deleted file mode 100644 index 3886137f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class AlarmRuleItemViewModelValidator : AbstractValidator -{ - public AlarmRuleItemViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.Expression).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Expression"))); - RuleFor(x => x.AlertSeverity).IsInEnum().WithMessage(string.Format(i18n.T("IsInEnumValidator"), i18n.T(scope, "AlertSeverity"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs deleted file mode 100644 index fe93bdf4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class AlarmRuleUpsertViewModelValidator : AbstractValidator -{ - public AlarmRuleUpsertViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.ProjectIdentity).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "ProjectIdentity"))) - .When(x => x.Type == AlarmRuleTypes.Log).When(x => x.Step == 1); - RuleFor(x => x.AppIdentity).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "AppIdentity"))) - .When(x => x.Type == AlarmRuleTypes.Log).When(x => x.Step == 1); - - RuleFor(x => x.CheckFrequency).SetValidator(new CheckFrequencyViewModelValidator(i18n)) - .When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 2) || (x.Type == AlarmRuleTypes.Metric && x.Step == 1)); - RuleFor(x => x.LogMonitorItems).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "VariableConfiguration"))) - .ForEach(x => x.SetValidator(new LogMonitorItemViewModelValidator(i18n))) - .When(x => x.Type == AlarmRuleTypes.Log && x.Step == 2); - RuleFor(x => x.MetricMonitorItems).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "VariableConfiguration"))) - .ForEach(x => x.SetValidator(new MetricMonitorItemViewModelValidator(i18n))) - .When(x => x.Type == AlarmRuleTypes.Metric && x.Step == 1); - - RuleFor(x => x.DisplayName).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "DisplayName"))) - .Length(2, 50).WithMessage(string.Format(i18n.T("LengthValidator"), i18n.T(scope, "DisplayName"), 2, 50)) - .When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 3) || (x.Type == AlarmRuleTypes.Metric && x.Step == 2)); - RuleFor(x => x.Items).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "TriggerRules"))) - .ForEach(x => x.SetValidator(new AlarmRuleItemViewModelValidator(i18n))) - .When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 3) || (x.Type == AlarmRuleTypes.Metric && x.Step == 2)); - RuleFor(x => x.SilenceCycle).SetValidator(new SilenceCycleViewModelValidator(i18n)).When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 3) || (x.Type == AlarmRuleTypes.Metric && x.Step == 2)); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs deleted file mode 100644 index 710660e5..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class CheckFrequencyViewModelValidator : AbstractValidator -{ - public CheckFrequencyViewModelValidator(I18n i18n) - { - RuleFor(x => x.Type).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("CheckFrequency"))); - RuleFor(x => x.CronExpression).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("CronExpression"))) - .Must(x => CronExpression.IsValidExpression(x)).WithMessage(i18n.T("InvalidCronExpression")) - .Must(x => - { - if (string.IsNullOrEmpty(x)) - return true; - var startTime = DateTimeOffset.UtcNow; - var cronExpression = new CronExpression(x); - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(startTime); - if (nextExcuteTime.HasValue == false) - { - return false; - } - var nextExcuteTime2 = cronExpression.GetNextValidTimeAfter(nextExcuteTime.Value); - if (nextExcuteTime2.HasValue && (nextExcuteTime2.Value - nextExcuteTime.Value).TotalSeconds < 30) - return false; - return true; - }).WithMessage(i18n.T("RunningIntervalTips")) - .When(x => x.Type == AlarmCheckFrequencyTypes.Cron); - RuleFor(x => x.FixedInterval).SetValidator(new TimeIntervalViewModelValidator(i18n)) - .When(x => x.Type == AlarmCheckFrequencyTypes.FixedInterval); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs deleted file mode 100644 index 0c9b7387..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using static System.Formats.Asn1.AsnWriter; - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class LogMonitorItemViewModelValidator : AbstractValidator -{ - public LogMonitorItemViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.Field).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Field"))); - RuleFor(x => x.Alias).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Alias"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs deleted file mode 100644 index a4bf0509..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class MetricMonitorItemViewModelValidator : AbstractValidator -{ - public MetricMonitorItemViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.Alias).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Alias"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs deleted file mode 100644 index 20128a05..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class SilenceCycleViewModelValidator : AbstractValidator -{ - public SilenceCycleViewModelValidator(I18n i18n) - { - RuleFor(x => x.TimeInterval).SetValidator(new TimeIntervalViewModelValidator(i18n)).When(x => x.Type == SilenceCycleTypes.Time); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs deleted file mode 100644 index 5c7ef4aa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class TimeIntervalViewModelValidator : AbstractValidator -{ - public TimeIntervalViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.IntervalTimeType).IsInEnum().WithMessage(string.Format(i18n.T("IsInEnumValidator"), i18n.T(scope, "IntervalTimeType"))); - RuleFor(x => x.IntervalTime).InclusiveBetween(1, 59).WithMessage(string.Format(i18n.T("InclusiveBetweenValidator"), i18n.T(scope, "IntervalTime"), 1, 59)) - .When(x => x.IntervalTimeType == TimeTypes.Minute); - RuleFor(x => x.IntervalTime).InclusiveBetween(1, 23).WithMessage(string.Format(i18n.T("InclusiveBetweenValidator"), i18n.T(scope, "IntervalTime"), 1, 23)) - .When(x => x.IntervalTimeType == TimeTypes.Hour); - RuleFor(x => x.IntervalTime).InclusiveBetween(1, 31).WithMessage(string.Format(i18n.T("InclusiveBetweenValidator"), i18n.T(scope, "IntervalTime"), 1, 31)) - .When(x => x.IntervalTimeType == TimeTypes.Day); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs deleted file mode 100644 index c6bd5dd8..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks.Validator; - -public class WebHookTestViewModalValidator : AbstractValidator -{ - public WebHookTestViewModalValidator(I18n i18n) - { - RuleFor(x => x.UserId).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("User"))); - RuleFor(x => x.WebHookId).Required(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs deleted file mode 100644 index 3a9aa66d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks.Validator; - -public class WebHookUpsertViewModelValidator : AbstractValidator -{ - public WebHookUpsertViewModelValidator(I18n i18n) - { - var scope = "WebHookBlock"; - RuleFor(x => x.DisplayName).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "DisplayName"))) - .ChineseLetterNumberSymbol().WithMessage(string.Format(i18n.T("ChineseLetterNumberSymbolValidator"), i18n.T(scope, "DisplayName"))) - .Length(2, 50).WithMessage(string.Format(i18n.T("LengthValidator"), i18n.T(scope, "DisplayName"), 2, 50)); - RuleFor(x => x.SecretKey).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "SecretKey"))); - RuleFor(x => x.Url).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Url"))) - .Url().WithMessage(string.Format(i18n.T("UrlValidator"), i18n.T(scope, "Url"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs deleted file mode 100644 index 1284d0fa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookListViewModel -{ - public Guid Id { get; set; } - - public string DisplayName { get; set; } = default!; - - public string Url { get; set; } = default!; - - public string Description { get; set; } = default!; - - public string SecretKey { get; set; } = default!; - - public DateTime ModificationTime { get; set; } - - public string ModifierName { get; set; } = string.Empty; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs deleted file mode 100644 index 7f6c76ae..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookTestViewModal -{ - public Guid UserId { get; set; } - - public Guid WebHookId { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs deleted file mode 100644 index 1e98192a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookUpsertViewModel -{ - public Guid Id { get; set; } - - public string DisplayName { get; set; } = string.Empty; - - public string Url { get; set; } = string.Empty; - - public string Description { get; set; } = string.Empty; - - public string SecretKey { get; set; } = Guid.NewGuid().ToString(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs deleted file mode 100644 index 6cf877af..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookViewModel -{ - public string DisplayName { get; set; } = default!; - - public string Url { get; set; } = default!; - - public string Description { get; set; } = default!; - - public string SecretKey { get; set; } = default!; -} diff --git a/src/Web/Masa.Alert.Web.Admin/_Imports.cs b/src/Web/Masa.Alert.Web.Admin/_Imports.cs deleted file mode 100644 index 24ef6d94..00000000 --- a/src/Web/Masa.Alert.Web.Admin/_Imports.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -global using System.Collections.Concurrent; -global using System.Reflection; -global using System.Text; -global using System.Text.Json; -global using FluentValidation; -global using Mapster; -global using Masa.Alert.ApiGateways.Caller; -global using Masa.Alert.ApiGateways.Caller.Services.AlarmHistories; -global using Masa.Alert.ApiGateways.Caller.Services.AlarmRules; -global using Masa.Alert.ApiGateways.Caller.Services.WebHooks; -global using Masa.Alert.Application.Contracts.AlarmHistories.Dtos; -global using Masa.Alert.Application.Contracts.AlarmRules.Dtos; -global using Masa.Alert.Application.Contracts.QueryModels; -global using Masa.Alert.Application.Contracts.WebHooks.Dtos; -global using Masa.Alert.Domain.Shared.AlarmHistory; -global using Masa.Alert.Domain.Shared.AlarmRules; -global using Masa.Alert.Domain.Shared.Enums; -global using Masa.Alert.Infrastructure.Common.Extensions; -global using Masa.Alert.Infrastructure.Common.Utils; -global using Masa.Alert.Infrastructure.Ddd.Application.Contracts.Dtos; -global using Masa.Alert.Web.Admin.Components; -global using Masa.Alert.Web.Admin.Components.Modules.Alarm; -global using Masa.Alert.Web.Admin.Global; -global using Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; -global using Masa.Alert.Web.Admin.Pages.AlarmRules.Modules; -global using Masa.Alert.Web.Admin.Pages.WebHooks.Modules; -global using Masa.Alert.Web.Admin.ViewModel.AlarmHistory; -global using Masa.Alert.Web.Admin.ViewModel.AlarmRules; -global using Masa.Alert.Web.Admin.ViewModel.WebHooks; -global using Masa.Blazor; -global using Masa.BuildingBlocks.StackSdks.Auth; -global using Masa.BuildingBlocks.StackSdks.Auth.Contracts.Model; -global using Masa.BuildingBlocks.StackSdks.Mc.Enum; -global using Masa.BuildingBlocks.StackSdks.Pm; -global using Masa.BuildingBlocks.StackSdks.Pm.Model; -global using Masa.BuildingBlocks.StackSdks.Tsc; -global using Masa.BuildingBlocks.StackSdks.Tsc.Contracts.Model; -global using Masa.BuildingBlocks.StackSdks.Tsc.Model; -global using Masa.Contrib.StackSdks.Caller; -global using Masa.Stack.Components; -global using Masa.Stack.Components.Extensions; -global using Masa.Stack.Components.Models; -global using Masa.Stack.Components.TaskHandle; -global using Microsoft.AspNetCore.Components; -global using Microsoft.AspNetCore.Components.Rendering; -global using Microsoft.AspNetCore.SignalR.Client; -global using Microsoft.Extensions.DependencyInjection; -global using ProjectModel = Masa.BuildingBlocks.StackSdks.Pm.Model.ProjectModel; -global using MasaGlobalConfig = Masa.Stack.Components.Configs.GlobalConfig; \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/_Imports.razor b/src/Web/Masa.Alert.Web.Admin/_Imports.razor deleted file mode 100644 index cbfee633..00000000 --- a/src/Web/Masa.Alert.Web.Admin/_Imports.razor +++ /dev/null @@ -1,40 +0,0 @@ -@using Microsoft.AspNetCore.Components.Web -@using Masa.Blazor -@using Masa.Blazor.Presets -@using Masa.Alert.Web.Admin.Global -@using Masa.Alert.Web.Admin.Shared -@using System.Diagnostics.CodeAnalysis -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.AspNetCore.Components.Routing -@using Humanizer -@using System.Globalization -@using Masa.Stack.Components -@using Masa.Alert.Web.Admin.Components -@using Masa.Stack.Components.Layouts -@using Microsoft.AspNetCore.Components.Rendering -@using Masa.Stack.Components.Models -@using Masa.Alert.Web.Admin.Components.Lists -@using System.Net.Http -@using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Web.Virtualization -@using Microsoft.JSInterop -@using static Masa.Stack.Components.JsInitVariables -@using Masa.Alert.Web.Admin.Components.GenericColumnRender -@using Masa.Alert.Web.Admin.Pages.AlarmRules.Modules -@using Masa.Alert.Domain.Shared.AlarmRules -@using Masa.Alert.Web.Admin.Components.Modules.Alarm -@using Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules -@using Masa.Alert.Domain.Shared.AlarmHistory -@using static Masa.Alert.Application.Contracts.AlarmRules.Dtos.GetAlarmRuleInputDto -@using static Masa.Alert.Application.Contracts.AlarmHistories.Dtos.GetAlarmHistoryInputDto -@using Masa.Alert.Web.Admin.Pages.WebHooks.Modules -@using Masa.Alert.Contracts.Admin.Tsc -@using Masa.Alert.Web.Admin.Components.Modules.Alarm.Model -@using Masa.Alert.Web.Admin.Components.Modules.Subjects -@using Masa.Alert.Web.Admin.Components.Modules.Notification -@using Masa.BuildingBlocks.StackSdks.Mc; -@using Masa.BuildingBlocks.StackSdks.Mc.Model -@using Microsoft.IdentityModel.Protocols.OpenIdConnect -@using Masa.Alert.Web.Admin.Components.Modules.WebHooks -@using Masa.Stack.Components.Shared.IntegrationComponents \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css b/src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css deleted file mode 100644 index 2ffbb441..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css +++ /dev/null @@ -1,571 +0,0 @@ -.rounded-2 { - border-radius: 10px !important; -} - -.rounded-4 { - border-radius: 20px !important; -} - -.button { - min-width: 40px; - min-height: 40px; - border: 1px solid #F0F3FA; - box-sizing: border-box; - border-radius: 10px; - cursor: pointer; -} - -.text-btn { - /* BUTTON-按钮 */ - font-family: Roboto !important; - font-style: normal !important; - font-weight: 400 !important; - font-size: 0.875rem !important; - line-height: 1.25rem !important; - /* default color */ - color: #A3AED0 !important; -} - -.m-input.mx-auto .m-text-field__slot { - padding-bottom: 2px; -} - - .m-input.mx-auto .m-text-field__slot input { - text-align: center; - } - -.m-input.mx-auto .m-input__slot::before { - border-color: #E2E7F4 !important; -} - -.m-input.mx-auto .m-text-field__slot input::placeholder { - text-align: center; - color: #A3AED0 !important; - font-family: Roboto !important; - font-size: 24px !important; - font-style: normal !important; - font-weight: 700 !important; - line-height: normal !important; - letter-spacing: 0em !important; -} - -.m-data-table.table-space-v-4 > .m-data-table__wrapper > table { - border-spacing: 0px 16px !important; -} - -.m-data-table.table-space-v-2 > .m-data-table__wrapper > table { - border-spacing: 0px 8px !important; -} - -.justify-center.m-input--checkbox > .m-input__control { - flex-grow: 0 !important; - width: auto !important; -} - -.elevation-tab { - background-color: #F0F3FA !important; - padding: 3px; -} - -.m-item-group.elevation-tab .m-btn.m-btn--has-bg.m-btn--active { - background-color: white !important; - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-size: 14px; - line-height: 16px; - display: flex; - align-items: center; - text-align: center; - letter-spacing: 0.1px; - /* text/1-2强调 */ - - color: #323D6F; -} - -.elevation-tab .theme--light.m-btn--active:hover::before, .elevation-tab .theme--light.m-btn--active::before { - opacity: 0; -} - -.m-item-group.elevation-tab .m-btn.m-btn--has-bg { - background-color: #F0F3FA !important; - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 21px; - /* identical to box height, or 150% */ - - display: flex; - align-items: center; - text-align: center; - /* text/2-2正文 */ - - color: #7681AB; -} - -.remover-hover.m-list-item:hover::before { - opacity: 0 !important; -} - -.m-chip:not(.m-chip--active) { - background: #f6f8fd !important; -} - -.m-chip.theme--light.m-chip--select { - background: #f6f8fd !important; -} - -.max-full-height { - max-height: 100% !important; -} - -.m-stepper__content.full-height .m-stepper__wrapper { - height: 100% !important; -} - -.m-window.m-item-group.flex-grow-1 .m-window__container { - height: 100% !important; -} - -.full-height.d-flex.flex-column .m-data-table__wrapper { - flex-grow: 1 !important; -} - -.m-text-field.m-text-field--solo.elevation-0:not(.m-text-field--solo-flat) > .m-input__control > .m-input__slot { - box-shadow: none; -} - -.flex-column { - display: flex; - flex-direction: column; - word-break: break-all; -} - -.flex-height-auto { - flex: auto; -} - -.overflow-y { - overflow-y: scroll; - overflow-x: hidden; -} - -.sheet-dialog { - padding-left: 80px; - padding-right: 80px; - padding-bottom: 24px; - padding-top: 24px; - height: 100%; - width: 100%; - position: absolute; -} - -.m-stepper__content.full-height .m-stepper__wrapper { - height: 100% !important; -} - -.m-window.m-item-group.flex-grow-1 .m-window__container { - height: 100% !important; -} - -.full-height.d-flex.flex-column .m-data-table__wrapper { - flex-grow: 1 !important; -} - -.m-text-field.m-text-field--solo.elevation-0:not(.m-text-field--solo-flat) > .m-input__control > .m-input__slot { - box-shadow: none; -} - -.line-clamp-2 { - word-break: break-all; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; -} - -.fold { - width: calc(100% - 470px); - display: inline-block; -} - -.m-text-field.m-text-field--solo:not(.m-text-field--solo-flat) > .m-input__control > .m-input__slot { - box-shadow: initial; -} - -.m-data-table > .m-data-table__wrapper > table > thead > tr > th, .m-data-table > .m-data-table__wrapper > table > tbody > tr > td { - padding: 0 24px !important; -} - -.error--text { - color: #FF5252 !important; - caret-color: #FF5252 !important; -} - -.btn-form { - width: 140px !important; - height: 56px !important; - padding: 4px 58px !important; - border-radius: 12px !important; - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-size: 16px; - line-height: 28px; -} - -.btn-form-full { - width: 100% !important; - height: 56px !important; - padding: 4px 58px !important; - border-radius: 12px !important; -} - -.btn-form-rounded { - height: 40px !important; - padding: 8px 14px !important; - border-radius: 99px !important; -} - -/* fill/线 */ -.btn-fill-line { - border: 1px solid #E2E7F4 !important; - border-radius: 8px !important; -} - -/* 小按钮/主要/默认 */ -.small-btn { - min-width: 100px !important; - height: 40px !important; - padding: 4px !important; -} - -.medium-btn { - min-width: 100px !important; - height: 48px !important; - padding: 4px !important; -} - -.linear--text { - color: #A18BFF !important; -} - -.gradient--text { - color: #4318FF !important; -} - -.search-panel { - height: 40px !important; - position: relative !important; -} - -.search-panel-right { - position: absolute !important; - right: 0 !important; - top: 0 !important; -} - -.rounded-5 { - border-radius: 20px !important; -} - -/*.m-text-field.m-text-field--solo .m-input__append-inner, .m-text-field.m-text-field--solo .m-input__prepend-inner { - margin-top: 0 !important; -}*/ - -.m-application .overflow-x-visible { - overflow-x: visible !important; -} - -.m-application .overflow-y-visible { - overflow-y: visible !important; -} - -.border-bottom-none { - border-bottom: none !important; -} - -.masa-stack-components .page-select { - margin-top: 2px; -} - -.masa .warning-disabled--text { - color: #FBACA3 !important; -} - -.m-alert__wrapper { - width: 100%; -} - -.m-input--selection-controls__ripple:before { - opacity: 0; -} - -.m-text-field__details { - font-weight: 400; - font-size: 10px; - line-height: 15px; - color: #A3AED0; -} - -/*.m-stepper__wrapper { - overflow: visible; -}*/ - -.m-dialog { - border-radius: 20px !important; -} - - .m-dialog .m-sheet.m-card { - border-radius: 20px !important; - } - -.vertical-divider { - width: 0px; - height: 8px; - border: 1px solid #E2E7F4; - flex: none; - order: 1; - flex-grow: 0; - margin-left: 8px; - margin-right: 8px; -} - -.m-card { - box-shadow: 0px 0px 0px 0px rgb(0 0 0 / 20%), 0px 0px 0px 0px rgb(0 0 0 / 14%), 0px 0px 0px 0px rgb(0 0 0 / 12%) !important; - border-radius: 20px !important; -} - -.row-box > .col { - padding-top: 18px; - padding-bottom: 18px; -} - - -@-webkit-keyframes searchOpen { - 0% { - width: 488px; - } - - 100% { - width: 100%; - } -} - -@keyframes searchOpen { - 0% { - width: 488px; - } - - 100% { - width: 100%; - } -} - -.animate__searchOpen { - -webkit-animation-name: searchOpen; - animation-name: searchOpen; -} - -@-webkit-keyframes searchShrink { - 0% { - width: 100%; - } - - 100% { - width: 488px; - } -} - -@keyframes searchShrink { - 0% { - width: 100%; - } - - 100% { - width: 488px; - } -} - -.animate__searchShrink { - -webkit-animation-name: searchShrink; - animation-name: searchShrink; -} - -/*.m-stepper__header { - height: 48px !important; - margin: -8px 0 18px 0; -} - -.m-stepper__step { - padding: 0 !important; -}*/ - -.outlined-box-medium { - border: 1px solid #E2E7F4; - border-radius: 8px; - height: 48px; - padding-left: 6px; -} - -.sheetDialogPadding { - padding-left: 228px; - padding-right: 228px; - padding-bottom: 48px; - padding-top: 48px; - height: 100%; - width: 100%; - position: absolute; -} - -.m-input__append-outer, .m-input__prepend-outer { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.m-input__control { - flex: 1; -} - -.remind--text { - color: #FF7D00 !important; -} - -.default-tab { - height: 36px; -} - - .default-tab button.m-btn--active { - color: #323D6F; - font-weight: 700; - font-size: 14px; - } - - .default-tab button { - color: #7681AB; - font-size: 14px; - font-weight: 500; - } - -.flex-none { - flex: none; -} - -.default-tag { - padding: 8px 14px; -} - - .default-tag .m-chip__content { - white-space: nowrap !important; - overflow: hidden !important; - text-overflow: ellipsis !important; - } - -.line-fill { - border: 1px solid #FFFFFF !important; -} - -.line-primary { - border: 1px solid #4318FF !important; -} - -.m-input--is-disabled { - opacity: 1 !important; -} - - .m-input--is-disabled .m-input--selection-controls__input { - opacity: 0.6; - } - -.fit-width { - width: fit-content; -} - -.button-divider { - padding-right: 0 !important; -} - - .button-divider .m-divider__content { - margin-right: 0; - padding-right: 0; - } - -.m-application .bgray { - border: 1px solid #E9EDF7; -} - - .m-application .bgray .clock-size { - font-size: 1rem; - } - -.masa-main .m-card { - border-radius: 12px !important; -} - -.m-application--is-ltr .m-border__left.green { - width: 2px !important; - background: #05CD99 !important; - flex: none !important; - order: 0 !important; - align-self: stretch !important; - flex-grow: 0 !important; -} - -.m-divider__wrapper.m-divider__wrapper--has-content.m-divider__wrapper--right { - padding: 8px 0px 0px 0px !important; -} - -.theme--light.m-data-table > .m-data-table__wrapper > table > tbody > tr:hover:not(.m-data-table__expanded__content):not(.m-data-table__empty-wrapper) { - background-color: #F6F8FD !important; - border-radius: 2px !important; -} - -.theme--light.m-data-table { - margin-left: 8px; - margin-right: 8px; -} - - .theme--light.m-data-table ::-webkit-scrollbar { - height: 0px!important; - } - -.m-data-table > .m-data-table__wrapper.fixed-right > table > thead > tr > th:last-child::after { - width: 0px !important; - content: "" !important; -} - -.m-data-table > .m-data-table__wrapper.fixed-right > table > tbody > tr > td:last-child::after { - width: 0px !important; - content: "" !important; -} - -.m-application .mdi-radiobox-marked { - font-size: 36px !important; -} - -.m-application .mdi-radiobox-blank { - font-size: 36px !important; -} - -.masa-main .search { - width: 300px; -} - -.m-tooltip--attached { - display: none !important; -} - -.masa pre { - white-space: pre-wrap !important; - word-wrap: break-word !important; -} - -.s-autocomplete-selection .m-list-item__action { - margin-right: 0px !important; -} - - .s-autocomplete-selection .m-list-item__action .m-list-item__action-text { - width: 100%; - } \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css b/src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css deleted file mode 100644 index 76d2fe1a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css +++ /dev/null @@ -1,7 +0,0 @@ -@charset "UTF-8";/*! - * animate.css - https://animate.style/ - * Version - 4.1.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2020 Animate.css - */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css b/src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css deleted file mode 100644 index e26cd6aa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css +++ /dev/null @@ -1,576 +0,0 @@ -html { - font-size: 16px; -} - -/*scrollbar*/ -::-webkit-scrollbar-track { - border-radius: 6px; - margin: 5px 0; - background-color: #F6F8FD; -} - -::-webkit-scrollbar { - width: 8px; - height: 5px; - margin: 5px 0; -} - -::-webkit-scrollbar-thumb { - margin: 5px 0; - border-radius: 4px; - background-color: #A3AED0 !important; -} - -.border-b-solid { - /* 分割线/下 */ - box-shadow: inset 0px -1px 0px #F0F3FA !important; -} - -.block-center { - /*flex 布局*/ - display: flex; - /*实现垂直居中*/ - align-items: center; -} - -.block-between { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; -} - -/*组件样式全局修改start*/ -.m-radio i { - font-size: 21px !important; -} - -.m-input__slot { - margin-bottom: 0px !important; -} - -.m-messages { - min-height: 0px !important; -} - -.m-navigation-drawer__border { - width: 0 -} - -.m-card { - box-shadow: 0px 0px 0px 0px rgb(0 0 0 / 20%), 0px 0px 0px 0px rgb(0 0 0 / 14%), 0px 0px 0px 0px rgb(0 0 0 / 12%) !important; - border-radius: 20px; -} - - .m-card.line { - border-radius: 10px !important; - } - -.m-card__text { - padding: 16px 24px; - height: 100%; -} - -.m-input .m-input__icon .mdi-menu-down { - color: #A3AED0; -} - -.m-input .m-label { - /* BUTTON-按钮 */ - font-family: Roboto !important; - font-style: normal !important; - font-weight: 500 !important; - font-size: 0.875rem !important; - /* line-height: 1rem !important;*/ - /* default color */ - color: #7681AB; -} - -.m-input--checkbox .mdi-checkbox-blank-outline { - color: #A3AED0 !important; - caret-color: #A3AED0 !important; -} - -.theme--light .m-input--is-disabled .mdi-checkbox-blank-outline { - color: #E9EDF7 !important; - caret-color: #E9EDF7 !important; -} - -.theme--light .m-input--is-disabled .mdi-checkbox-marked { - color: #E9EDF7 !important; - caret-color: #E9EDF7 !important; -} - -.m-input--checkbox .m-input--selection-controls__ripple:before { - content: none; -} - -.m-input--selection-controls__input:hover .mdi-checkbox-blank-outline { - color: #4318FF !important; - caret-color: #4318FF !important; -} - -.m-radio .mdi-radiobox-blank { - color: #A3AED0 !important; - caret-color: #A3AED0 !important; -} - - -.table-header-fill .m-data-table-header tr { - background: #F6F8FD; -} - -.table-border-none td, th { - border-bottom: 0px !important; - box-shadow: none; -} - -.table-border-solid td, th { - border-bottom: 0 !important; - box-shadow: none; -} - -.primaryText .primaryText { - color: #4318FF !important; - caret-color: #4318FF !important; -} - -.m-pagination__navigation, .m-pagination__item { - box-shadow: 0px 0px 0px 0px rgb(0 0 0 / 20%), 0px 0px 0px 0px rgb(0 0 0 / 14%), 0px 0px 0px 0px rgb(0 0 0 / 12%) !important; -} - -.m-btn--is-elevated { - box-shadow: none !important; -} - -.hide-shadow { - box-shadow: none !important; - border: none; -} - -/* pagetabs */ - -.m-page-tabs .m-slide-group__prev.m-slide-group__prev--disabled { - flex: none !important; - min-width: 0px !important; -} - -/* pagetabs */ -/*组件样式全局修改end*/ -/*shop*/ -.ml300 { - margin-left: 300px; -} - -.commodity:hover { - height: calc(100% + 10px); -} - - .commodity:hover .content { - transition-property: margin-top; - transition-duration: 0.5s; - box-shadow: 0px 18px 40px rgba(112, 144, 176, 0.12) !important; - margin-top: -4px; - } - -.order:hover { - background-color: #6946FF !important; -} - - .order:hover .white-order { - color: #FFFFFF !important; - caret-color: #FFFFFF !important; - } - -.favorite:hover { - background: #F6F8FD !important; -} -/*shop*/ - -.coupons.m-text-field > .m-input__control > .m-input__slot:before { - border-color: transparent; - border-style: hidden; -} - -.coupons.m-text-field > .m-input__control > .m-input__slot:after { - border-color: transparent; - border-style: hidden; -} - -.coupons .m-input__control .m-text-field__slot input::-webkit-input-placeholder { - font-family: Roboto !important; - font-style: normal !important; - font-weight: bold !important; - font-size: 1rem !important; - line-height: 1.1875rem !important; - letter-spacing: 0.009375rem !important; - color: #323D6F !important; -} - -.m-text-field.m-input--dense:not(.m-text-field--outlined) .m-text-field__prefix, .m-text-field.m-input--dense:not(.m-text-field--outlined) .m-text-field__suffix, .m-text-field.m-input--dense:not(.m-text-field--outlined) input { - padding-top: 0; -} - -.max-height { - height: 100% !important; -} - -.max-width { - width: 100% !important; -} - -.full-width { - width: 100% !important; -} - -.full-height { - height: 100% !important; -} - -.hide { - display: none; -} - -.border-right-solid { - border-right: 1px solid #ebe9f1; -} - -.border-left-solid { - border-left: 1px solid #ebe9f1; -} - -.congratulation-medal { - position: absolute; - top: 0; - right: 37px; -} - -.a { - color: #7367f0 !important; - text-decoration: none; -} - -.border-top-solid { - border-top: 1px solid #d8d6de; -} - -.border-solid { - border: 1px solid #d8d6de; -} - -.card-text { - line-height: 1.5rem; - box-sizing: border-box; - margin-block-start: 1em; - margin-block-end: 1em; - margin-inline-start: 0px; - margin-inline-end: 0px; -} - -.pro-nav > .m-tabs-bar { - background-color: transparent !important; -} - -.pro-nav .m-tab:before { - background-color: transparent; -} - -.m-btn { - text-transform: none !important; -} - -.list-unstyled { - list-style: none; -} - -.vertical-center { - display: flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; -} - -.linear-gradient-purple { - background: linear-gradient(118deg,#7367f0,rgba(115,103,240,.7)) -} - -.grey-bg { - background-color: #f8f8f8; -} - -.hover-pointer { - cursor: pointer; -} - -.justify-text-align { - text-align: justify !important; -} - -.relate-group .m-icon { - font-size: 40px; -} - -.relate-group .m-slide-group__next { - margin-left: 10px; -} - -.pointer-events-none { - pointer-events: none; -} - -.btn .m-label { - color: #323D6F; - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 16px; -} - -.mtab-tab-linear-primary { - background: linear-gradient(270deg, #4318FF 5.56%, rgba(67, 24, 255, 0) 100%); -} - -.mtab-tab-linear-neutral { - background: linear-gradient(270deg, #E9EDF7 0%, rgba(233, 237, 247, 0) 100%); -} - -.mtab-tab-line { - align-self: stretch; - margin: 10px 0px; - width: 87px; - height: 6px; - border-radius: 60px; -} - -.mtab-tab-indicator { - margin-top: 3px; - margin-left: -1px; - align-self: stretch; - width: 22px; - height: 22px; -} - -.mtab-tab-indicator-primary { - border: 4px solid #4318FF; - box-sizing: border-box; -} - -.mtab-tab-indicator-neutral { - background: #F0F3FA; - border: 4px solid #A3AED0; - box-sizing: border-box; -} - -.mtab-tab-title { - position: absolute; - top: 29px; - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 16px; - color: #1B2559; -} - -.auto-width { - width: auto; - margin: 0px 8px; -} - -.hidden-webkit-scrollbar::-webkit-scrollbar { - display: none; -} - -.hidden-webkit-scrollbar { - -ms-overflow-style: none; /* for Internet Explorer, Edge */ - overflow-y: scroll; -} - -.neutral-lighten-1--text .m-label { - color: #323D6F !important; -} - -.neutral-lighten-4--text .m-label { - color: #A3AED0 !important; -} - -.theme--light.m-text-field--outlined.neutral-lighten-4--text > .m-input__control > .m-input__slot fieldset { - color: #A3AED0 !important; -} - -.task-search.m-text-field > .m-input__control > .m-input__slot:before, .m-text-field > .m-input__control > .m-input__slot:after { - width: 0 !important; -} - -.task-search.m-text-field > .m-input__control > .m-input__slot:before, .m-text-field > .m-input__control > .m-input__slot:after { - width: 0 !important; -} - -.hide-timeline-before.m-timeline:before { - content: none; -} - -.pro-timeline-before.m-timeline:before { - background-color: #E9EDF7 !important; -} - - -.divider-align-start .m-timeline-item__divider { - align-items: start; - margin-top: 8px; -} - -td.text-center .m-input--checkbox .m-input__slot { - justify-content: center !important; -} - -.m-divider { - border-color: #E9EDF7 !important; -} - -.m-application .elevation-6 { - box-shadow: 0 18px 40px 0 rgb(112 144 176 / 12%) !important; -} - -.task-datepicker { - border-radius: 0px !important; -} - -input::-webkit-input-placeholder { - color: #7681AB !important; - font-size: 12px !important; -} - -.m-data-table-header__icon { - position: absolute !important; -} - -.user .m-data-table-header__icon { - margin-top: 1px; -} - -.neutral-lighten-icon .m-icon { - color: #A3AED0 !important; -} - -.m-timeline-flat .m-timeline-item__dot { - box-shadow: none; -} - -.chip-text { - font-style: normal !important; - font-weight: bold !important; -} - -.m-application .remover-ripple a { - color: #4318FF !important; -} - -.remover-ripple .m-list-item:before { - content: none !important; -} - -.remover-ripple .m-ripple__container { - opacity: 0 !important; -} - -.remover-ripple .m-list-item:hover .m-list-item__title { - color: #4318FF !important; -} - -.remover-ripple-with-icon .m-list-item:hover .m-icon { - color: inherit !important; -} - -.cyan { - background-color: #37A7FF !important; -} - -.cyan--text { - color: #37A7FF !important; -} - -.cyan-light { - background-color: #EBF6FF; -} - -.theme--light.m-icon { - color: #7681AB; -} - -.invoice-list-avatar { - width: 32px; - height: 32px; - font-size: .857rem; - font-weight: 600; -} - -.pagetabs .m-item-group.m-slide-group.m-tabs-bar { - margin-top: 4px; -} - -.m-page-tabs .m-page_tab { - background-color: #FFF; - font-family: Roboto; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 16px; - letter-spacing: 0.1px; - /* text/3-1次要 */ - color: #A3AED0 !important; - border-top-left-radius: 8px !important; - border-top-right-radius: 8px !important; -} - -.m-page_tab .m-icon { - color: #A3AED0 !important; - font-size: 16px !important; -} - -.m-page_tab_active { - background-color: #F0F3FA !important; - font-family: Roboto; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 16px; - letter-spacing: 0.1px; - /* text/1-1强调 */ - color: #1B2559 !important; -} - - .m-page_tab_active > .m-icon { - color: #1B2559 !important; - } - -.m-page-tabs > .m-tabs-bar { - border-bottom-left-radius: 20px !important; - border-bottom-right-radius: 20px !important; - height: 36px; - padding-left: 16px; -} - -.m-page-tabs .m-tab:before { - content: none !important; -} - -.m-page-tabs .m-tab:hover { - background-color: #F6F8FD; - color: #485585 !important; -} - - .m-page-tabs .m-tab:hover > .m-icon { - color: #485585 !important; - } - -.m-app-bar.rounded-b-4 > .m-toolbar__content { - border-bottom-left-radius: 20px !important; - border-bottom-right-radius: 20px !important; -} - -.m-dialog--drawer .m-card { - border-radius: 0; -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json deleted file mode 100644 index 013276a3..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "$Text": "English", - "$DateTimeFormat": "MM/dd/yyyy HH:mm:ss", - "$DateFormat": "MM/dd/yyyy", - "$MonthDayFormat": "MM/dd", - "$TimeFormat": "HH:mm:ss", - "Unit.Bar": "Bar", - "DeletionConfirmationMessage": "Are you sure delete {0}?", - "BasicInformation": "Basic Information", - "DetailInformation": "Detail Information", - "OperationConfirmation": "Operation confirmation", - "NextStep": "Next step", - "PreviousStep": "Previous step", - "DateRange": "Date range", - "Total": "Total", - "Item": "Item", - "All": "All", - "RowsPerPage": "Rows per page", - "Permission.Add": "Add", - "Permission.Edit": "Edit", - "Permission.Delete": "Delete", - "EditIn": "Edit in", - "EnabledConfirmation": "Are you sure you want to enable?", - "DisableConfirmation": "Are you sure you want to disable?", - "CronExpressionNotHasNextRunTime": "Cannot calculate the next run time from this expression", - "RunningIntervalTips": "The running time interval cannot be less than 30 seconds", - "DataBoundaryPrompt": "Default display of the latest 500 items", - "CreationTime": "Creation time", - "ModificationTime": "Modification time", - "WebsiteMessage": "Website message", - "WaitAudit": "Wait audit", - "ManualSelection": "Manual selection", - "BatchUpload": "Batch upload", - "PleaseSelectStartTime": "Please select start time", - "PleaseSelectEndTime": "Please select end time", - "OperationSuccessfulMessage": "Operate successfully", - "DeletedSuccessfullyMessage": "Deleted successfully", - "CreateSuccessfulMessage": "Create {0} successfully", - "EditSuccessfulMessage": "Edit {0} successfully", - "DeleteSuccessfulMessage": "Deleted {0} successfully", - "BeEqualTo": "Be equal to", - "NotEqualTo": "Not equal to", - "FirstAlarmTime": "First alarm time", - "LastAlarmTime": "Last alarm time", - "ProcessingCompletedTime": "Processing completed time", - "TimeType": "Time type", - "ProcessingCompleted": "Processing completed", - "CheckFrequency": "Check frequency", - "FixedInterval": "Fixed interval", - "MessageTemplate": "Message template", - "AlarmNotification": "Alarm notification", - "RecoveryNotification": "Recovery notification", - "ChannelType": "Channel type", - "AlarmRule": "Alarm rule", - "AlarmHistory": "Alarm history", - "InvalidCronExpression": "Invalid CRON expression", - "AlarmRuleBlock": { - "TimeType": "Time type", - "ProjectIdentity": "Project", - "AppIdentity": "App", - "MetricId": "Metric", - "AlarmHistory": "Alarm history", - "AddAlarmRule": "Add alarm rule", - "EditAlarmRule": "Edit alarm rule", - "RelationRes": "Relation resource", - "MonitoringSetting": "Monitoring setting", - "AlarmSetting": "Alarm setting", - "SelectItem": "Select item", - "SelectApp": "Select App", - "ChartYAxisUnit": "YUnit", - "ChartSetting": "Chart setting", - "ChartSettingTip": "When an alarm occurs, the alarm history details display the data trend in the form of a chart", - "VariableConfiguration": "Variable configuration", - "CronExpression": "CRON expression", - "GetTotal": "Get total", - "TotalVariable": "Variable", - "OffsetTip": "The current time is compared with the data before N cycles", - "OffsetPeriod": "Period", - "LogFilter": "Log filter", - "WhereExpression": "Expression", - "BaseInfo": "Basic information", - "TriggerRules": "Trigger rules", - "AlertSeverity": "Severity", - "MessageTemplateId": "Message template", - "MessageTemplate": "Message template", - "IsRecoveryNotification": "Recovery notification", - "IsNotification": "Notification", - "RecoveryNotificationTip": "Send a notification when the alarm automatically recovers", - "NotificationTip": "Send a notification when an alert rule is triggered", - "AdvancedConfiguration": "Advanced configuration", - "ContinuousTriggerThreshold": "Continuous trigger threshold", - "ContinuousTriggerThresholdTip": "The alarm will only be triggered when the trigger conditions are met for as many times as the consecutive checks and evaluations are performed", - "SilenceCycle": "Silence cycle", - "SilenceCycleTip": "If the alarm does not return to normal after the alarm occurs, how often should the alarm notification be sent repeatedly?", - "ChartPreview": "Chart preview", - "ExpressionTip": "Please refer to MASA Stack Documentation Site Rule Engine Introduction: http://docs.masastack.com/framework/building-blocks/rules-engine/overview", - "MetricMonitor.Name": "Name", - "MetricMonitor.Tag": "Tag", - "MetricMonitor.ComparisonOperator": "Comparison operator", - "MetricMonitor.AggregationType": "Aggregation type", - "NextRunTimeTip": "The next 5 run times:", - "IntervalTime": "Interval time", - "IntervalTimeType": "Interval time type", - "SilenceCycleValue": "Silence cycle" - }, - "AlarmChartBlock": { - "ChartPreview": "Chart preview", - "ChartPreviewTips": "This chart is only for reference of preview effect", - "UpdateChart": "Update chart", - "YAxisUnits": "YUnit", - "LogSamplingPreview": "Log sampling preview", - "LogSamplingPreviewTips": "By default, the latest log data that meets the rules in the previous period is obtained" - }, - "AlarmHistoryBlock": { - "NoNotice": "No notice", - "AlertSeverity": "Severity", - "TriggerRules": "Trigger rules", - "FirstAlarmTime": "First alarm time", - "AlarmCount": "Alarm count", - "LastAlarmTime": "Last alarm time", - "HandleStatus": "Status", - "ViewAlarmHistory": "View alarm", - "AlarmDetails": "Alarm details", - "HandleAlarm": "Handle alarm", - "VariableInfo": "Variable info", - "OffsetPeriod": "Offset {0} period", - "AlarmInfo": "Alarm info", - "AlarmTime": "Alarm time", - "HandleDetails": "Handle details", - "RecoveryNotification": "Recovery notification", - "ThirdPartyProcessing": "Third party processing", - "SendNotificationAfterProcessing": "Send a notification when processing is complete", - "HandleCompletionTime": "Processor|Processor time", - "AutoRecovery": "Auto recovery", - "PostWebHookTip": "Auto recovery", - "ChangeAlarmHandle": "Change alarm handle" - }, - "WebHookBlock": { - "AddWebHook": "Add WebHook", - "EditWebHook": "Edit WebHook", - "TestWebHook": "Test WebHook", - "SecretKeyTips": "For SecretKey usage, please refer to MASA Stack Document Site Alarm Center Development Guide: https://docs.masastack.com/stack/alert/develop-guide" - }, - "ChineseLetterNumberUnderlineValidator": "{0} must be Chinese, Arabic numerals, English letters or underline", - "ChineseLetterNumberValidator": "{0} must be Chinese, English letters, Arabic numerals", - "ChineseLetterUnderlineValidator": "{0} must be Chinese, English letters or underline", - "ChineseLetterNumberSymbolValidator": "{0} must be Chinese, English letters, Arabic numerals or some special characters", - "ChineseLetterValidator": "{0} must be Chinese, English letters", - "ChineseValidator": "{0} must be Chinese", - "IdCardValidator": "{0} is not a valid ID card", - "LetterNumberValidator": "{0} must be English letters or underline", - "LetterValidator": "{0} must be English letters", - "LowerLetterValidator": "{0} must be lowercase English letters", - "NumberValidator": "{0} must be Arabic numerals", - "PhoneValidator": "{0} must be a valid mobile phone number", - "RequiredValidator": "{0} is required", - "UpperLetterValidator": "{0} must be in capital English letters", - "UrlValidator": "{0} must be a valid Url address", - "EmailRegularValidator": "{0} must be a valid Email", - "IdentityValidator": "{0} must be Arabic numerals, English letters or hyphen and dots", - "InclusiveBetweenValidator": "{0} between [{1} and {2}]", - "LengthValidator": "The length of {0} is {1} to {2} characters", - "IsInEnumValidator": "Please select the correct {0}" -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json deleted file mode 100644 index bbb1d45d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "zh-CN", - "en-US" -] - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json deleted file mode 100644 index bbb1d45d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "zh-CN", - "en-US" -] - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json deleted file mode 100644 index 34d3ce92..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "$DefaultLanguage": "true", - "$Text": "中文简体", - "$DateTimeFormat": "yyyy年MM月dd日 HH:mm:ss", - "$DateFormat": "yyyy年MM月dd日", - "$MonthDayFormat": "MM月dd日", - "$TimeFormat": "HH:mm:ss", - "Unit.Bar": "条", - "Favorite": "收藏", - "Source": "来源", - "Search": "搜索", - "Type": "类型", - "Copy": "复制", - "CreationTime": "创建时间", - "ModificationTime": "修改时间", - "State": "状态", - "Enabled": "启用", - "IsEnabled": "启用/禁用", - "Description": "描述说明", - "Explain": "说明", - "Disabled": "禁用", - "Action": "操作", - "Add": "新建", - "Submit": "提交", - "Save": "保存", - "Delete": "删除", - "Edit": "编辑", - "Sync": "同步", - "View": "查看", - "Handle": "处理", - "AddChild": "加子级", - "DeletionConfirmationMessage": "确定删除{0}吗", - "Creator": "创建人", - "Modifier": "最近修改人", - "Rows per page": "列/页", - "Male": "男", - "Female": "女", - "NextStep": "下一步", - "PreviousStep": "上一步", - "PCS": "个", - "Preview": "预览", - "Fill in more": "填写更多", - "Avatar": "头像", - "Icon Code": "ICON代码", - "Total": "共", - "Item": "条", - "All": "全部", - "RowsPerPage": "每页行数", - "User": "用户", - "Name": "姓名", - "Avatr": "头像", - "User.DisplayName": "用户昵称", - "PhoneNumber": "手机号码", - "IdCard": "身份证号", - "Account": "账号", - "UserId": "用户Id", - "Password": "密码", - "CompanyName": "公司名称", - "Address": "地区", - "BasicInformation": "基础信息", - "DetailInformation": "详细信息", - "OperationConfirmation": "操作确认", - "EnabledConfirmation": "您确认要启用吗?", - "DisableConfirmation": "您确认要禁用吗?", - "DateRange": "日期范围", - "Sms": "短信", - "Email": "邮箱", - "WebsiteMessage": "站内信", - "WeixinWork": "企业微信", - "WeixinWorkWebhook": "企业微信群机器人", - "WaitAudit": "待审核", - "Adopt": "通过", - "Fail": "未通过", - "Normal": "正常", - "Invalid": "失效", - "Permission.Add": "新建", - "Permission.Edit": "编辑", - "Permission.Delete": "删除", - "Team": "团队", - "Role": "角色", - "Organization": "组织架构", - "EditIn": "编辑于", - "ManualSelection": "手动选择", - "BatchUpload": "批量上传", - "Second": "秒", - "Send": "发送", - "Each": "每", - "Draft": "草稿", - "Initiate": "启动", - "Disable": "禁用", - "Withdraw": "撤回", - "Ok": "确定", - "Cancel": "取消", - "StartTime": "开始时间", - "EndTime": "结束时间", - "PleaseSelectStartTime": "请选择开始时间", - "PleaseSelectEndTime": "请选择结束时间", - "OperationSuccessfulMessage": "操作成功", - "DeletedSuccessfullyMessage": "删除成功", - "CreateSuccessfulMessage": "新建{0}成功", - "EditSuccessfulMessage": "编辑{0}成功", - "DeleteSuccessfulMessage": "删除{0}成功", - "GreaterThan": ">", - "GreaterOrEqual": ">=", - "LessThan": "<", - "LessOrEqual": "<=", - "Equal": "==", - "NotEqual": "!=", - "BeEqualTo": "等于", - "NotEqualTo": "不等于", - "Count": "计数", - "Sum": "求和", - "Avg": "平均值", - "FirstAlarmTime": "初次告警时间", - "LastAlarmTime": "最近告警时间", - "ProcessingCompletedTime": "处理完成时间", - "TimeType": "时间类型", - "Serious": "严重", - "High": "高", - "Secondary": "中", - "Low": "低", - "Report": "报告", - "Pending": "待处理", - "InProcess": "处理中", - "ProcessingCompleted": "处理完成", - "Notified": "处理完成已通知", - "CheckFrequency": "检查频率", - "FixedInterval": "固定间隔", - "MessageTemplate": "消息模板", - "Handler": "处理人", - "Test": "测试", - "Minute": "分钟", - "Hour": "小时", - "Day": "天", - "AlarmNotification": "告警通知", - "RecoveryNotification": "恢复通知", - "ChannelType": "渠道类型", - "Channel": "渠道", - "Template": "模板", - "AlarmRule": "告警规则", - "AlarmHistory": "告警历史", - "WebHook": "WebHook", - "Receiver": "收件人", - "InvalidCronExpression": "无效的CRON表达式", - "CronExpressionNotHasNextRunTime": "您的表达式计算不出下一次运行时间", - "RunningIntervalTips": "运行时间间隔不能小于30秒", - "Notifier": "通知人", - "AlarmRuleBlock": { - "Log": "日志监控", - "Metric": "指标监控", - "TimeType": "时间类型", - "ProjectIdentity": "项目", - "AppIdentity": "应用", - "MetricId": "指标", - "AlarmHistory": "告警历史", - "Disable": "禁用", - "AddAlarmRule": "新建告警规则", - "EditAlarmRule": "编辑告警规则", - "RelationRes": "关联资源", - "MonitoringSetting": "监控设置", - "AlarmSetting": "告警设置", - "SelectItem": "选择项目", - "SelectApp": "选择应用", - "ChartYAxisUnit": "Y轴单位", - "ChartSetting": "图表设置", - "ChartSettingTip": "发生告警时,告警历史详情以图表的形式显示数据趋势", - "VariableConfiguration": "变量配置", - "Cron": "CRON", - "CronExpression": "CRON表达式", - "GetTotal": "获取数据总量", - "TotalVariable": "变量", - "Field": "日志参数", - "Count": "计数", - "Alias": "变量", - "Period": "周期", - "Offset": "偏移量", - "OffsetTip": "当前时间距离N周期之前的数据对比", - "OffsetPeriod": "周期", - "LogFilter": "日志筛选", - "WhereExpression": "表达式", - "BaseInfo": "基础信息", - "DisplayName": "告警规则名称", - "TriggerRules": "触发规则", - "AlertSeverity": "严重程度", - "MessageTemplateId": "消息模板", - "MessageTemplate": "消息模板", - "IsRecoveryNotification": "恢复通知", - "IsNotification": "告警通知", - "RecoveryNotificationTip": "当告警自动恢复时,发送通知", - "NotificationTip": "触发告警规则时,发送通知", - "AdvancedConfiguration": "高级配置", - "ContinuousTriggerThreshold": "连续触发阈值", - "ContinuousTriggerThresholdTip": "连续多少次执行检查评估都满足触发条件时,才会触发告警。", - "SilenceCycle": "沉默周期", - "SilenceCycleTip": "告警发生后未恢复正常,间隔多久重复发送一次告警通知", - "ChartPreview": "图表预览", - "Expression": "表达式", - "ExpressionTip": "请参考MASA Stack 文档站点规则引擎介绍:http://docs.masastack.com/framework/building-blocks/rules-engine/overview", - "MetricMonitor.Name": "监控指标", - "MetricMonitor.Tag": "Tag", - "MetricMonitor.Alias": "变量", - "MetricMonitor.ComparisonOperator": "比较运算符", - "MetricMonitor.Value": "值", - "MetricMonitor.AggregationType": "聚合类型", - "Time": "按时间", - "Cycle": "按周期", - "NextRunTimeTip": "预计未来5次检查时间:", - "IntervalTime": "间隔时间", - "IntervalTimeType": "间隔时间类型", - "SilenceCycleValue": "沉默周期" - }, - "AlarmChartBlock": { - "ChartPreview": "图表预览", - "ChartPreviewTips": "本图仅用于预览效果的参考", - "UpdateChart": "更新图表", - "YAxisUnits": "Y轴单位", - "LogSamplingPreview": "日志采样预览", - "LogSamplingPreviewTips": "默认获取上一周期符合规则的最近一条日志数据" - }, - "AlarmHistoryBlock": { - "Alarming": "正在告警", - "Processed": "已处理", - "NoNotice": "无需通知", - "AlertSeverity": "严重程度", - "DisplayName": "告警规则名称", - "TriggerRules": "触发规则", - "FirstAlarmTime": "初次告警时间", - "AlarmCount": "告警次数", - "LastAlarmTime": "最近告警时间", - "HandleStatus": "状态", - "ViewAlarmHistory": "查看告警", - "AlarmDetails": "告警详情", - "HandleAlarm": "处理告警", - "VariableInfo": "变量信息", - "OffsetPeriod": "偏移量{0}周期", - "AlarmInfo": "告警信息", - "AlarmTime": "告警时间", - "HandleDetails": "处理详情", - "ChangeAlarmHandle": "变更告警处理", - "RecoveryNotification": "恢复通知", - "ThirdPartyProcessing": "第三方处理", - "SendNotificationAfterProcessing": "处理完成后发送通知", - "Receiver": "收件人", - "HandleCompletionTime": "处理人|处理完成时间", - "AutoRecovery": "自动恢复", - "PostWebHookTip": "自动恢复" - }, - "WebHookBlock": { - "AddWebHook": "新建WebHook", - "EditWebHook": "编辑WebHook", - "TestWebHook": "测试WebHook", - "DisplayName": "名称", - "Url": "Url", - "Description": "描述", - "SecretKey": "密钥", - "SecretKeyTips": "密钥使用请参考MASA Stack 文档站点告警中心开发指南:https://docs.masastack.com/stack/alert/develop-guide" - }, - "ChineseLetterNumberUnderlineValidator": "{0}必须是中文、数字、字母或下划线", - "ChineseLetterNumberValidator": "{0}必须是中文、数字、字母", - "ChineseLetterUnderlineValidator": "{0}必须是中文、字母或下划线", - "ChineseLetterNumberSymbolValidator": "{0}必须是中文、字母、数字或部分特殊字符", - "ChineseLetterValidator": "{0}必须是中文、字母", - "ChineseValidator": "{0}必须是中文", - "IdCardValidator": "{0}不是一个有效的身份证", - "LetterNumberValidator": "{0}必须是字母或下划线", - "LetterValidator": "{0}必须是字母", - "LowerLetterValidator": "{0}必须是小写字母", - "NumberValidator": "{0}必须是数字", - "PhoneValidator": "{0}必须是一个合法的手机号码", - "RequiredValidator": "{0}是必需的", - "UpperLetterValidator": "{0}必须是大写字母", - "UrlValidator": "{0}必须是一个合法的Url地址", - "EmailRegularValidator": "{0}必须是一个合法的Email", - "IdentityValidator": "{0}必须是数字、字母或中划线和点", - "InclusiveBetweenValidator": "{0}需要在[{1 }- {2}]之间", - "LengthValidator": "{0}的长度必须在 {1} 到 {2} 字符", - "IsInEnumValidator": "请选择正确的{0}", - "Metric": "指标", - "DataBoundaryPrompt": "默认显示最近500条" -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/json.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/json.png deleted file mode 100644 index fee45284..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/json.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/left.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/left.png deleted file mode 100644 index ee5e3b2b..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/left.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/right.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/right.png deleted file mode 100644 index 30bb2ccb..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/right.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/forgot-password-v2.9faba3c1.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/forgot-password-v2.9faba3c1.svg deleted file mode 100644 index 030d94c0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/forgot-password-v2.9faba3c1.svg +++ /dev/null @@ -1,207 +0,0 @@ - - - Illustration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg deleted file mode 100644 index d1ac05b0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg +++ /dev/null @@ -1,351 +0,0 @@ - - - Group - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/rectangle.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/rectangle.png deleted file mode 100644 index 1ab629b5..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/rectangle.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/trophy.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/trophy.png deleted file mode 100644 index 98f0b8d0..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/trophy.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/2873.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/2873.png deleted file mode 100644 index 4b7e7881..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/2873.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/Gxwd.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/Gxwd.png deleted file mode 100644 index 503ecde3..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/Gxwd.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg deleted file mode 100644 index 103158e7..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.png deleted file mode 100644 index 7f0e0076..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg deleted file mode 100644 index fbafb572..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg deleted file mode 100644 index 0993edae..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg deleted file mode 100644 index 853702e9..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg deleted file mode 100644 index fc68bd37..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/401.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/401.png deleted file mode 100644 index 1f94504e..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/401.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/404.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/404.png deleted file mode 100644 index 39f2c595..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/404.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/500.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/500.png deleted file mode 100644 index fa65a8f6..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/500.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-active.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-active.png deleted file mode 100644 index 32c0c57f..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-active.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-complete.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-complete.png deleted file mode 100644 index 6bce91f2..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-complete.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-error.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-error.png deleted file mode 100644 index fa0df845..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-error.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload.png deleted file mode 100644 index 897cb609..00000000 Binary files a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload.png and /dev/null differ diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js b/src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js deleted file mode 100644 index e9b39492..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js +++ /dev/null @@ -1,19 +0,0 @@ -export function uploadImage(quillElement, element, ossParamter, index = 0) { - let _that = this; - let quill = quillElement.__quill;//get quill editor - let fileInput = element.querySelector('input.ql-image[type=file]')//get fileInput - let files = fileInput.files; - - ossUpload(files[index], ossParamter).then(fileUrl => { - let length = quill.getSelection().index; - quill.insertEmbed(length, 'image', fileUrl);//Insert the uploaded picture into the editor - quill.setSelection(length + 1); - index += 1; - if (index < files.length) { - _that.uploadImage(quillElement, element, ossParamter, index); - } - else { - fileInput.value = ''; - } - }); -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js b/src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js deleted file mode 100644 index 1f6e3a7e..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js +++ /dev/null @@ -1,90 +0,0 @@ -let util = { - scrollTop: (dom, id) => { - if (id) { - document.getElementById(id).scrollTop = 0; - } - else { - dom.scrollTop = 0; - } - }, - isJson: (str) => { - if (typeof str == 'string') { - try { - var obj = JSON.parse(str); - if (typeof obj == 'object' && obj) { - return true; - } else { - return false; - } - - } catch (e) { - console.log('error:' + str + '!!!' + e); - return false; - } - } - }, - jsonFormat: (dom, str) => { - if (!dom || !isJSON(str)) { - return; - } - - str = JSON.stringify(JSON.parse(str), null, 2); - str = str - .replace(/&/g, '&') - .replace(//g, '>'); - str = str.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { - var cls = 'number'; - if (/^"/.test(match)) { - if (/:$/.test(match)) { - cls = 'key'; - } else { - cls = 'string'; - } - } else if (/true|false/.test(match)) { - cls = 'boolean'; - } else if (/null/.test(match)) { - cls = 'null'; - } - return '' + match + ''; - }); - dom.innerHTML = str; - }, - screenSize: (editorDom) => { - let screenWidth = document.body.clientWidth || document.documentElement.clientWidth; - let screenHeight = document.body.clientHeight || document.documentElement.clientHeight; - let defWidth = 1920; - let defHeight = 1080; - let xScale = screenWidth / defWidth; - let yScale = screenHeight / defHeight; - editorDom.style.cssText += ';transform: scale(' + xScale + ',' + yScale + ');transform-origin: 0 0 0'; - - window.addEventListener('resize', () => { - let screenWidth = document.body.clientWidth || document.documentElement.clientWidth; - let screenHeight = document.body.clientHeight || document.documentElement.clientHeight; - xScale = screenWidth / defWidth; - yScale = screenHeight / defHeight; - editorDom.style.cssText += ';transform: scale(' + xScale + ',' + yScale + ');transform-origin: 0 0 0'; - }, false) - } -} - -window.util = util; - -function isJSON(str) { - if (typeof str == 'string') { - try { - var obj = JSON.parse(str); - if (typeof obj == 'object' && obj) { - return true; - } else { - return false; - } - - } catch (e) { - console.log('error:' + str + '!!!' + e); - return false; - } - } - console.log('It is not a string!') -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js b/src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js deleted file mode 100644 index 35a635ee..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js +++ /dev/null @@ -1,23 +0,0 @@ -export function upload(element, ossParamter, index = 0) { - let _that = this; - let vditor = element.Vditor; - let fileInput = element.querySelector('input[type=file]') - let files = fileInput.files; - - ossUpload(files[index], ossParamter).then(fileUrl => { - let succFileText = ""; - if (vditor && vditor.vditor.currentMode === "wysiwyg") { - succFileText += `\n ${fileUrl}`; - } else { - succFileText += `\n![${fileUrl}](${fileUrl})`; - } - document.execCommand("insertHTML", false, succFileText); - index += 1; - if (index < files.length) { - _that.upload(element, ossParamter, index); - } - else { - fileInput.value = ''; - } - }); -} \ No newline at end of file